86 lines
2.0 KiB
C++
86 lines
2.0 KiB
C++
#pragma once
|
|
|
|
#include "game/World.h"
|
|
|
|
#include "render/Renderer.h"
|
|
#include "render/VertexCache.h"
|
|
|
|
#include "render/gui/TowerPlacePopup.h"
|
|
#include "render/gui/MobTooltip.h"
|
|
#include "render/gui/CastleTooltip.h"
|
|
|
|
#include "render/gui/imgui/imgui.h"
|
|
|
|
namespace td {
|
|
|
|
namespace client {
|
|
|
|
class ClientGame;
|
|
|
|
} // namespace client
|
|
|
|
|
|
namespace render {
|
|
|
|
class WorldRenderer : public game::WorldListener {
|
|
private:
|
|
client::ClientGame* m_Client;
|
|
Renderer* m_Renderer;
|
|
game::World* m_World;
|
|
std::unique_ptr<GL::VertexArray> m_WorldVao, m_MobVao, m_SelectTileVao;
|
|
Vec2f m_CamPos;
|
|
Vec2f m_CursorPos;
|
|
Vec2f m_HoldCursorPos;
|
|
Vec2f m_LastClicked;
|
|
float m_Zoom;
|
|
float m_CamSensibility = 1;
|
|
bool m_PopupOpened = false;
|
|
VertexCache m_TowersCache;
|
|
|
|
std::unique_ptr<gui::TowerPlacePopup> m_TowerPlacePopup;
|
|
std::unique_ptr<gui::MobTooltip> m_MobTooltip;
|
|
std::unique_ptr<gui::CastleTooltip> m_CastleTooltip;
|
|
public:
|
|
WorldRenderer(game::World* world, client::ClientGame* client);
|
|
~WorldRenderer();
|
|
|
|
void LoadModels();
|
|
|
|
static ImVec4 GetImGuiTeamColor(game::TeamColor color);
|
|
|
|
void Update();
|
|
void Render();
|
|
|
|
void SetCamPos(float camX, float camY);
|
|
|
|
void MoveCam(float relativeX, float relativeY, float aspectRatio);
|
|
void ChangeZoom(float zoom);
|
|
|
|
// WorldListener
|
|
|
|
virtual void OnTowerAdd(game::TowerPtr tower);
|
|
virtual void OnTowerRemove(game::TowerPtr tower);
|
|
private:
|
|
void Click();
|
|
void RenderWorld() const;
|
|
void RenderTowers() const;
|
|
void RenderMobs() const;
|
|
void RenderTileSelect() const;
|
|
void RenderPopups();
|
|
void RenderTowerUpgradePopup();
|
|
void RenderMobTooltip() const;
|
|
void RenderCastleTooltip() const;
|
|
void DetectClick();
|
|
void DetectMobHovering() const;
|
|
void DetectCastleHovering() const;
|
|
void RenderTooltips() const;
|
|
void RemoveTower();
|
|
Vec2f GetCursorWorldPos() const;
|
|
Vec2f GetClickWorldPos() const;
|
|
|
|
void UpdateCursorPos();
|
|
};
|
|
|
|
} // namespace render
|
|
} // namespace td
|