/* 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;
}