You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
2.1 KiB
79 lines
2.1 KiB
#include "ruc/file.h" |
|
#include "sol/unsafe_function_result.hpp" |
|
|
|
#include "inferno/component/cameracomponent.h" |
|
#include "inferno/component/spritecomponent.h" |
|
#include "inferno/component/tagcomponent.h" |
|
#include "inferno/component/transformcomponent.h" |
|
#include "inferno/scene/scene.h" |
|
#include "inferno/script/luascript.h" |
|
#include "inferno/script/registration.h" |
|
|
|
namespace Inferno { |
|
|
|
void LuaScript::initialize() |
|
{ |
|
// Type registration |
|
// --------------------------------- |
|
|
|
Registration::fill(m_state); |
|
|
|
// Load libraries |
|
// --------------------------------- |
|
|
|
m_state.open_libraries(sol::lib::base, sol::lib::math); |
|
|
|
// Component get functions |
|
// --------------------------------- |
|
|
|
m_state.set_function("getTagComponent", [this]() -> TagComponent* { |
|
return &m_scene->getComponent<TagComponent>(m_entity); |
|
}); |
|
|
|
m_state.set_function("getTransformComponent", [this]() -> TransformComponent* { |
|
return &m_scene->getComponent<TransformComponent>(m_entity); |
|
}); |
|
|
|
m_state.set_function("getCameraComponent", [this]() -> CameraComponent* { |
|
return &m_scene->getComponent<CameraComponent>(m_entity); |
|
}); |
|
|
|
m_state.set_function("getSpriteComponent", [this]() -> SpriteComponent* { |
|
return &m_scene->getComponent<SpriteComponent>(m_entity); |
|
}); |
|
|
|
// Load and Initialize script |
|
// --------------------------------- |
|
|
|
loadScript(); |
|
|
|
callFunction("LuaScript", "initialize"); |
|
} |
|
|
|
void LuaScript::destroy() |
|
{ |
|
callFunction("LuaScript", "destroy"); |
|
} |
|
|
|
void LuaScript::update(float deltaTime) |
|
{ |
|
m_state["LuaScript"]["transform"] = &m_scene->getComponent<TransformComponent>(m_entity); |
|
callFunction("LuaScript", "update", deltaTime); |
|
} |
|
|
|
void LuaScript::loadScript() |
|
{ |
|
std::string script = ruc::File(m_path).data(); |
|
auto result = m_state.script(script.c_str(), |
|
[](lua_State*, sol::protected_function_result pfr) { return pfr; }); |
|
VERIFY(result.valid(), "LuaScript {}", ((sol::error)result).what()); |
|
} |
|
|
|
sol::table LuaScript::getTable(const char* name) |
|
{ |
|
sol::table table = m_state[name]; |
|
VERIFY(table.valid(), "LuaScript table does not exist"); |
|
return table; |
|
} |
|
|
|
} // namespace Inferno
|
|
|