render playerlist

This commit is contained in:
2025-08-23 11:36:23 +02:00
parent 5b6254c690
commit 73dd2dabfa
6 changed files with 59 additions and 3 deletions

View File

@@ -19,6 +19,10 @@ class Client : public StateMachine<Client, void, float> {
void SendPacket(const protocol::PacketBase& a_Packet);
const PlayerManager& GetPlayers() const {
return m_Players;
}
friend class ClientState;
};

View File

@@ -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;

View File

@@ -40,9 +40,10 @@ class StateMachine {
auto* currentState = m_State.get();
auto newState = std::make_unique<T>(static_cast<TDerived&>(*this), std::forward<Args>(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<T*>(m_State.get());
}

View File

@@ -0,0 +1,20 @@
#pragma once
#include <td/render/Renderer.h>
#include <client/PlayerManager.h>
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

View File

@@ -6,6 +6,7 @@
#include <td/game/World.h>
#include <td/protocol/packet/Packets.h>
#include <td/render/renderer/EntityRenderer.h>
#include <td/render/renderer/PlayerListRenderer.h>
#include <td/render/renderer/TowerRenderer.h>
#include <td/render/renderer/WorldRenderer.h>
@@ -40,7 +41,8 @@ DebugWorldState::DebugWorldState(Display& a_Display) : DisplayState(a_Display) {
m_Renderer.AddRenderer<render::WorldRenderer>(m_Camera, clientWorld);
m_Renderer.AddRenderer<render::EntityRenderer>(m_Camera, clientWorld);
m_Renderer.AddRenderer<render::TowerRenderer>(m_Camera, clientWorld);
m_Renderer.AddRenderer<render::PlayerListRenderer>(m_Client->GetPlayers());
// update state
m_ClientState = gameState;
}

View File

@@ -0,0 +1,21 @@
#include <td/render/renderer/PlayerListRenderer.h>
#include <imgui.h>
#include <iostream>
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