Big update
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user