diff --git a/include/client/Client.h b/include/client/Client.h index be6db99..a400fde 100644 --- a/include/client/Client.h +++ b/include/client/Client.h @@ -19,6 +19,10 @@ class Client : public StateMachine { void SendPacket(const protocol::PacketBase& a_Packet); + const PlayerManager& GetPlayers() const { + return m_Players; + } + friend class ClientState; }; diff --git a/include/client/PlayerManager.h b/include/client/PlayerManager.h index 1f4745f..8c17396 100644 --- a/include/client/PlayerManager.h +++ b/include/client/PlayerManager.h @@ -22,6 +22,14 @@ class PlayerManager : public protocol::PacketHandler { PlayerInfo GetPlayer(PlayerID a_Player); + auto begin() const { + return m_Players.begin(); + } + + auto end() const { + return m_Players.end(); + } + virtual void Handle(const protocol::packets::PlayerJoinPacket&) override; virtual void Handle(const protocol::packets::PlayerListPacket&) override; virtual void Handle(const protocol::packets::PlayerLeavePacket&) override; diff --git a/include/td/common/StateMachine.h b/include/td/common/StateMachine.h index 9669b11..2a5709d 100644 --- a/include/td/common/StateMachine.h +++ b/include/td/common/StateMachine.h @@ -40,9 +40,10 @@ class StateMachine { auto* currentState = m_State.get(); auto newState = std::make_unique(static_cast(*this), std::forward(args)...); // This allows chaining - if (m_State.get() == currentState) + if (m_State.get() == currentState) { m_State = std::move(newState); - OnStateChange(*m_State); + OnStateChange(*m_State); + } return static_cast(m_State.get()); } diff --git a/include/td/render/renderer/PlayerListRenderer.h b/include/td/render/renderer/PlayerListRenderer.h new file mode 100644 index 0000000..226dff1 --- /dev/null +++ b/include/td/render/renderer/PlayerListRenderer.h @@ -0,0 +1,20 @@ +#pragma once + +#include +#include + +namespace td { +namespace render { + +class PlayerListRenderer : public BasicRenderer { + private: + const client::PlayerManager& m_Players; + public: + virtual void Render(float a_Lerp) override; + + PlayerListRenderer(const client::PlayerManager& a_Players); + ~PlayerListRenderer() {} +}; + +} // namespace render +} // namespace td diff --git a/src/td/display/state/DebugWorldState.cpp b/src/td/display/state/DebugWorldState.cpp index 0bd7ede..d0cd5ad 100644 --- a/src/td/display/state/DebugWorldState.cpp +++ b/src/td/display/state/DebugWorldState.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -40,7 +41,8 @@ DebugWorldState::DebugWorldState(Display& a_Display) : DisplayState(a_Display) { m_Renderer.AddRenderer(m_Camera, clientWorld); m_Renderer.AddRenderer(m_Camera, clientWorld); m_Renderer.AddRenderer(m_Camera, clientWorld); - + m_Renderer.AddRenderer(m_Client->GetPlayers()); + // update state m_ClientState = gameState; } diff --git a/src/td/render/renderer/PlayerListRenderer.cpp b/src/td/render/renderer/PlayerListRenderer.cpp new file mode 100644 index 0000000..fc317ce --- /dev/null +++ b/src/td/render/renderer/PlayerListRenderer.cpp @@ -0,0 +1,21 @@ +#include + +#include + +#include + +namespace td { +namespace render { + +void PlayerListRenderer::Render(float a_Lerp) { + ImGui::Begin("Players"); + for (const auto& [id, player] : m_Players) { + ImGui::Text("[%i] %s", id, player.m_PlayerName.c_str()); + } + ImGui::End(); +} + +PlayerListRenderer::PlayerListRenderer(const client::PlayerManager& a_Players) : m_Players(a_Players) {} + +} // namespace render +} // namespace td