Big update

This commit is contained in:
2026-03-07 03:14:10 +03:00
parent f8f69d3b88
commit a998771486
33 changed files with 1788 additions and 577 deletions

View File

@@ -1,8 +1,11 @@
#include "ifilesystem.h"
#include "core.h"
#include "log.h"
#include "engine.h"
#include "game.h"
#include "game_lua_help.h"
#include "game_ui.h"
#include "inputmanager.h"
#include "ientity.h"
#include "entitymanager.h"
#include "world.h"
@@ -105,6 +108,129 @@ void engineAddEntityToWorld(LuaPlus::LuaObject& object)
g_world->AddEntity(entity);
}
LuaPlus::LuaObject engineTraceRay(float rayBeginX, float rayBeginY, float rayBeginZ,
float rayEndX, float rayEndY, float rayEndZ, const LuaPlus::LuaObject& ignoreTable)
{
IEntityBase* pIgnoreEntity = nullptr;
if (ignoreTable.IsTable())
{
LuaPlus::LuaObject ignoreEntityTable = ignoreTable.GetByName("__object");
if (ignoreEntityTable.IsLightUserdata())
pIgnoreEntity = (IEntityBase*)ignoreEntityTable.GetLightUserdata();
}
TraceRayResult result = {};
glm::vec3 rayBegin = glm::vec3(rayBeginX, rayBeginY, rayBeginZ);
glm::vec3 rayEnd = glm::vec3(rayEndX, rayEndY, rayEndZ);
if (g_PhysicsWorld)
g_PhysicsWorld->TraceRay(result, rayBegin, rayEnd, pIgnoreEntity);
else
Logger::Msg("engine.trace_ray(): no server started or game loaded!");
LuaPlus::LuaObject resultTable = GetLuaState().CreateTable();
resultTable.SetNumber("pos_x", result.position.x);
resultTable.SetNumber("pos_y", result.position.y);
resultTable.SetNumber("pos_z", result.position.z);
resultTable.SetNumber("normal_x", result.normal.x);
resultTable.SetNumber("normal_y", result.normal.y);
resultTable.SetNumber("normal_z", result.normal.z);
resultTable.SetInteger("entity_id", result.pEntity ? result.pEntity->GetID() : -1);
resultTable.SetInteger("hit", result.hit);
return resultTable;
}
float engineGetDelta()
{
return GetEngine()->GetDelta();
}
void registerEngine()
{
using namespace LuaPlus;
// register engine functions
LuaObject engineTable = GetLuaState().GetGlobals().CreateTable("engine");
engineTable.RegisterDirect("error", &engineError);
engineTable.RegisterDirect("warning", &engineWarning);
engineTable.RegisterDirect("create_entity", &engineCreateEntity);
engineTable.RegisterDirect("add_entity_to_world", &engineAddEntityToWorld);
engineTable.RegisterDirect("get_entity_from_id", &engineGetEntityFromID);
engineTable.RegisterDirect("play_sound", &enginePlaySound);
engineTable.RegisterDirect("get_delta", &engineGetDelta);
engineTable.RegisterDirect("trace_ray", &engineTraceRay);
LuaObject consoleTable = GetLuaState().GetGlobals().CreateTable("console");
consoleTable.RegisterDirect("print", &consoleMsg);
registerCamera();
registerInput();
registerEngineUI();
// action globals
GetLuaState().DoString("ACTION_FIRE = 0");
GetLuaState().DoString("ACTION_ALT_FIRE = 1");
GetLuaState().DoString("ACTION_RELOAD = 2");
GetLuaState().DoString("ACTION_USE = 3");
// animations globals
GetLuaState().DoString("ANIM_PLAYBACK_NONE = 0");
GetLuaState().DoString("ANIM_PLAYBACK_REPEAT = 1");
char buffer[64];
#define REGISTER_CONSTANT(constant) \
snprintf(buffer, sizeof(buffer), #constant" = %d", constant); \
GetLuaState().DoString(buffer)
REGISTER_CONSTANT(EMovementDir_None);
REGISTER_CONSTANT(EMovementDir_Forward);
REGISTER_CONSTANT(EMovementDir_Backward);
REGISTER_CONSTANT(EMovementDir_Left);
REGISTER_CONSTANT(EMovementDir_Right);
REGISTER_CONSTANT(EMovementDir_Jump);
#undef REGISTER_CONSTANT
}
int inputGetMousePos(LuaPlus::LuaState* state)
{
const glm::vec2& pos = g_inputManager.GetMousePos();
state->PushNumber(pos.x);
state->PushNumber(pos.y);
return 2;
}
int inputGetDeltaMousePos(LuaPlus::LuaState* state)
{
const glm::vec2& pos = g_inputManager.GetMouseDeltaPos();
state->PushNumber(pos.x);
state->PushNumber(pos.y);
return 2;
}
void inputLock(bool value)
{
g_inputManager.SetRelativeMouseMode(value);
}
bool inputGetLock()
{
return g_inputManager.GetRelativeMouseMode();
}
void registerInput()
{
LuaPlus::LuaObject inputTable = GetLuaState().GetGlobals().CreateTable("input");
inputTable.Register("get_mouse_pos", &inputGetMousePos);
inputTable.Register("get_delta_mouse_pos", &inputGetDeltaMousePos);
inputTable.RegisterDirect("lock_mouse", &inputLock);
inputTable.RegisterDirect("get_lock_mouse", &inputGetLock);
}
int cameraGetPos(LuaPlus::LuaState* state)
{
glm::vec3 v = glm::vec3(0.0f);
@@ -191,39 +317,23 @@ int cameraGetPitch(LuaPlus::LuaState* state)
return 1;
}
void registerEngine()
void cameraSetYawPitch(float yaw, float pitch)
{
using namespace LuaPlus;
Camera* camera = g_cameraManager.GetActiveCamera();
if (camera)
camera->SetYawPitch(yaw, pitch);
}
// register engine functions
LuaObject engineTable = GetLuaState().GetGlobals().CreateTable("engine");
engineTable.RegisterDirect("error", &engineError);
engineTable.RegisterDirect("warning", &engineWarning);
engineTable.RegisterDirect("create_entity", &engineCreateEntity);
engineTable.RegisterDirect("add_entity_to_world", &engineAddEntityToWorld);
engineTable.RegisterDirect("get_entity_from_id", &engineGetEntityFromID);
engineTable.RegisterDirect("play_sound", &enginePlaySound);
LuaObject consoleTable = GetLuaState().GetGlobals().CreateTable("console");
consoleTable.RegisterDirect("print", &consoleMsg);
LuaObject cameraTable = GetLuaState().GetGlobals().CreateTable("camera");
void registerCamera()
{
LuaPlus::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");
cameraTable.RegisterDirect("set_yaw_pitch", &cameraSetYawPitch);
}
void registerClasses()
@@ -477,6 +587,11 @@ void Game::Shutdown()
{
}
void Game::Render2D()
{
gameRenderUI();
}
//LuaPrototype* pluaprototype = Lua_FindPrototype(classname);
//
//if (pluaprototype)