diff --git a/include/server/IServerState.h b/include/server/IServerState.h index ff3365b..5f5f63d 100644 --- a/include/server/IServerState.h +++ b/include/server/IServerState.h @@ -1,13 +1,14 @@ #pragma once #include +#include namespace td { namespace server { class Server; -class IServerState { +class IServerState : public utils::SlotGuard { protected: void SendPacket(PlayerID a_Id, const protocol::PacketBase& a_Packet); void SetNewState(const std::shared_ptr& a_NewState); diff --git a/include/td/render/Renderer.h b/include/td/render/Renderer.h index cb5c23b..e39475d 100644 --- a/include/td/render/Renderer.h +++ b/include/td/render/Renderer.h @@ -4,6 +4,7 @@ #include #include #include +#include namespace td { namespace render { @@ -17,7 +18,7 @@ class BasicRenderer { }; template -class Renderer : public BasicRenderer { +class Renderer : public BasicRenderer, public utils::SlotGuard { protected: std::unique_ptr m_Shader; Camera& m_Camera; @@ -62,12 +63,12 @@ class RenderPipeline { template Renderer::Renderer(Camera& a_Camera) : m_Shader(std::make_unique()), m_Camera(a_Camera) { - a_Camera.OnPerspectiveChange.Connect([this]() { + Connect(a_Camera.OnPerspectiveChange, [this](){ m_Shader->Start(); m_Shader->SetProjectionMatrix(m_Camera.GetProjectionMatrix()); }); - a_Camera.OnViewChange.Connect([this]() { + Connect(a_Camera.OnViewChange, [this]() { m_Shader->Start(); m_Shader->SetViewMatrix(m_Camera.GetViewMatrix()); }); diff --git a/src/server/IServerState.cpp b/src/server/IServerState.cpp index f8c0f06..cdd9f04 100644 --- a/src/server/IServerState.cpp +++ b/src/server/IServerState.cpp @@ -7,20 +7,14 @@ namespace server { void IServerState::SetServer(Server* a_Server) { assert(a_Server); m_Server = a_Server; - m_Server->m_Socket->OnConnect.Connect(std::bind(&IServerState::OnPlayerJoin, this, std::placeholders::_1)); - m_Server->m_Socket->OnDisconnect.Connect(std::bind(&IServerState::OnPlayerLeave, this, std::placeholders::_1)); - m_Server->m_Socket->OnReceive.Connect(std::bind(&IServerState::HandlePacket, this, std::placeholders::_1, std::placeholders::_2)); + Connect(m_Server->m_Socket->OnConnect, std::bind(&IServerState::OnPlayerJoin, this, std::placeholders::_1)); + Connect(m_Server->m_Socket->OnDisconnect, std::bind(&IServerState::OnPlayerLeave, this, std::placeholders::_1)); + Connect(m_Server->m_Socket->OnReceive, std::bind(&IServerState::HandlePacket, this, std::placeholders::_1, std::placeholders::_2)); } IServerState::IServerState() : m_Server(nullptr) {} -IServerState::~IServerState() { - if (!m_Server) - return; - m_Server->m_Socket->OnConnect.Disconnect(std::bind(&IServerState::OnPlayerJoin, this, std::placeholders::_1)); - m_Server->m_Socket->OnDisconnect.Disconnect(std::bind(&IServerState::OnPlayerLeave, this, std::placeholders::_1)); - m_Server->m_Socket->OnReceive.Disconnect(std::bind(&IServerState::HandlePacket, this, std::placeholders::_1, std::placeholders::_2)); -} +IServerState::~IServerState() {} void IServerState::SendPacket(PlayerID a_Id, const protocol::PacketBase& a_Packet) { m_Server->m_Socket->Send(a_Id, a_Packet);