This commit is contained in:
2026-03-05 15:20:18 +03:00
parent 70c3459703
commit f8f69d3b88
25 changed files with 261 additions and 31 deletions

View File

@@ -7,12 +7,58 @@
#include "entitymanager.h"
#include "world.h"
#include "game_object.h"
#include "soundsystem.h"
#include <pugixml.hpp>
#include <map>
#include <string>
static Game s_game;
Game* g_game = &s_game;
class GameSoundSystem
{
public:
static GameSoundSystem& GetInstance();
public:
void PlaySound2D(const std::string& filename);
void CacheSound(const std::string& filename);
private:
std::map<std::string, SoundHandle> m_sounds;
};
GameSoundSystem& GameSoundSystem::GetInstance()
{
static GameSoundSystem inst;
return inst;
}
void GameSoundSystem::PlaySound2D(const std::string& filename)
{
auto it = m_sounds.find(filename);
if (it == m_sounds.end())
{
CacheSound(filename);
it = m_sounds.find(filename);
}
SDL_assert(it != m_sounds.end());
// .hack due unimplemented sound sources^
if (g_soundSystem.IsPlaying(it->second))
g_soundSystem.Stop(it->second);
g_soundSystem.Play(it->second, false);
}
void GameSoundSystem::CacheSound(const std::string& filename)
{
m_sounds.emplace(filename, g_soundSystem.LoadSound(filename.c_str()));
}
void consoleMsg(const char* msg)
{
Logger::Msg("%s", msg);
@@ -28,6 +74,11 @@ void engineWarning(const char* msg)
Core::Warning("%s", msg);
}
void enginePlaySound(const char* filename)
{
GameSoundSystem::GetInstance().PlaySound2D(filename);
}
LuaPlus::LuaObject engineCreateEntity(const char* classname)
{
Entity* entity = static_cast<Entity*>(g_game->Lua_CreateEntity(classname));
@@ -151,6 +202,7 @@ void registerEngine()
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);

View File

@@ -236,6 +236,7 @@ void Entity::RegisterBaseFunctions()
m_luaObject.Register("set_position", *this, &Entity::Lua_SetPosition);
m_luaObject.Register("get_position", *this, &Entity::Lua_GetPosition);
m_luaObject.Register("set_rotation", *this, &Entity::Lua_SetRotation);
m_luaObject.Register("set_rotation_from_vectors", *this, &Entity::Lua_SetRotationFromVectors);
m_luaObject.Register("get_classname", *this, &Entity::Lua_GetClassname);
m_luaObject.Register("get_id", *this, &Entity::Lua_GetID);
@@ -282,6 +283,22 @@ void Entity::Help_SetRotation(float x, float y, float z)
m_rotation.z = z;
}
void Entity::Help_SetRotationFromVectors(const glm::vec3& front, const glm::vec3& right, const glm::vec3& up)
{
glm::mat3 rot;
rot[0] = right;
rot[1] = up;
rot[2] = -front;
glm::quat q = glm::quat_cast(rot);
glm::quat fix = glm::angleAxis(glm::radians(90.0f), glm::vec3(0, 1, 0));
q = q * fix;
m_rotation = glm::degrees(glm::eulerAngles(q));
}
int Entity::Lua_LoadModel(LuaPlus::LuaState* state)
{
LuaPlus::LuaStack stack(state);
@@ -345,6 +362,30 @@ int Entity::Lua_SetRotation(LuaPlus::LuaState* state)
return 0;
}
int Entity::Lua_SetRotationFromVectors(LuaPlus::LuaState* state)
{
LuaPlus::LuaStack stack(state);
glm::vec3 front(
stack[2].GetNumber(),
stack[3].GetNumber(),
stack[4].GetNumber());
glm::vec3 right(
stack[5].GetNumber(),
stack[6].GetNumber(),
stack[7].GetNumber());
glm::vec3 up(
stack[8].GetNumber(),
stack[9].GetNumber(),
stack[10].GetNumber());
Help_SetRotationFromVectors(front, right, up);
return 0;
}
int Entity::Lua_GetClassname(LuaPlus::LuaState* state)
{
state->PushString(GetClassname());
@@ -525,7 +566,17 @@ void ActorBase::AfterEngineStep()
//m_position = btVectorToGlm(xform.getOrigin());
m_position = btVectorToGlm(m_ph_motion_state.m_transform.getOrigin());
m_camera.SetPosition(m_position);
glm::vec3 cameraPos = m_position;
if (m_luaObject.IsTable())
{
LuaPlus::LuaObject m_camera_offset_y = m_luaObject.GetByName("m_camera_offset_y");
if (m_camera_offset_y.IsNumber())
cameraPos.y += m_camera_offset_y.ToNumber();
}
m_camera.SetPosition(cameraPos);
}
void ActorBase::UpdateCameraMovement(float dt)

View File

@@ -96,12 +96,14 @@ public:
void Help_Translate(float x, float y, float z);
void Help_SetPosition(float x, float y, float z);
void Help_SetRotation(float x, float y, float z);
void Help_SetRotationFromVectors(const glm::vec3& front, const glm::vec3& right, const glm::vec3& up);
int Lua_LoadModel(LuaPlus::LuaState* state);
int Lua_Translate(LuaPlus::LuaState* state);
int Lua_SetPosition(LuaPlus::LuaState* state);
int Lua_GetPosition(LuaPlus::LuaState* state);
int Lua_SetRotation(LuaPlus::LuaState* state);
int Lua_SetRotationFromVectors(LuaPlus::LuaState* state);
int Lua_GetClassname(LuaPlus::LuaState* state);
int Lua_GetID(LuaPlus::LuaState* state);
int Lua_UpdateTransform(LuaPlus::LuaState* state);