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