render playerlist
This commit is contained in:
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
20
include/td/render/renderer/PlayerListRenderer.h
Normal file
20
include/td/render/renderer/PlayerListRenderer.h
Normal 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
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
21
src/td/render/renderer/PlayerListRenderer.cpp
Normal file
21
src/td/render/renderer/PlayerListRenderer.cpp
Normal 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
|
||||
Reference in New Issue
Block a user