Inferno Game Engine
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.
 
 
 
 
 
 

85 lines
2.1 KiB

/*
* Copyright (C) 2022 Riyyi
*
* SPDX-License-Identifier: MIT
*/
#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