/* * ===================================================================================== * * Filename: ScriptEngine.cpp * * Description: * * Created: 20/12/2018 00:42:55 * * Author: Quentin Bazin, * * ===================================================================================== */ #include "ItemBlock.hpp" #include "ScriptEngine.hpp" #include "Player.hpp" #include "Registry.hpp" #include "CraftingRecipe.hpp" #include "SmeltingRecipe.hpp" #include "BlockFurnace.hpp" #include "BlockWater.hpp" #include "BlockWorkbench.hpp" ScriptEngine *ScriptEngine::s_instance = nullptr; void ScriptEngine::init() { setInstance(this); initUsertypes(); m_lua["registry"] = &Registry::getInstance(); m_lua.open_libraries(sol::lib::base); m_lua.safe_script_file("mods/test.lua"); } void ScriptEngine::initUsertypes() { m_lua.new_usertype("Player", "inventory", &Player::inventory); m_lua.new_usertype("Inventory", "get_width", &Inventory::width, "get_height", &Inventory::height, "get_stack", &Inventory::getStackRef, "set_stack", &Inventory::setStack, "add_stack", &Inventory::addStack ); m_lua.new_usertype("ItemStack", "item", sol::property(&ItemStack::item, &ItemStack::setItem), "amount", sol::property(&ItemStack::amount, &ItemStack::setAmount) ); m_lua.new_usertype("Item", "name", &Item::name, "id", &Item::id, "is_fuel", sol::property(&Item::isFuel, &Item::setIsFuel), "burn_time", sol::property(&Item::burnTime, &Item::setBurnTime), "harvest_capability", sol::property(&Item::harvestCapability, &Item::setHarvestCapability), "mining_speed", sol::property(&Item::miningSpeed, &Item::setMiningSpeed) ); m_lua.new_usertype("Block", "id", &Block::id, "data", &Block::data, "name", sol::property(&Block::name, &Block::setName), "harvest_requirements", sol::property(&Block::harvestRequirements, &Block::setHarvestRequirements), "hardness", sol::property(&Block::hardness, &Block::setHardness), "set_item_drop", &Block::setItemDrop ); m_lua.new_usertype("Registry", "register_block", &Registry::registerBlockFromTable, "register_item_block", [] (Registry *reg, u32 id, const std::string &name) { return reg->registerItem(id, id, name); }, "register_item", [] (Registry *reg, u32 id, const std::string &name, u32 textureID) { return reg->registerItem(id, textureID, name); }, "register_crafting_recipe", &Registry::registerCraftingRecipeFromTable, "register_smelting_recipe", &Registry::registerSmeltingRecipeFromTable ); }