diff --git a/include/td/Types.h b/include/td/Types.h
index 497c4fa..1b91d23 100644
--- a/include/td/Types.h
+++ b/include/td/Types.h
@@ -83,4 +83,16 @@ sp::DataBuffer& operator<<(sp::DataBuffer& a_Buffer, const FpFloat& a_Float);
sp::DataBuffer& operator>>(sp::DataBuffer& a_Buffer, EntityCoords& a_Coords);
sp::DataBuffer& operator>>(sp::DataBuffer& a_Buffer, FpFloat& a_Float);
+inline TowerType& operator>>=(TowerType& a_Type, std::size_t a_Offset) {
+ return a_Type;
+}
+
+inline TowerType operator&(const TowerType& a_Type, std::size_t a_Offset) {
+ return a_Type;
+}
+
+inline TowerType& operator&=(TowerType& a_Type, std::size_t a_Offset) {
+ return a_Type;
+}
+
} // namespace td
diff --git a/include/td/render/renderer/TowerRenderer.h b/include/td/render/renderer/TowerRenderer.h
new file mode 100644
index 0000000..55f4dc3
--- /dev/null
+++ b/include/td/render/renderer/TowerRenderer.h
@@ -0,0 +1,23 @@
+#pragma once
+
+#include
+#include |
+#include |
+
+namespace td {
+namespace render {
+
+class TowerRenderer : public Renderer {
+ private:
+ const game::World& m_World;
+ std::unique_ptr m_EntityVao;
+
+ public:
+ TowerRenderer(Camera& a_Camera, const game::World& a_World);
+ virtual ~TowerRenderer();
+
+ virtual void Render(float a_Lerp) override;
+};
+
+} // namespace render
+} // namespace td
diff --git a/src/main.cpp b/src/main.cpp
index f0c9b68..6e3140b 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -10,6 +10,7 @@
#include |
#include |
+#include |
#include |
@@ -74,6 +75,9 @@ td::sim::GameHistory GetCustomHistory() {
auto spawn = std::make_shared(0, 0, td::Vec2fp{td::FpFloat(77), td::FpFloat(13)}, 0);
gh[0].push_back(spawn);
+ auto tower = std::make_shared(td::TowerType::Archer, 0, td::TowerCoords{77, 13});
+ gh[0].push_back(tower);
+
return gh;
}
@@ -94,11 +98,12 @@ int main(int argc, char** argv) {
td::render::RenderPipeline renderer;
renderer.AddRenderer(cam, w);
renderer.AddRenderer(cam, w);
+ renderer.AddRenderer(cam, w);
cam.SetCamPos({77, 5, 13});
cam.UpdatePerspective(display.GetAspectRatio());
- td::sim::RealTimeSimulation simulation(w, std::move(gh), 2000);
+ td::sim::RealTimeSimulation simulation(w, std::move(gh), 500);
while (!display.IsCloseRequested()) {
display.PollEvents();
diff --git a/src/td/render/renderer/TowerRenderer.cpp b/src/td/render/renderer/TowerRenderer.cpp
new file mode 100644
index 0000000..b9ad89c
--- /dev/null
+++ b/src/td/render/renderer/TowerRenderer.cpp
@@ -0,0 +1,27 @@
+#include |
+
+#include |
+
+namespace td {
+namespace render {
+
+TowerRenderer::TowerRenderer(Camera& a_Camera, const game::World& a_World) : Renderer(a_Camera), m_World(a_World) {
+ m_EntityVao = std::make_unique(WorldLoader::LoadMobModel());
+ m_Shader->Start();
+ m_Shader->SetColorEffect({0, 0, 1});
+}
+
+TowerRenderer::~TowerRenderer() {}
+
+
+
+void TowerRenderer::Render(float a_Lerp) {
+ m_Shader->Start();
+ for (const auto& tower : m_World.GetTowers()) {
+ m_Shader->SetModelPos({tower->GetCenterX(), 1, tower->GetCenterY()});
+ Renderer::Render(*m_EntityVao);
+ }
+}
+
+} // namespace render
+} // namespace td
| | |