fix: change renderer to class
This commit is contained in:
@@ -6,16 +6,19 @@
|
|||||||
#include "game/Team.h"
|
#include "game/Team.h"
|
||||||
#include "game/Player.h"
|
#include "game/Player.h"
|
||||||
|
|
||||||
|
#include "render/Renderer.h"
|
||||||
|
|
||||||
namespace td {
|
namespace td {
|
||||||
namespace client {
|
namespace client {
|
||||||
|
|
||||||
class Client{
|
class Client{
|
||||||
private:
|
private:
|
||||||
|
render::Renderer* m_Renderer;
|
||||||
ClientConnexion m_Connexion;
|
ClientConnexion m_Connexion;
|
||||||
ClientGame m_Game{m_Connexion.GetDispatcher()};
|
ClientGame m_Game;
|
||||||
bool m_Connected;
|
bool m_Connected;
|
||||||
public:
|
public:
|
||||||
Client() : m_Connected(false){}
|
Client(render::Renderer* renderer) : m_Renderer(renderer), m_Game(m_Connexion.GetDispatcher(), m_Renderer), m_Connected(false){}
|
||||||
|
|
||||||
const ClientGame& getGame() const{ return m_Game; }
|
const ClientGame& getGame() const{ return m_Game; }
|
||||||
const ClientConnexion& getConnexion() const{ return m_Connexion; }
|
const ClientConnexion& getConnexion() const{ return m_Connexion; }
|
||||||
|
|||||||
@@ -1,9 +1,13 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "game/BaseGame.h"
|
#include "game/BaseGame.h"
|
||||||
|
|
||||||
#include "protocol/PacketHandler.h"
|
#include "protocol/PacketHandler.h"
|
||||||
|
|
||||||
#include "WorldClient.h"
|
#include "WorldClient.h"
|
||||||
|
|
||||||
#include "render/WorldRenderer.h"
|
#include "render/WorldRenderer.h"
|
||||||
|
#include "render/Renderer.h"
|
||||||
|
|
||||||
namespace td {
|
namespace td {
|
||||||
namespace client {
|
namespace client {
|
||||||
@@ -13,10 +17,11 @@ private:
|
|||||||
std::uint8_t m_ConnexionID;
|
std::uint8_t m_ConnexionID;
|
||||||
std::uint32_t m_LobbyTime = 0;
|
std::uint32_t m_LobbyTime = 0;
|
||||||
game::Player* m_Player = nullptr;
|
game::Player* m_Player = nullptr;
|
||||||
client::WorldClient m_WorldClient{this};
|
render::Renderer* m_Renderer;
|
||||||
render::WorldRenderer m_WorldRenderer{&m_WorldClient};
|
client::WorldClient m_WorldClient;
|
||||||
|
render::WorldRenderer m_WorldRenderer;
|
||||||
public:
|
public:
|
||||||
ClientGame(protocol::PacketDispatcher* dispatcher);
|
ClientGame(protocol::PacketDispatcher* dispatcher, render::Renderer* renderer);
|
||||||
virtual ~ClientGame();
|
virtual ~ClientGame();
|
||||||
|
|
||||||
virtual void tick(std::uint64_t delta);
|
virtual void tick(std::uint64_t delta);
|
||||||
|
|||||||
@@ -9,37 +9,53 @@
|
|||||||
#define RENDER_RENDERER_H_
|
#define RENDER_RENDERER_H_
|
||||||
|
|
||||||
#include <glm/glm.hpp>
|
#include <glm/glm.hpp>
|
||||||
|
#include <memory>
|
||||||
#include "loader/GLLoader.h"
|
#include "loader/GLLoader.h"
|
||||||
|
#include "render/shaders/WorldShader.h"
|
||||||
|
#include "render/shaders/EntityShader.h"
|
||||||
|
|
||||||
namespace td {
|
namespace td {
|
||||||
namespace render{
|
namespace render {
|
||||||
|
|
||||||
namespace Renderer{
|
class Renderer {
|
||||||
|
public:
|
||||||
|
static constexpr float m_AnimationSpeed = 2.0f;
|
||||||
|
|
||||||
struct Model{
|
struct Model {
|
||||||
GL::VAO* vao;
|
GL::VAO* vao;
|
||||||
glm::vec2 positon;
|
glm::vec2 positon;
|
||||||
|
};
|
||||||
|
private:
|
||||||
|
std::unique_ptr<WorldShader> m_WorldShader;
|
||||||
|
std::unique_ptr<EntityShader> m_EntityShader;
|
||||||
|
|
||||||
|
bool m_IsometricView = true;
|
||||||
|
float m_IsometricShade = m_IsometricView;
|
||||||
|
glm::vec2 m_CamPos{};
|
||||||
|
public:
|
||||||
|
Renderer();
|
||||||
|
~Renderer();
|
||||||
|
|
||||||
|
bool init();
|
||||||
|
|
||||||
|
void prepare();
|
||||||
|
void resize(const int width, const int height);
|
||||||
|
|
||||||
|
void renderVAO(const GL::VAO& vao);
|
||||||
|
void renderModel(const Model& model);
|
||||||
|
|
||||||
|
void setZoom(float zoom);
|
||||||
|
void setCamMovement(const glm::vec2& mov);
|
||||||
|
void setCamPos(const glm::vec2& newPos);
|
||||||
|
void setIsometricView(bool isometric); // false = 2D true = Isometric
|
||||||
|
|
||||||
|
glm::vec2 getCursorWorldPos(const glm::vec2& cursorPos, float aspectRatio, float zoom, float windowWidth, float windowHeight);
|
||||||
|
private:
|
||||||
|
void updateIsometricView();
|
||||||
|
void updateIsometricFade();
|
||||||
|
void initShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
bool init();
|
|
||||||
void destroy();
|
|
||||||
|
|
||||||
void prepare();
|
|
||||||
void resize(const int width, const int height);
|
|
||||||
|
|
||||||
void renderVAO(const GL::VAO& vao);
|
|
||||||
void renderModel(const Model& model);
|
|
||||||
|
|
||||||
void setZoom(float zoom);
|
|
||||||
void setCamMovement(const glm::vec2& mov);
|
|
||||||
void setCamPos(const glm::vec2& newPos);
|
|
||||||
void setIsometricView(bool isometric); // false = 2D true = Isometric
|
|
||||||
|
|
||||||
glm::vec2 getCursorWorldPos(const glm::vec2& cursorPos, float aspectRatio, float zoom, float windowWidth, float windowHeight);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
} // namespace render
|
} // namespace render
|
||||||
} // namespace td
|
} // namespace td
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
#include "game/World.h"
|
#include "game/World.h"
|
||||||
#include "render/loader/GLLoader.h"
|
#include "render/loader/GLLoader.h"
|
||||||
|
#include "render/Renderer.h"
|
||||||
|
|
||||||
#include <glm/glm.hpp>
|
#include <glm/glm.hpp>
|
||||||
|
|
||||||
@@ -10,6 +11,7 @@ namespace render {
|
|||||||
|
|
||||||
class WorldRenderer{
|
class WorldRenderer{
|
||||||
private:
|
private:
|
||||||
|
Renderer* m_Renderer;
|
||||||
game::World* m_World;
|
game::World* m_World;
|
||||||
std::unique_ptr<GL::VAO> m_WorldVao, m_MobVao, m_SelectTileVao;
|
std::unique_ptr<GL::VAO> m_WorldVao, m_MobVao, m_SelectTileVao;
|
||||||
glm::vec2 m_CamPos;
|
glm::vec2 m_CamPos;
|
||||||
@@ -17,7 +19,7 @@ private:
|
|||||||
float m_Zoom = 1;
|
float m_Zoom = 1;
|
||||||
float m_CamSensibility = 1;
|
float m_CamSensibility = 1;
|
||||||
public:
|
public:
|
||||||
WorldRenderer(game::World* world);
|
WorldRenderer(game::World* world, Renderer* renderer);
|
||||||
~WorldRenderer();
|
~WorldRenderer();
|
||||||
|
|
||||||
void loadModels();
|
void loadModels();
|
||||||
|
|||||||
@@ -10,9 +10,18 @@
|
|||||||
|
|
||||||
struct GLFWwindow;
|
struct GLFWwindow;
|
||||||
|
|
||||||
namespace TowerGui{
|
namespace td {
|
||||||
|
namespace render {
|
||||||
|
|
||||||
void init(GLFWwindow* window);
|
class Renderer;
|
||||||
|
|
||||||
|
} // namespace render
|
||||||
|
} // namespace td
|
||||||
|
|
||||||
|
|
||||||
|
namespace TowerGui {
|
||||||
|
|
||||||
|
void init(GLFWwindow* window, td::render::Renderer* renderer);
|
||||||
void render();
|
void render();
|
||||||
void destroy();
|
void destroy();
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,8 @@
|
|||||||
namespace td {
|
namespace td {
|
||||||
namespace client {
|
namespace client {
|
||||||
|
|
||||||
ClientGame::ClientGame(protocol::PacketDispatcher* dispatcher): protocol::PacketHandler(dispatcher), game::Game(&m_WorldClient){
|
ClientGame::ClientGame(protocol::PacketDispatcher* dispatcher, render::Renderer* renderer): protocol::PacketHandler(dispatcher),
|
||||||
|
game::Game(&m_WorldClient), m_Renderer(renderer), m_WorldClient(this), m_WorldRenderer(&m_WorldClient, m_Renderer){
|
||||||
GetDispatcher()->RegisterHandler(protocol::PacketType::ConnectionInfo, this);
|
GetDispatcher()->RegisterHandler(protocol::PacketType::ConnectionInfo, this);
|
||||||
GetDispatcher()->RegisterHandler(protocol::PacketType::PlayerJoin, this);
|
GetDispatcher()->RegisterHandler(protocol::PacketType::PlayerJoin, this);
|
||||||
GetDispatcher()->RegisterHandler(protocol::PacketType::PlayerList, this);
|
GetDispatcher()->RegisterHandler(protocol::PacketType::PlayerList, this);
|
||||||
|
|||||||
@@ -6,11 +6,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "render/Renderer.h"
|
#include "render/Renderer.h"
|
||||||
#include "render/shaders/WorldShader.h"
|
|
||||||
#include "render/shaders/EntityShader.h"
|
|
||||||
#include <glbinding/gl/gl.h>
|
#include <glbinding/gl/gl.h>
|
||||||
#include <stdio.h>
|
|
||||||
#include <glbinding/Binding.h>
|
#include <glbinding/Binding.h>
|
||||||
|
#include <stdio.h>
|
||||||
#include "misc/Time.h"
|
#include "misc/Time.h"
|
||||||
#include "misc/Easing.h"
|
#include "misc/Easing.h"
|
||||||
|
|
||||||
@@ -19,35 +17,32 @@ using namespace gl;
|
|||||||
namespace td{
|
namespace td{
|
||||||
namespace render{
|
namespace render{
|
||||||
|
|
||||||
namespace Renderer{
|
Renderer::Renderer(){
|
||||||
|
|
||||||
#define ANIMATION_SPEED 2.0f
|
|
||||||
|
|
||||||
static std::unique_ptr<WorldShader> worldShader;
|
|
||||||
static std::unique_ptr<EntityShader> entityShader;
|
|
||||||
|
|
||||||
static bool isometricView = true;
|
|
||||||
static float isometricShade = isometricView;
|
|
||||||
static glm::vec2 camPos{};
|
|
||||||
|
|
||||||
void updateIsometricView(){
|
|
||||||
float isometricEased = utils::easeInOutExpo(isometricShade);
|
|
||||||
worldShader->start();
|
|
||||||
worldShader->setIsometricView(isometricEased);
|
|
||||||
entityShader->start();
|
|
||||||
entityShader->setIsometricView(isometricEased);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void initShader(){
|
Renderer::~Renderer(){
|
||||||
worldShader = std::make_unique<WorldShader>();
|
|
||||||
worldShader->loadShader();
|
}
|
||||||
entityShader = std::make_unique<EntityShader>();
|
|
||||||
entityShader->loadShader();
|
void Renderer::updateIsometricView(){
|
||||||
|
float isometricEased = utils::easeInOutExpo(m_IsometricShade);
|
||||||
|
m_WorldShader->start();
|
||||||
|
m_WorldShader->setIsometricView(isometricEased);
|
||||||
|
m_EntityShader->start();
|
||||||
|
m_EntityShader->setIsometricView(isometricEased);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Renderer::initShader(){
|
||||||
|
m_WorldShader = std::make_unique<WorldShader>();
|
||||||
|
m_WorldShader->loadShader();
|
||||||
|
m_EntityShader = std::make_unique<EntityShader>();
|
||||||
|
m_EntityShader->loadShader();
|
||||||
setIsometricView(true);
|
setIsometricView(true);
|
||||||
updateIsometricView();
|
updateIsometricView();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool init(){
|
bool Renderer::init(){
|
||||||
glbinding::Binding::initialize();
|
glbinding::Binding::initialize();
|
||||||
glEnable(GL_TEXTURE_2D);
|
glEnable(GL_TEXTURE_2D);
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
@@ -56,83 +51,78 @@ bool init(){
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void destroy(){
|
void Renderer::renderVAO(const GL::VAO& vao){
|
||||||
worldShader.reset(0);
|
m_WorldShader->start();
|
||||||
entityShader.reset(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void renderVAO(const GL::VAO& vao){
|
|
||||||
worldShader->start();
|
|
||||||
vao.bind();
|
vao.bind();
|
||||||
glDrawArrays(GL_TRIANGLES, 0, vao.getVertexCount());
|
glDrawArrays(GL_TRIANGLES, 0, vao.getVertexCount());
|
||||||
vao.unbind();
|
vao.unbind();
|
||||||
}
|
}
|
||||||
|
|
||||||
void renderModel(const Model& model){
|
void Renderer::renderModel(const Model& model){
|
||||||
entityShader->start();
|
m_EntityShader->start();
|
||||||
entityShader->setModelPos(model.positon);
|
m_EntityShader->setModelPos(model.positon);
|
||||||
model.vao->bind();
|
model.vao->bind();
|
||||||
glDrawArrays(GL_TRIANGLES, 0, model.vao->getVertexCount());
|
glDrawArrays(GL_TRIANGLES, 0, model.vao->getVertexCount());
|
||||||
model.vao->unbind();
|
model.vao->unbind();
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateIsometricFade(){
|
void Renderer::updateIsometricFade(){
|
||||||
static std::uint64_t lastTime = utils::getTime();
|
static std::uint64_t lastTime = utils::getTime();
|
||||||
if(isometricShade != (float) isometricView){
|
if(m_IsometricShade != (float) m_IsometricView){
|
||||||
float step = (float) (utils::getTime() - lastTime) / 1000.0f * ANIMATION_SPEED;
|
float step = (float) (utils::getTime() - lastTime) / 1000.0f * m_AnimationSpeed;
|
||||||
if(isometricShade < isometricView){
|
if(m_IsometricShade < m_IsometricView){
|
||||||
isometricShade += step;
|
m_IsometricShade += step;
|
||||||
}else{
|
}else{
|
||||||
isometricShade -= step;
|
m_IsometricShade -= step;
|
||||||
}
|
}
|
||||||
isometricShade = std::min(isometricShade, 1.0f);
|
m_IsometricShade = std::min(m_IsometricShade, 1.0f);
|
||||||
isometricShade = std::max(isometricShade, 0.0f);
|
m_IsometricShade = std::max(m_IsometricShade, 0.0f);
|
||||||
updateIsometricView();
|
updateIsometricView();
|
||||||
}
|
}
|
||||||
lastTime = utils::getTime();
|
lastTime = utils::getTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
void prepare(){
|
void Renderer::prepare(){
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
glClearColor(0, 0, 0, 0);
|
glClearColor(0, 0, 0, 0);
|
||||||
updateIsometricFade();
|
updateIsometricFade();
|
||||||
}
|
}
|
||||||
|
|
||||||
void resize(int width, int height){
|
void Renderer::resize(int width, int height){
|
||||||
worldShader->start();
|
m_WorldShader->start();
|
||||||
worldShader->setAspectRatio((float)width / height);
|
m_WorldShader->setAspectRatio((float)width / height);
|
||||||
entityShader->start();
|
m_EntityShader->start();
|
||||||
entityShader->setAspectRatio((float)width / height);
|
m_EntityShader->setAspectRatio((float)width / height);
|
||||||
glViewport(0, 0, width, height);
|
glViewport(0, 0, width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setZoom(float zoom){
|
void Renderer::setZoom(float zoom){
|
||||||
worldShader->start();
|
m_WorldShader->start();
|
||||||
worldShader->setZoom(zoom);
|
m_WorldShader->setZoom(zoom);
|
||||||
entityShader->start();
|
m_EntityShader->start();
|
||||||
entityShader->setZoom(zoom);
|
m_EntityShader->setZoom(zoom);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setCamMovement(const glm::vec2& mov){
|
void Renderer::setCamMovement(const glm::vec2& mov){
|
||||||
camPos.x += mov.x * (1 - isometricView) + (0.5 * mov.x - mov.y) * isometricView;
|
m_CamPos.x += mov.x * (1 - m_IsometricView) + (0.5 * mov.x - mov.y) * m_IsometricView;
|
||||||
camPos.y += -mov.y * (1 - isometricView) + (-0.5 * mov.x - mov.y) * isometricView;
|
m_CamPos.y += -mov.y * (1 - m_IsometricView) + (-0.5 * mov.x - mov.y) * m_IsometricView;
|
||||||
setCamPos(camPos);
|
setCamPos(m_CamPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setCamPos(const glm::vec2& newPos){
|
void Renderer::setCamPos(const glm::vec2& newPos){
|
||||||
camPos = newPos;
|
m_CamPos = newPos;
|
||||||
worldShader->start();
|
m_WorldShader->start();
|
||||||
worldShader->setCamPos(newPos);
|
m_WorldShader->setCamPos(newPos);
|
||||||
entityShader->start();
|
m_EntityShader->start();
|
||||||
entityShader->setCamPos(newPos);
|
m_EntityShader->setCamPos(newPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setIsometricView(bool isometric){
|
void Renderer::setIsometricView(bool isometric){
|
||||||
isometricView = isometric;
|
m_IsometricView = isometric;
|
||||||
}
|
}
|
||||||
|
|
||||||
glm::vec2 getCursorWorldPos(const glm::vec2& cursorPos, float aspectRatio, float zoom, float windowWidth, float windowHeight){
|
glm::vec2 Renderer::getCursorWorldPos(const glm::vec2& cursorPos, float aspectRatio, float zoom, float windowWidth, float windowHeight){
|
||||||
float isometricEased = utils::easeInOutExpo(isometricShade);
|
float isometricEased = utils::easeInOutExpo(m_IsometricShade);
|
||||||
|
|
||||||
float relativeX = (cursorPos.x / windowWidth * 2) - 1;
|
float relativeX = (cursorPos.x / windowWidth * 2) - 1;
|
||||||
float relativeY = (cursorPos.y / windowHeight * 2) - 1;
|
float relativeY = (cursorPos.y / windowHeight * 2) - 1;
|
||||||
@@ -140,13 +130,12 @@ glm::vec2 getCursorWorldPos(const glm::vec2& cursorPos, float aspectRatio, float
|
|||||||
float deltaX = relativeX * aspectRatio / zoom;
|
float deltaX = relativeX * aspectRatio / zoom;
|
||||||
float deltaY = relativeY / zoom;
|
float deltaY = relativeY / zoom;
|
||||||
|
|
||||||
float worldX = camPos.x + deltaX * (1 - isometricEased) + (0.5 * deltaX + deltaY) * isometricEased;
|
float worldX = m_CamPos.x + deltaX * (1 - isometricEased) + (0.5 * deltaX + deltaY) * isometricEased;
|
||||||
float worldY = camPos.y + deltaY * (1 - isometricEased) + (-0.5 * deltaX + deltaY) * isometricEased;
|
float worldY = m_CamPos.y + deltaY * (1 - isometricEased) + (-0.5 * deltaX + deltaY) * isometricEased;
|
||||||
|
|
||||||
return {worldX, worldY};
|
return {worldX, worldY};
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Renderer
|
|
||||||
|
|
||||||
} // namespace render
|
} // namespace render
|
||||||
} // namespace td
|
} // namespace td
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ void WorldRenderer::loadModels(){
|
|||||||
std::cout << "Vertex Count : " << m_WorldVao->getVertexCount() << std::endl;
|
std::cout << "Vertex Count : " << m_WorldVao->getVertexCount() << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
WorldRenderer::WorldRenderer(game::World* world) : m_World(world){
|
WorldRenderer::WorldRenderer(game::World* world, Renderer* renderer) : m_Renderer(renderer), m_World(world) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldRenderer::updateCursorPos(){
|
void WorldRenderer::updateCursorPos(){
|
||||||
@@ -26,7 +26,7 @@ void WorldRenderer::updateCursorPos(){
|
|||||||
float mouseX = io.MousePos.x;
|
float mouseX = io.MousePos.x;
|
||||||
float mouseY = io.MousePos.y;
|
float mouseY = io.MousePos.y;
|
||||||
|
|
||||||
m_CursorPos = Renderer::getCursorWorldPos({mouseX, mouseY}, Display::getAspectRatio(), m_Zoom, Display::getWindowWidth(), Display::getWindowHeight());
|
m_CursorPos = m_Renderer->getCursorWorldPos({mouseX, mouseY}, Display::getAspectRatio(), m_Zoom, Display::getWindowWidth(), Display::getWindowHeight());
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldRenderer::update(){
|
void WorldRenderer::update(){
|
||||||
@@ -46,7 +46,7 @@ void WorldRenderer::update(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
void WorldRenderer::renderWorld() const{
|
void WorldRenderer::renderWorld() const{
|
||||||
Renderer::renderVAO(*m_WorldVao);
|
m_Renderer->renderVAO(*m_WorldVao);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldRenderer::renderMobs() const{
|
void WorldRenderer::renderMobs() const{
|
||||||
@@ -54,7 +54,7 @@ void WorldRenderer::renderMobs() const{
|
|||||||
Renderer::Model model;
|
Renderer::Model model;
|
||||||
model.vao = m_MobVao.get();
|
model.vao = m_MobVao.get();
|
||||||
model.positon = {mob->getX(), mob->getY()};
|
model.positon = {mob->getX(), mob->getY()};
|
||||||
Renderer::renderModel(model);
|
m_Renderer->renderModel(model);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -63,7 +63,7 @@ void WorldRenderer::renderTowers() const{
|
|||||||
tileSelectModel.vao = m_SelectTileVao.get();
|
tileSelectModel.vao = m_SelectTileVao.get();
|
||||||
tileSelectModel.positon = {(int) m_CursorPos.x, (int) m_CursorPos.y};
|
tileSelectModel.positon = {(int) m_CursorPos.x, (int) m_CursorPos.y};
|
||||||
|
|
||||||
Renderer::renderModel(tileSelectModel);
|
m_Renderer->renderModel(tileSelectModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldRenderer::renderTileSelect() const{
|
void WorldRenderer::renderTileSelect() const{
|
||||||
@@ -88,7 +88,7 @@ void WorldRenderer::moveCam(float relativeX, float relativeY, float aspectRatio)
|
|||||||
return;
|
return;
|
||||||
float movementX = -relativeX / m_Zoom * aspectRatio;
|
float movementX = -relativeX / m_Zoom * aspectRatio;
|
||||||
float movementY = relativeY / m_Zoom;
|
float movementY = relativeY / m_Zoom;
|
||||||
Renderer::setCamMovement({movementX, movementY});
|
m_Renderer->setCamMovement({movementX, movementY});
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldRenderer::changeZoom(float zoomStep){
|
void WorldRenderer::changeZoom(float zoomStep){
|
||||||
@@ -101,8 +101,8 @@ void WorldRenderer::changeZoom(float zoomStep){
|
|||||||
else{
|
else{
|
||||||
m_Zoom *= zoomStep * sensibility;
|
m_Zoom *= zoomStep * sensibility;
|
||||||
}
|
}
|
||||||
Renderer::setZoom(m_Zoom);
|
m_Renderer->setZoom(m_Zoom);
|
||||||
Renderer::setCamMovement({});
|
m_Renderer->setCamMovement({});
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldRenderer::click(int mouseX, int mouseY){
|
void WorldRenderer::click(int mouseX, int mouseY){
|
||||||
@@ -112,7 +112,7 @@ void WorldRenderer::click(int mouseX, int mouseY){
|
|||||||
|
|
||||||
void WorldRenderer::setCamPos(float camX, float camY){
|
void WorldRenderer::setCamPos(float camX, float camY){
|
||||||
m_CamPos = {camX, camY};
|
m_CamPos = {camX, camY};
|
||||||
Renderer::setCamPos(m_CamPos);
|
m_Renderer->setCamPos(m_CamPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace render
|
} // namespace render
|
||||||
|
|||||||
@@ -23,12 +23,13 @@
|
|||||||
namespace TowerGui{
|
namespace TowerGui{
|
||||||
|
|
||||||
static GLFWwindow* window;
|
static GLFWwindow* window;
|
||||||
static std::unique_ptr<td::client::Client> client = std::make_unique<td::client::Client>();
|
static std::unique_ptr<td::client::Client> client;
|
||||||
static std::thread* serverThread;
|
static std::thread* serverThread;
|
||||||
|
static td::render::Renderer* renderer;
|
||||||
|
|
||||||
bool serverShouldStop = false;
|
bool serverShouldStop = false;
|
||||||
|
|
||||||
void init(GLFWwindow* glfw_window){
|
void init(GLFWwindow* glfw_window, td::render::Renderer* render){
|
||||||
window = glfw_window;
|
window = glfw_window;
|
||||||
IMGUI_CHECKVERSION();
|
IMGUI_CHECKVERSION();
|
||||||
ImGui::CreateContext();
|
ImGui::CreateContext();
|
||||||
@@ -39,6 +40,8 @@ void init(GLFWwindow* glfw_window){
|
|||||||
ImFontConfig c;
|
ImFontConfig c;
|
||||||
c.SizePixels = 25;
|
c.SizePixels = 25;
|
||||||
ImGui::GetIO().Fonts->AddFontDefault(&c);
|
ImGui::GetIO().Fonts->AddFontDefault(&c);
|
||||||
|
renderer = render;
|
||||||
|
client = std::make_unique<td::client::Client>(render);
|
||||||
}
|
}
|
||||||
|
|
||||||
void beginFrame(){
|
void beginFrame(){
|
||||||
@@ -62,7 +65,7 @@ void renderFPSCounter(){
|
|||||||
}
|
}
|
||||||
static bool isometric = true;
|
static bool isometric = true;
|
||||||
if (ImGui::Checkbox("Vue Isometrique ?", &isometric)){
|
if (ImGui::Checkbox("Vue Isometrique ?", &isometric)){
|
||||||
td::render::Renderer::setIsometricView(isometric);
|
renderer->setIsometricView(isometric);
|
||||||
}
|
}
|
||||||
ImGui::End();
|
ImGui::End();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
namespace Display {
|
namespace Display {
|
||||||
|
|
||||||
static GLFWwindow* window;
|
static GLFWwindow* window;
|
||||||
|
std::unique_ptr<td::render::Renderer> renderer = std::make_unique<td::render::Renderer>();
|
||||||
|
|
||||||
static int lastWidth = 0, lastHeight = 0;
|
static int lastWidth = 0, lastHeight = 0;
|
||||||
static float aspectRatio;
|
static float aspectRatio;
|
||||||
@@ -31,7 +32,7 @@ void error_callback(int error, const char* description){
|
|||||||
|
|
||||||
void windowResizeEvent(GLFWwindow* window, int width, int height){
|
void windowResizeEvent(GLFWwindow* window, int width, int height){
|
||||||
aspectRatio = (float) width / height;
|
aspectRatio = (float) width / height;
|
||||||
td::render::Renderer::resize(width, height);
|
renderer->resize(width, height);
|
||||||
lastWidth = width;
|
lastWidth = width;
|
||||||
lastHeight = height;
|
lastHeight = height;
|
||||||
}
|
}
|
||||||
@@ -45,15 +46,15 @@ void create() {
|
|||||||
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
|
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
|
||||||
window = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_NAME, nullptr, nullptr);
|
window = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_NAME, nullptr, nullptr);
|
||||||
glfwMakeContextCurrent(window);
|
glfwMakeContextCurrent(window);
|
||||||
if(!td::render::Renderer::init()){
|
if(!renderer->init()){
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
TowerGui::init(window);
|
TowerGui::init(window, renderer.get());
|
||||||
windowResizeEvent(window, WINDOW_WIDTH, WINDOW_HEIGHT);
|
windowResizeEvent(window, WINDOW_WIDTH, WINDOW_HEIGHT);
|
||||||
}
|
}
|
||||||
|
|
||||||
void render() {
|
void render() {
|
||||||
td::render::Renderer::prepare();
|
renderer->prepare();
|
||||||
TowerGui::render();
|
TowerGui::render();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,7 +68,7 @@ void update() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void destroy() {
|
void destroy() {
|
||||||
td::render::Renderer::destroy();
|
renderer.reset(0);
|
||||||
TowerGui::destroy();
|
TowerGui::destroy();
|
||||||
glfwDestroyWindow(window);
|
glfwDestroyWindow(window);
|
||||||
window = NULL;
|
window = NULL;
|
||||||
|
|||||||
Reference in New Issue
Block a user