From 3db0afa2e23fbc213c754532d7aeefc72a36db02 Mon Sep 17 00:00:00 2001 From: Persson-dev Date: Fri, 30 Jan 2026 13:18:01 +0100 Subject: [PATCH] raylib-cpp progress --- include/client/state/GameState.h | 2 +- include/td/misc/Signal.h | 6 +++--- include/td/misc/SlotGuard.h | 4 ++-- include/td/render/RayGui.h | 11 +++++++++++ include/td/render/Renderer.h | 10 +++++----- include/td/render/loader/WorldLoader.h | 2 +- include/td/render/renderer/EntityRenderer.h | 6 +++--- include/td/render/renderer/TowerRenderer.h | 9 +++++---- include/td/render/renderer/WorldRenderer.h | 5 +++-- include/td/render/shader/CameraShaderProgram.h | 1 - src/client/state/GameState.cpp | 6 +++++- src/td/display/Display.cpp | 5 ++--- src/td/display/ImGuiTheme.cpp | 3 +-- src/td/display/menu/CreatePartyMenu.cpp | 2 +- src/td/display/menu/JoinPartyMenu.cpp | 2 +- src/td/display/menu/MainMenu.cpp | 2 +- src/td/display/menu/SettingsMenu.cpp | 2 +- src/td/display/state/DebugWorldState.cpp | 17 ++++++++--------- src/td/display/state/MainMenuState.cpp | 2 +- src/td/render/renderer/EntityRenderer.cpp | 7 ++----- src/td/render/renderer/PlayerListRenderer.cpp | 2 +- src/td/render/renderer/TimerRenderer.cpp | 2 +- src/td/render/renderer/TowerRenderer.cpp | 9 ++------- src/td/render/renderer/WorldRenderer.cpp | 12 +++++------- xmake.lua | 5 ++--- 25 files changed, 68 insertions(+), 66 deletions(-) create mode 100644 include/td/render/RayGui.h diff --git a/include/client/state/GameState.h b/include/client/state/GameState.h index dcb065d..51e89ea 100644 --- a/include/client/state/GameState.h +++ b/include/client/state/GameState.h @@ -16,7 +16,7 @@ class GameState : public ClientState { public: GameState(Client& a_Client, const game::WorldPtr& a_World, std::uint64_t a_StepTime, const std::vector a_FirstSteps); - ~GameState() {} + ~GameState(); virtual void Update(float a_Delta) override; diff --git a/include/td/misc/Signal.h b/include/td/misc/Signal.h index fe43824..ffbefb5 100644 --- a/include/td/misc/Signal.h +++ b/include/td/misc/Signal.h @@ -33,7 +33,7 @@ class SignalRaw : private NonCopyable { void operator()(Args... args) const { for (const CallBack& callback : m_Callbacks) { - callback->operator()(args...); + callback->operator()(std::forward(args)...); } } }; @@ -64,9 +64,9 @@ class Signal { m_Signal->Connect(std::make_shared(a_Callback)); } - [[nodiscard]] std::unique_ptr ConnectSafe(const CallBack& a_Callback) { + [[nodiscard]] std::shared_ptr ConnectSafe(const CallBack& a_Callback) { m_Signal->Connect(a_Callback); - return std::make_unique(*this, a_Callback); + return std::make_shared(*this, a_Callback); } void Disconnect(const CallBack& a_Callback) { diff --git a/include/td/misc/SlotGuard.h b/include/td/misc/SlotGuard.h index e2b49f5..905e4be 100644 --- a/include/td/misc/SlotGuard.h +++ b/include/td/misc/SlotGuard.h @@ -12,7 +12,7 @@ namespace utils { */ class SlotGuard { private: - std::vector> m_Connections; + std::vector> m_Connections; public: /** @@ -21,7 +21,7 @@ class SlotGuard { template void Connect(Signal a_Signal, const typename Signal::CallBack::element_type& a_Callback) { auto ptr = std::make_shared::CallBack::element_type>(a_Callback); - m_Connections.push_back(a_Signal.ConnectSafe(ptr)); + m_Connections.emplace_back(a_Signal.ConnectSafe(ptr)); } void Disconnect() { diff --git a/include/td/render/RayGui.h b/include/td/render/RayGui.h new file mode 100644 index 0000000..c3d43ad --- /dev/null +++ b/include/td/render/RayGui.h @@ -0,0 +1,11 @@ +#pragma once + +// extern "C" { +// #include +// } + +extern "C" { + #include +} + +#include \ No newline at end of file diff --git a/include/td/render/Renderer.h b/include/td/render/Renderer.h index 186ea1f..da4d623 100644 --- a/include/td/render/Renderer.h +++ b/include/td/render/Renderer.h @@ -1,7 +1,7 @@ #pragma once #include -#include +#include #include #include #include @@ -21,10 +21,10 @@ template class Renderer : public BasicRenderer, private utils::SlotGuard { protected: std::unique_ptr m_Shader; - Camera& m_Camera; + raylib::Camera& m_Camera; public: - Renderer(Camera& a_Camera); + Renderer(raylib::Camera& a_Camera); virtual ~Renderer() {} template @@ -42,7 +42,7 @@ class RenderPipeline { virtual ~RenderPipeline() {} template - T& AddRenderer(Args&&... args) { + T& AddRenderer(Args... args) { auto ptr = std::make_unique(args...); auto rawPtr = ptr.get(); m_Renderers.push_back(std::move(ptr)); @@ -65,7 +65,7 @@ class RenderPipeline { template -Renderer::Renderer(Camera& a_Camera) : m_Shader(std::make_unique()), m_Camera(a_Camera) { +Renderer::Renderer(raylib::Camera& a_Camera) : m_Shader(std::make_unique()), m_Camera(a_Camera) { // Connect(a_Camera.OnPerspectiveChange, [this](){ // // m_Shader->Start(); // m_Shader->SetProjectionMatrix(m_Camera.GetProjectionMatrix()); diff --git a/include/td/render/loader/WorldLoader.h b/include/td/render/loader/WorldLoader.h index b65a1f4..3bdb713 100644 --- a/include/td/render/loader/WorldLoader.h +++ b/include/td/render/loader/WorldLoader.h @@ -1,7 +1,7 @@ #pragma once #include -#include +#include namespace td { namespace render { diff --git a/include/td/render/renderer/EntityRenderer.h b/include/td/render/renderer/EntityRenderer.h index 3b529a3..1fc1337 100644 --- a/include/td/render/renderer/EntityRenderer.h +++ b/include/td/render/renderer/EntityRenderer.h @@ -1,9 +1,9 @@ #pragma once -#include #include #include #include +#include namespace td { namespace render { @@ -11,11 +11,11 @@ namespace render { class EntityRenderer : public Renderer { private: game::WorldPtr m_World; - Model m_ZombieModel; + raylib::Model m_ZombieModel; Texture2D m_ZombieTexture; public: - EntityRenderer(Camera& a_Camera, const game::WorldPtr& a_World); + EntityRenderer(raylib::Camera& a_Camera, const game::WorldPtr& a_World); virtual ~EntityRenderer(); virtual void Render(float a_Lerp) override; diff --git a/include/td/render/renderer/TowerRenderer.h b/include/td/render/renderer/TowerRenderer.h index 18361ce..12a5324 100644 --- a/include/td/render/renderer/TowerRenderer.h +++ b/include/td/render/renderer/TowerRenderer.h @@ -1,9 +1,10 @@ #pragma once -#include #include #include #include +#include +#include namespace td { namespace render { @@ -11,11 +12,11 @@ namespace render { class TowerRenderer : public Renderer { private: game::WorldPtr m_World; - Model m_TowerModel; - Texture2D m_TowerTexture; + raylib::Model m_TowerModel; + raylib::Texture2D m_TowerTexture; public: - TowerRenderer(Camera& a_Camera, const game::WorldPtr& a_World); + TowerRenderer(raylib::Camera& a_Camera, const game::WorldPtr& a_World); virtual ~TowerRenderer(); virtual void Render(float a_Lerp) override; diff --git a/include/td/render/renderer/WorldRenderer.h b/include/td/render/renderer/WorldRenderer.h index 7849eee..9f070d1 100644 --- a/include/td/render/renderer/WorldRenderer.h +++ b/include/td/render/renderer/WorldRenderer.h @@ -4,16 +4,17 @@ #include #include #include +#include namespace td { namespace render { class WorldRenderer : public Renderer { private: - Model m_WorldModel; + std::unique_ptr m_WorldModel; public: - WorldRenderer(Camera& a_Camera, const game::WorldPtr& a_World); + WorldRenderer(raylib::Camera& a_Camera, const game::WorldPtr& a_World); virtual ~WorldRenderer(); virtual void Render(float a_Lerp) override; diff --git a/include/td/render/shader/CameraShaderProgram.h b/include/td/render/shader/CameraShaderProgram.h index 663f34a..8eb3da8 100644 --- a/include/td/render/shader/CameraShaderProgram.h +++ b/include/td/render/shader/CameraShaderProgram.h @@ -1,6 +1,5 @@ #pragma once -#include #include namespace td { diff --git a/src/client/state/GameState.cpp b/src/client/state/GameState.cpp index 1bdba05..e511b02 100644 --- a/src/client/state/GameState.cpp +++ b/src/client/state/GameState.cpp @@ -1,15 +1,19 @@ #include + namespace td { namespace client { -GameState::GameState(Client& a_Client, const std::shared_ptr& a_World, std::uint64_t a_StepTime, const std::vector a_FirstSteps) : +GameState::GameState(Client& a_Client, const std::shared_ptr& a_World, std::uint64_t a_StepTime, + const std::vector a_FirstSteps) : ClientState(a_Client), m_World(a_World), m_Simulation(a_World, a_StepTime, a_FirstSteps) { m_Simulation.OnMissingLockSteps.Connect([this](const std::vector& a_MissingSteps) { SendPacket(protocol::packets::LockStepRequestPacket(a_MissingSteps)); }); } +GameState::~GameState() {} + void GameState::Handle(const protocol::packets::LockStepsPacket& a_LockStep) { m_Simulation.Handle(a_LockStep); } diff --git a/src/td/display/Display.cpp b/src/td/display/Display.cpp index 1c5ea10..259c644 100644 --- a/src/td/display/Display.cpp +++ b/src/td/display/Display.cpp @@ -4,9 +4,8 @@ #include #include -#include -#include -#include +#include +#include namespace td { diff --git a/src/td/display/ImGuiTheme.cpp b/src/td/display/ImGuiTheme.cpp index 34ac3c0..ecdec9d 100644 --- a/src/td/display/ImGuiTheme.cpp +++ b/src/td/display/ImGuiTheme.cpp @@ -1,11 +1,10 @@ #include -#include +#include namespace td { void LoadTheme() { - static const bool bStyleDark_ = true; static const float alpha_ = 0.8f; diff --git a/src/td/display/menu/CreatePartyMenu.cpp b/src/td/display/menu/CreatePartyMenu.cpp index f56bb71..c375770 100644 --- a/src/td/display/menu/CreatePartyMenu.cpp +++ b/src/td/display/menu/CreatePartyMenu.cpp @@ -1,6 +1,6 @@ #include -#include +#include namespace td { diff --git a/src/td/display/menu/JoinPartyMenu.cpp b/src/td/display/menu/JoinPartyMenu.cpp index d415456..52a9e57 100644 --- a/src/td/display/menu/JoinPartyMenu.cpp +++ b/src/td/display/menu/JoinPartyMenu.cpp @@ -1,6 +1,6 @@ #include -#include +#include namespace td { diff --git a/src/td/display/menu/MainMenu.cpp b/src/td/display/menu/MainMenu.cpp index 30c8724..a9c0a97 100644 --- a/src/td/display/menu/MainMenu.cpp +++ b/src/td/display/menu/MainMenu.cpp @@ -1,6 +1,6 @@ #include -#include +#include #include #include #include diff --git a/src/td/display/menu/SettingsMenu.cpp b/src/td/display/menu/SettingsMenu.cpp index 2b15cf1..01507a5 100644 --- a/src/td/display/menu/SettingsMenu.cpp +++ b/src/td/display/menu/SettingsMenu.cpp @@ -1,6 +1,6 @@ #include -#include +#include namespace td { diff --git a/src/td/display/state/DebugWorldState.cpp b/src/td/display/state/DebugWorldState.cpp index 80a7d9d..2011f9f 100644 --- a/src/td/display/state/DebugWorldState.cpp +++ b/src/td/display/state/DebugWorldState.cpp @@ -19,11 +19,9 @@ #include #include -#include - namespace td { -DebugWorldState::DebugWorldState(Display& a_Display) : DisplayState(a_Display) { +DebugWorldState::DebugWorldState(Display& a_Display) : DisplayState(a_Display), m_ClientState(nullptr) { // server m_ServerSocket = std::make_shared(); m_Server = std::make_unique(m_ServerSocket); @@ -37,12 +35,12 @@ DebugWorldState::DebugWorldState(Display& a_Display) : DisplayState(a_Display) { if (auto gameState = dynamic_cast(&a_State)) { // render auto clientWorld = gameState->GetWorld(); - m_Renderer.AddRenderer(m_Camera, clientWorld); - m_Renderer.AddRenderer(m_Camera, clientWorld); - m_Renderer.AddRenderer(m_Camera, clientWorld); - m_Renderer.AddRenderer(*gameState); + m_Renderer.AddRenderer(static_cast(m_Camera), clientWorld); + m_Renderer.AddRenderer(static_cast(m_Camera), clientWorld); + m_Renderer.AddRenderer(static_cast(m_Camera), clientWorld); + m_Renderer.AddRenderer(*gameState); - auto& list = m_Renderer.AddRenderer(m_Client->GetPlayers()); + auto& list = m_Renderer.AddRenderer(m_Client->GetPlayers()); list.OnPlayerCreate.Connect([this]() { auto newSocket = client::FakeSocket::Connect(m_ServerSocket); @@ -85,8 +83,9 @@ void DebugWorldState::Update(float a_Delta) { UpdateCamera(&m_Camera, CAMERA_FREE); if (m_ClientState) { + float lerp = m_ClientState->GetCurrentLerp(); BeginMode3D(m_Camera); - m_Renderer.Render(m_ClientState->GetCurrentLerp()); + m_Renderer.Render(lerp); EndMode3D(); } diff --git a/src/td/display/state/MainMenuState.cpp b/src/td/display/state/MainMenuState.cpp index e96400a..7b5466b 100644 --- a/src/td/display/state/MainMenuState.cpp +++ b/src/td/display/state/MainMenuState.cpp @@ -1,6 +1,6 @@ #include -#include +#include #include #include diff --git a/src/td/render/renderer/EntityRenderer.cpp b/src/td/render/renderer/EntityRenderer.cpp index 9f733c9..d98cf92 100644 --- a/src/td/render/renderer/EntityRenderer.cpp +++ b/src/td/render/renderer/EntityRenderer.cpp @@ -1,5 +1,4 @@ #include -#include #include #include @@ -7,12 +6,10 @@ namespace td { namespace render { -EntityRenderer::EntityRenderer(Camera& a_Camera, const game::WorldPtr& a_World) : Renderer(a_Camera), m_World(a_World) { - m_ZombieModel = LoadModel("assets/zombie.glb"); +EntityRenderer::EntityRenderer(raylib::Camera& a_Camera, const game::WorldPtr& a_World) : Renderer(a_Camera), m_World(a_World), m_ZombieModel("assets/zombie.glb") { } EntityRenderer::~EntityRenderer() { - UnloadModel(m_ZombieModel); } @@ -23,7 +20,7 @@ void EntityRenderer::Render(float a_Lerp) { float x = Lerp(*mob, a_Lerp, [](const game::Mob& a_Mob) { return static_cast(a_Mob.m_Position.x); }); float z = Lerp(*mob, a_Lerp, [](const game::Mob& a_Mob) { return static_cast(a_Mob.m_Position.y); }); - DrawModel(m_ZombieModel, {x, .001, z}, 1.0f, {255, 255, 255, 255}); + m_ZombieModel.Draw({x, .001, z}, 1.0f, {255, 255, 255, 255}); } } diff --git a/src/td/render/renderer/PlayerListRenderer.cpp b/src/td/render/renderer/PlayerListRenderer.cpp index 79ce219..d2ddcb5 100644 --- a/src/td/render/renderer/PlayerListRenderer.cpp +++ b/src/td/render/renderer/PlayerListRenderer.cpp @@ -1,6 +1,6 @@ #include -#include +#include #include namespace td { diff --git a/src/td/render/renderer/TimerRenderer.cpp b/src/td/render/renderer/TimerRenderer.cpp index 3132fd7..7c9c04f 100644 --- a/src/td/render/renderer/TimerRenderer.cpp +++ b/src/td/render/renderer/TimerRenderer.cpp @@ -1,7 +1,7 @@ #include #include -#include +#include namespace td { namespace render { diff --git a/src/td/render/renderer/TowerRenderer.cpp b/src/td/render/renderer/TowerRenderer.cpp index 3eefbf6..b432a7d 100644 --- a/src/td/render/renderer/TowerRenderer.cpp +++ b/src/td/render/renderer/TowerRenderer.cpp @@ -1,4 +1,3 @@ -#include #include #include @@ -6,22 +5,18 @@ namespace td { namespace render { -TowerRenderer::TowerRenderer(Camera& a_Camera, const game::WorldPtr& a_World) : Renderer(a_Camera), m_World(a_World) { - m_TowerModel = LoadModel("assets/turret.obj"); - m_TowerTexture = LoadTexture("assets/turret_diffuse.png"); +TowerRenderer::TowerRenderer(raylib::Camera& a_Camera, const game::WorldPtr& a_World) : Renderer(a_Camera), m_World(a_World), m_TowerModel("assets/turret.obj"), m_TowerTexture("assets/turret_diffuse.png") { m_TowerModel.materials[0].maps[MATERIAL_MAP_DIFFUSE].texture = m_TowerTexture; } TowerRenderer::~TowerRenderer() { - UnloadModel(m_TowerModel); - UnloadTexture(m_TowerTexture); } void TowerRenderer::Render(float a_Lerp) { for (const auto& tower : m_World->GetTowers()) { - DrawModel(m_TowerModel, {tower->GetCenterX(), .001, tower->GetCenterY()}, 0.3f, {255, 255, 255, 255}); + m_TowerModel.Draw({tower->GetCenterX(), .001, tower->GetCenterY()}, 0.3f, {255, 255, 255, 255}); } } diff --git a/src/td/render/renderer/WorldRenderer.cpp b/src/td/render/renderer/WorldRenderer.cpp index f378e04..770d2b4 100644 --- a/src/td/render/renderer/WorldRenderer.cpp +++ b/src/td/render/renderer/WorldRenderer.cpp @@ -1,21 +1,19 @@ -#include -#include #include +#include #include -#include +#include namespace td { namespace render { -WorldRenderer::WorldRenderer(Camera& a_Camera, const game::WorldPtr& a_World) : Renderer(a_Camera) { +WorldRenderer::WorldRenderer(raylib::Camera& a_Camera, const game::WorldPtr& a_World) : Renderer(a_Camera) { Mesh mesh = WorldLoader::LoadWorldModel(a_World.get()); - m_WorldModel = LoadModelFromMesh(mesh); + m_WorldModel = std::make_unique(mesh); } WorldRenderer::~WorldRenderer() { - UnloadModel(m_WorldModel); } void WorldRenderer::UpdateControls() { @@ -29,7 +27,7 @@ void WorldRenderer::UpdateControls() { } void WorldRenderer::Render(float a_Lerp) { - DrawModel(m_WorldModel, {}, 1.0f, {255, 255, 255, 255}); + m_WorldModel->Draw({}, 1.0f, {255, 255, 255, 255}); } } // namespace render diff --git a/xmake.lua b/xmake.lua index 196352e..6b97f6a 100644 --- a/xmake.lua +++ b/xmake.lua @@ -2,8 +2,7 @@ add_rules("mode.debug", "mode.release") add_repositories("persson-repo https://git.ale-pri.com/Persson-dev/xmake-repo.git") -add_requires("rlimgui") -add_requires("splib 2.3.2", "zlib", "fpm", "enet6") +add_requires("rlimgui", "raylib-cpp", "splib 2.3.2", "zlib", "fpm", "enet6") set_languages("c++20") @@ -21,7 +20,7 @@ target("Tower-Defense2") add_includedirs("include", {public = true}) set_kind("binary") add_files("src/**.cpp") - add_packages("raylib", "rlimgui", "splib", "zlib", "fpm", "enet6", {public = true}) + add_packages("rlimgui", "raylib-cpp", "splib", "zlib", "fpm", "enet6", {public = true}) set_rundir(".")