/* * ===================================================================================== * * 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 "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(); m_lua.safe_script_file("mods/test.lua"); } void ScriptEngine::initUsertypes() { m_lua.new_usertype("Player", "inventory", &Player::inventory); m_lua.new_usertype("Inventory", "width", &Inventory::width, "height", &Inventory::height, "getStack", &Inventory::getStackRef, "setStack", &Inventory::setStack, "addStack", &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, "burnTime", sol::property(&Item::burnTime, &Item::setBurnTime), "harvestCapability", sol::property(&Item::harvestCapability, &Item::setHarvestCapability), "miningSpeed", sol::property(&Item::miningSpeed, &Item::setMiningSpeed) ); m_lua.new_usertype("Block", "id", &Block::id, "data", &Block::data, "name", sol::property(&Block::name, &Block::setName), "harvestRequirements", sol::property(&Block::harvestRequirements, &Block::setHarvestRequirements), "hardness", sol::property(&Block::hardness, &Block::setHardness), "setItemDrop", &Block::setItemDrop ); m_lua.new_usertype("Registry", "registerBlock", [] (Registry *reg, u32 id, u32 textureID, const std::string &name) { if (id == BlockType::Workbench) return reg->registerBlock(); else if (id == BlockType::Furnace) return reg->registerBlock(); else if (id == BlockType::Water) return reg->registerBlock(); else return reg->registerBlock(id, textureID, name); }, "registerItemBlock", [] (Registry *reg, u32 id, const std::string &name) { return reg->registerItem(id, id, name); }, "registerItem", [] (Registry *reg, u32 id, const std::string &name, u32 textureID) { return reg->registerItem(id, textureID, name); } ); }