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