/* Copyright 2020-2022, Michele Santullo * This file is part of wrenpp. * * Wrenpp is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Wrenpp is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with wrenpp. If not, see . */ #include "wrenpp/vm_fun.hpp" #include "wrenpp/def_configuration.hpp" #include "wrenpp/callback_manager.hpp" #include #include #include #include #include #include namespace { struct CustomData { CustomData (std::random_device::result_type r) : generator(r), distrib(1, 6) { } std::mt19937 generator; std::uniform_int_distribution distrib; }; void user_input(wren::VM& vm, wren::ModuleAndName) { std::string retval; std::cin >> retval; set(vm, 0, retval); } void random_num(wren::VM& vm, wren::ModuleAndName) { auto* const cust_data = vm.user_data(); set(vm, 0, cust_data->distrib(cust_data->generator)); } std::string load_file (const std::string& path) { std::ifstream ifs(path); ifs >> std::noskipws; return std::string( std::istreambuf_iterator(ifs), std::istreambuf_iterator() ); } } //unnamed namespace int main() { std::random_device rand_dev; CustomData custom_data(rand_dev()); wren::DefConfiguration config; wren::VM vm(&config, &custom_data); vm.callback_manager().add_callback(true, "main", "Game", "user_input()", [](){return &user_input;}) .add_callback(true, "main", "Game", "random()", [](){return &random_num;}); interpret(vm, "main", load_file("main.wren")); wren::call(vm, wren::MN<"main", "the_game">, "play_game"); std::this_thread::sleep_for(std::chrono::milliseconds(1000)); return 0; }