Add skinning

This commit is contained in:
2026-03-05 14:19:46 +03:00
parent d57ac17b69
commit 65cf326f25
21 changed files with 1305 additions and 117 deletions

View File

@@ -32,10 +32,19 @@ LuaPlus::LuaObject engineCreateEntity(const char* classname)
{
Entity* entity = static_cast<Entity*>(g_game->Lua_CreateEntity(classname));
SDL_assert_always(entity);
entity->Init();
return entity->GetLuaObject();
}
LuaPlus::LuaObject engineGetEntityFromID(lua_Integer id)
{
LuaPlus::LuaObject lookup = GetLuaState().GetGlobal("g_entities");
LuaPlus::LuaObject entityTable = lookup.GetByIndex(id);
return entityTable;
}
void engineAddEntityToWorld(LuaPlus::LuaObject& object)
{
LuaPlus::LuaObject cppclass = object["__object"];
@@ -45,6 +54,92 @@ void engineAddEntityToWorld(LuaPlus::LuaObject& object)
g_world->AddEntity(entity);
}
int cameraGetPos(LuaPlus::LuaState* state)
{
glm::vec3 v = glm::vec3(0.0f);
Camera* camera = g_cameraManager.GetActiveCamera();
if (camera)
v = camera->GetPosition();
state->PushNumber(v.x);
state->PushNumber(v.y);
state->PushNumber(v.z);
return 3;
}
int cameraGetFront(LuaPlus::LuaState* state)
{
glm::vec3 v = glm::vec3(0.0f);
Camera* camera = g_cameraManager.GetActiveCamera();
if (camera)
v = camera->GetFront();
state->PushNumber(v.x);
state->PushNumber(v.y);
state->PushNumber(v.z);
return 3;
}
int cameraGetRight(LuaPlus::LuaState* state)
{
glm::vec3 v = glm::vec3(0.0f);
Camera* camera = g_cameraManager.GetActiveCamera();
if (camera)
v = camera->GetRight();
state->PushNumber(v.x);
state->PushNumber(v.y);
state->PushNumber(v.z);
return 3;
}
int cameraGetUp(LuaPlus::LuaState* state)
{
glm::vec3 v = glm::vec3(0.0f);
Camera* camera = g_cameraManager.GetActiveCamera();
if (camera)
v = camera->GetUp();
state->PushNumber(v.x);
state->PushNumber(v.y);
state->PushNumber(v.z);
return 3;
}
int cameraGetYaw(LuaPlus::LuaState* state)
{
float v = 0.0f;
Camera* camera = g_cameraManager.GetActiveCamera();
if (camera)
v = camera->GetYaw();
state->PushNumber(v);
return 1;
}
int cameraGetPitch(LuaPlus::LuaState* state)
{
float v = 0.0f;
Camera* camera = g_cameraManager.GetActiveCamera();
if (camera)
v = camera->GetPitch();
state->PushNumber(v);
return 1;
}
void registerEngine()
{
using namespace LuaPlus;
@@ -55,10 +150,24 @@ void registerEngine()
engineTable.RegisterDirect("warning", &engineWarning);
engineTable.RegisterDirect("create_entity", &engineCreateEntity);
engineTable.RegisterDirect("add_entity_to_world", &engineAddEntityToWorld);
engineTable.RegisterDirect("get_entity_from_id", &engineGetEntityFromID);
LuaObject consoleTable = GetLuaState().GetGlobals().CreateTable("console");
consoleTable.RegisterDirect("print", &consoleMsg);
LuaObject cameraTable = GetLuaState().GetGlobals().CreateTable("camera");
cameraTable.Register("get_position", &cameraGetPos);
cameraTable.Register("get_front", &cameraGetFront);
cameraTable.Register("get_right", &cameraGetRight);
cameraTable.Register("get_up", &cameraGetUp);
cameraTable.Register("get_yaw", &cameraGetYaw);
cameraTable.Register("get_pitch", &cameraGetPitch);
// action globals
GetLuaState().DoString("ACTION_FIRE = 0");
GetLuaState().DoString("ACTION_ALT_FIRE = 1");
GetLuaState().DoString("ACTION_RELOAD = 2");
// animations globals
GetLuaState().DoString("ANIM_PLAYBACK_NONE = 0");
GetLuaState().DoString("ANIM_PLAYBACK_REPEAT = 1");
@@ -231,6 +340,8 @@ void Game::LoadLevelXML(const char* mapname)
entity->CreateTestBody();
}
entity->Init();
//IEntityBase* entity = g_entityManager->CreateEntity(classname.as_string());
g_world->AddEntity(entity);
}