From 9fa4f2829bdcf04c66ed1079341c52d4ed79d471 Mon Sep 17 00:00:00 2001 From: Frederic Leger <57264593+freeedleger@users.noreply.github.com> Date: Mon, 30 Oct 2023 14:03:10 -0400 Subject: [PATCH 1/4] add boostinfo --- SQCSim-common/SQCSim-common.vcxproj | 2 + SQCSim-common/SQCSim-common.vcxproj.filters | 6 +++ SQCSim-common/boostinfo.cpp | 32 +++++++++++++ SQCSim-common/boostinfo.h | 29 ++++++++++++ SQCSim-common/define.h | 7 +++ SQCSim-common/player.cpp | 51 ++++++++++++++++++++- SQCSim-common/player.h | 10 +++- SQCSim2021/define.h | 1 + SQCSim2021/engine.cpp | 4 ++ 9 files changed, 140 insertions(+), 2 deletions(-) create mode 100644 SQCSim-common/boostinfo.cpp create mode 100644 SQCSim-common/boostinfo.h diff --git a/SQCSim-common/SQCSim-common.vcxproj b/SQCSim-common/SQCSim-common.vcxproj index 991cd1d..5f319ac 100644 --- a/SQCSim-common/SQCSim-common.vcxproj +++ b/SQCSim-common/SQCSim-common.vcxproj @@ -131,6 +131,7 @@ + @@ -144,6 +145,7 @@ + diff --git a/SQCSim-common/SQCSim-common.vcxproj.filters b/SQCSim-common/SQCSim-common.vcxproj.filters index 26c6c05..45814cf 100644 --- a/SQCSim-common/SQCSim-common.vcxproj.filters +++ b/SQCSim-common/SQCSim-common.vcxproj.filters @@ -54,6 +54,9 @@ Fichiers d%27en-tête + + Fichiers d%27en-tête + @@ -80,5 +83,8 @@ Fichiers sources + + Fichiers sources + \ No newline at end of file diff --git a/SQCSim-common/boostinfo.cpp b/SQCSim-common/boostinfo.cpp new file mode 100644 index 0000000..9b54626 --- /dev/null +++ b/SQCSim-common/boostinfo.cpp @@ -0,0 +1,32 @@ +#include "boostinfo.h" +#include + +BoostInfo::BoostInfo(BoostType type, const std::string& name, float u, float v, float s, int dur) : m_type(type), m_name(name), m_u(u), m_v(v), m_s(s), m_durability(dur) +{ +} + +BoostInfo::~BoostInfo() +{ +} + +BoostType BoostInfo::GetType() const +{ + return m_type; +} + +void BoostInfo::GetTexture(float& u, float& v, float& s) +{ + u = m_u; + v = m_v; + s = m_s; +} + +void BoostInfo::Show() const +{ + std::cout << "Type: " << m_type << std::endl; + std::cout << "Nom: " << m_name << std::endl; + std::cout << "Durabilite: " << m_durability << std::endl; + std::cout << "Coordonnees Texture: " << m_u << ", " << m_v << ", " << m_s << std::endl; +} + + diff --git a/SQCSim-common/boostinfo.h b/SQCSim-common/boostinfo.h new file mode 100644 index 0000000..e76d1ed --- /dev/null +++ b/SQCSim-common/boostinfo.h @@ -0,0 +1,29 @@ +#ifndef BOOSTINFO_H__ +#define BOOSTINFO_H__ + +#include +#include "define.h" + +class BoostInfo +{ +public: + BoostInfo(BoostType type, const std::string& name, float u, float v, float s, int dur); + ~BoostInfo(); + + BoostType GetType() const; + + void GetTexture(float& u, float& v, float& s); + + void Show() const; + +private: + BoostType m_type; + float m_u; + float m_v; + float m_s; + std::string m_name; + int m_durability; + +}; + +#endif // BOOSTINFO_H__ diff --git a/SQCSim-common/define.h b/SQCSim-common/define.h index f65bc2b..337a9be 100644 --- a/SQCSim-common/define.h +++ b/SQCSim-common/define.h @@ -29,8 +29,15 @@ #define TEXTURE_SIZE 512 #define MAX_BULLETS 512 +#define TIME_SPEED_BOOST 10 //secondes +#define TIME_DAMAGE_BOOST 10 //secondes +#define TIME_INVINCIBLE_BOOST 4 //secondes +#define STRENGTH_SPEED_BOOST 10 //Pourcentage + typedef uint8_t BlockType; +typedef uint8_t BoostType; enum BLOCK_TYPE { BTYPE_AIR, BTYPE_DIRT, BTYPE_GRASS, BTYPE_METAL, BTYPE_ICE, BTYPE_LAST }; +enum BOOST_TYPE { BTYPE_SPEED, BTYPE_HEAL, BTYPE_DAMAGE, BTYPE_INVINCIBLE }; typedef uint64_t Timestamp; #ifdef _WIN32 diff --git a/SQCSim-common/player.cpp b/SQCSim-common/player.cpp index 9fe810c..66b6c0a 100644 --- a/SQCSim-common/player.cpp +++ b/SQCSim-common/player.cpp @@ -59,6 +59,11 @@ Vector3f Player::GetInput(bool front, bool back, bool left, bool right, bool jum delta.y += jump? .32f: shoot? .1f : 0.f; m_airborne = true; } + if (boostspeed) + { + delta.x += STRENGTH_SPEED_BOOST / 100 * delta.x; + delta.z += STRENGTH_SPEED_BOOST / 100 * delta.z; + } if (shoot) // Recoil! TurnTopBottom(-1); @@ -180,7 +185,7 @@ Player::Sound Player::ApplyPhysics(Vector3f input, World* world, float elapsedTi else isStep = false; m_POV = m_position.y; m_POV += m_airborne ? 0 : (sin(bobbingtime) - 0.5f) * (abs(m_velocity.x) + abs(m_velocity.z)) * .2f; - + RemoveBooster(elapsedTime); return snd; } @@ -190,6 +195,50 @@ void Player::ApplyTransformation(Transformation& transformation, bool rel) const if (rel) transformation.ApplyTranslation(-GetPOV()); } +void Player::GetBooster(Booster boosttype) +{ + if (boosttype == SPEED) + { + boostspeed = true; + timeboostspeed = 0; + } + if (boosttype == HEAL) + { + m_hp = 100; + } + if (boosttype == DAMAGE) + { + boostdamage = true; + timeboostdamage = 0; + } + if (boosttype == INVINCIBLE) + { + boostinvincible = true; + boostinvincible = 0; + } +} +void Player::RemoveBooster(float elapsedtime) +{ + if (boostspeed) + { + timeboostspeed += elapsedtime; + if (timeboostspeed >= TIME_SPEED_BOOST) + boostspeed = false; + } + if (boostdamage) + { + timeboostdamage += elapsedtime; + if (timeboostdamage >= TIME_DAMAGE_BOOST) + boostdamage = false; + } + if (boostinvincible) + { + timeboostinvincible += elapsedtime; + if (timeboostinvincible >= TIME_INVINCIBLE_BOOST) + boostinvincible = false; + } +} + Vector3f Player::GetPosition() const { return Vector3f(m_position.x + CHUNK_SIZE_X * WORLD_SIZE_X / 2, m_position.y, m_position.z + CHUNK_SIZE_Z * WORLD_SIZE_Y / 2); } Vector3f Player::GetVelocity() const { return m_velocity; } diff --git a/SQCSim-common/player.h b/SQCSim-common/player.h index e439fa2..1a98d6d 100644 --- a/SQCSim-common/player.h +++ b/SQCSim-common/player.h @@ -10,6 +10,7 @@ class World; class Player { public: enum Sound { NOSOUND, STEP, FALL }; + enum Booster { SPEED, HEAL, DAMAGE, INVINCIBLE }; Player(const Vector3f& position, float rotX = 0, float rotY = 0); void TurnLeftRight(float value); @@ -17,7 +18,8 @@ public: Vector3f GetInput(bool front, bool back, bool left, bool right, bool jump, bool dash, float elapsedTime); Sound ApplyPhysics(Vector3f input, World* world, float elapsedTime); void ApplyTransformation(Transformation& transformation, bool rel = true) const; - + void GetBooster(Booster boosttype); + void RemoveBooster(float elapsedtime); Vector3f GetPosition() const; Vector3f GetDirection() const; Vector3f GetVelocity() const; @@ -36,10 +38,16 @@ private: float m_rotX = 0; float m_rotY = 0; float m_POV; + float timeboostspeed; + float timeboostdamage; + float timeboostinvincible; float m_hp; bool m_airborne; + bool boostspeed; + bool boostdamage; + bool boostinvincible; }; #endif //_PLAYER_H__ diff --git a/SQCSim2021/define.h b/SQCSim2021/define.h index 67c49c3..2abfe0c 100644 --- a/SQCSim2021/define.h +++ b/SQCSim2021/define.h @@ -35,5 +35,6 @@ #define AUDIO_PATH "./media/audio/" #define CHUNK_PATH "./media/chunks/" #define MENU_ITEM_PATH "./media/menu_items/" +#define BOOSTER_TEXTURE_PATH "./media/textures/Booster" #endif // DEFINE_H__ diff --git a/SQCSim2021/engine.cpp b/SQCSim2021/engine.cpp index a5939e6..daa4123 100644 --- a/SQCSim2021/engine.cpp +++ b/SQCSim2021/engine.cpp @@ -305,6 +305,10 @@ void Engine::LoadResource() { TextureAtlas::TextureIndex texIceIndex = m_textureAtlas.AddTexture(TEXTURE_PATH "metal2.png"); TextureAtlas::TextureIndex texGrassIndex = m_textureAtlas.AddTexture(TEXTURE_PATH "grass.png"); TextureAtlas::TextureIndex texMetalIndex = m_textureAtlas.AddTexture(TEXTURE_PATH "dirt.png"); + TextureAtlas::TextureIndex texBoostHeal = m_textureAtlas.AddTexture(BOOSTER_TEXTURE_PATH "BoosterMauve.png"); + TextureAtlas::TextureIndex texBoostDmg = m_textureAtlas.AddTexture(BOOSTER_TEXTURE_PATH "BoosterRouge.png"); + TextureAtlas::TextureIndex texBoostSpd = m_textureAtlas.AddTexture(BOOSTER_TEXTURE_PATH "BoosterBleu.png"); + TextureAtlas::TextureIndex texBoostInv = m_textureAtlas.AddTexture(BOOSTER_TEXTURE_PATH "BoosterJaune.png"); if (!m_textureAtlas.Generate(TEXTURE_SIZE, false)) { std::cout << " Unable to generate texture atlas ..." << std::endl; From 5f3b5b3777fd06c80141fae9df8f91199f00abca Mon Sep 17 00:00:00 2001 From: Claudel-D-Roy <112507354+Claudel-D-Roy@users.noreply.github.com> Date: Mon, 30 Oct 2023 14:19:55 -0400 Subject: [PATCH 2/4] BoosterVert --- .../media/textures/Booster/BoosterVert.png | Bin 0 -> 10589 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 SQCSim2021/media/textures/Booster/BoosterVert.png diff --git a/SQCSim2021/media/textures/Booster/BoosterVert.png b/SQCSim2021/media/textures/Booster/BoosterVert.png new file mode 100644 index 0000000000000000000000000000000000000000..b731b74e4deecf271b112be3309d794f04b40246 GIT binary patch literal 10589 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 literal 0 HcmV?d00001 From 559a8efc1918989e04396a31ecf0bd465b52072b Mon Sep 17 00:00:00 2001 From: Frederic Leger <57264593+freeedleger@users.noreply.github.com> Date: Mon, 30 Oct 2023 14:32:20 -0400 Subject: [PATCH 3/4] ajout texture --- SQCSim-common/define.h | 2 +- SQCSim2021/engine.cpp | 9 +++++++++ SQCSim2021/engine.h | 2 ++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/SQCSim-common/define.h b/SQCSim-common/define.h index 337a9be..5ed4b13 100644 --- a/SQCSim-common/define.h +++ b/SQCSim-common/define.h @@ -37,7 +37,7 @@ typedef uint8_t BlockType; typedef uint8_t BoostType; enum BLOCK_TYPE { BTYPE_AIR, BTYPE_DIRT, BTYPE_GRASS, BTYPE_METAL, BTYPE_ICE, BTYPE_LAST }; -enum BOOST_TYPE { BTYPE_SPEED, BTYPE_HEAL, BTYPE_DAMAGE, BTYPE_INVINCIBLE }; +enum BOOST_TYPE { BTYPE_SPEED, BTYPE_HEAL, BTYPE_DAMAGE, BTYPE_INVINCIBLE, BTYPE_BOOST_LAST }; typedef uint64_t Timestamp; #ifdef _WIN32 diff --git a/SQCSim2021/engine.cpp b/SQCSim2021/engine.cpp index bacea3b..018c5e5 100644 --- a/SQCSim2021/engine.cpp +++ b/SQCSim2021/engine.cpp @@ -378,6 +378,15 @@ void Engine::LoadResource() { m_blockinfo[BTYPE_METAL] = new BlockInfo(BTYPE_METAL, "Metal", u, v, s, 1); m_textureAtlas.TextureIndexToCoord(texIceIndex, u, v, s, s); m_blockinfo[BTYPE_ICE] = new BlockInfo(BTYPE_ICE, "Ice", u, v, s, 1); + m_textureAtlas.TextureIndexToCoord(texBoostHeal, u, v, s, s); + m_boostinfo[BTYPE_HEAL] = new BoostInfo(BTYPE_HEAL, "Heal", u, v, s, 1); + m_textureAtlas.TextureIndexToCoord(texBoostDmg, u, v, s, s); + m_boostinfo[BTYPE_DAMAGE] = new BoostInfo(BTYPE_DAMAGE, "Dmg", u, v, s, 1); + m_textureAtlas.TextureIndexToCoord(texBoostSpd, u, v, s, s); + m_boostinfo[BTYPE_SPEED] = new BoostInfo(BTYPE_SPEED, "Spd", u, v, s, 1); + m_textureAtlas.TextureIndexToCoord(texIceIndex, u, v, s, s); + m_boostinfo[BTYPE_INVINCIBLE] = new BoostInfo(BTYPE_INVINCIBLE, "Inv", u, v, s, 1); + std::cout << " Loading and compiling shaders ..." << std::endl; if (!m_shader01.Load(SHADER_PATH "shader01.vert", SHADER_PATH "shader01.frag", true)) { diff --git a/SQCSim2021/engine.h b/SQCSim2021/engine.h index 0ed8b39..4f4f67f 100644 --- a/SQCSim2021/engine.h +++ b/SQCSim2021/engine.h @@ -5,6 +5,7 @@ #include #include "../SQCSim-common/array2d.h" #include "../SQCSim-common/blockinfo.h" +#include "../SQCSim-common/boostinfo.h" #include "../SQCSim-common/bullet.h" #include "../SQCSim-common/chunk.h" #include "../SQCSim-common/world.h" @@ -61,6 +62,7 @@ private: Connector m_conn; Shader m_shader01; BlockInfo* m_blockinfo[BTYPE_LAST]; + BoostInfo* m_boostinfo[BTYPE_BOOST_LAST]; TextureAtlas m_textureAtlas = TextureAtlas(BTYPE_LAST); World m_world = World(); From 8769aa9e38a7e150e10fbd675831a3a7ad00c90e Mon Sep 17 00:00:00 2001 From: Frederic Leger <57264593+freeedleger@users.noreply.github.com> Date: Mon, 20 Nov 2023 15:40:43 -0500 Subject: [PATCH 4/4] booster affiche affiche simplement un carre rouge pour l'instant et ne se ramasse pas encore --- SQCSim2021/SQCSim2021.vcxproj | 2 ++ SQCSim2021/SQCSim2021.vcxproj.filters | 6 ++++ SQCSim2021/booster.cpp | 46 +++++++++++++++++++++++++++ SQCSim2021/booster.h | 14 ++++++++ SQCSim2021/define.h | 2 +- SQCSim2021/engine.cpp | 3 +- SQCSim2021/engine.h | 4 +++ SQCSim2021/remoteplayer.h | 1 - SQCSim2021/renderer.cpp | 32 ++++++++++++++++++- SQCSim2021/renderer.h | 6 ++++ 10 files changed, 112 insertions(+), 4 deletions(-) create mode 100644 SQCSim2021/booster.cpp create mode 100644 SQCSim2021/booster.h diff --git a/SQCSim2021/SQCSim2021.vcxproj b/SQCSim2021/SQCSim2021.vcxproj index 7f1334e..3aec273 100644 --- a/SQCSim2021/SQCSim2021.vcxproj +++ b/SQCSim2021/SQCSim2021.vcxproj @@ -20,6 +20,7 @@ + @@ -36,6 +37,7 @@ + diff --git a/SQCSim2021/SQCSim2021.vcxproj.filters b/SQCSim2021/SQCSim2021.vcxproj.filters index 5c8a864..8246b5c 100644 --- a/SQCSim2021/SQCSim2021.vcxproj.filters +++ b/SQCSim2021/SQCSim2021.vcxproj.filters @@ -53,6 +53,9 @@ Fichiers d%27en-tête + + Fichiers d%27en-tête + @@ -97,5 +100,8 @@ Fichiers sources + + Fichiers sources + \ No newline at end of file diff --git a/SQCSim2021/booster.cpp b/SQCSim2021/booster.cpp new file mode 100644 index 0000000..cfef393 --- /dev/null +++ b/SQCSim2021/booster.cpp @@ -0,0 +1,46 @@ +#include "booster.h"; + +void Booster::RenderBillboard(const Vector3f pos, TextureAtlas& textureAtlas, TextureAtlas::TextureIndex idx, Shader& shader, Transformation tran) +{ + // + //Vector3f playerToQuad = m_player.GetPosition() - m_position; + //playerToQuad.Normalize(); + //Vector3f targetPosition = m_player.GetPosition() + playerToQuad * 10.0f; + //Matrix4f rotationMatrix; + //rotationMatrix.SetLookAt(m_position, targetPosition, Vector3f(0, 1, 0)); + //glMultMatrixf(rotationMatrix.GetInternalValues()); + float x = pos.x; + float y = pos.y; + float z = pos.z; + float width = 1.0f; + float height = 1.0f; + //Pt override les collisions.. a ce point la je sais pas quoi faire + + //Matrix4 mat4 = tran.GetMatrix(); + //mat4 VP = pMatrix * vMatrix; + //Vector3f CameraRight = Vector3f(mat4.Get11(), mat4.Get21(), mat4.Get31()); + //Vector3f CameraUp = Vector3f(mat4.Get12(), mat4.Get22(), mat4.Get32()); + + //Vector3f v1 = (m_position + CameraRight * 0.5 * width + CameraUp * -0.5 * width); + //Vector3f v2 = (m_position + CameraRight * 0.5 * width + CameraUp * 0.5 * width); + //Vector3f v4 = (m_position + CameraRight * -0.5 * width + CameraUp * -0.5 * width); + //Vector3f v3 = (m_position + CameraRight * -0.5 * width + CameraUp * 0.5 * width); + + //tran.ApplyTranslation(m_position); + float u, v, w, h; + //glDisable(GL_DEPTH_TEST); + shader.Use(); + textureAtlas.Bind(); + textureAtlas.TextureIndexToCoord(idx, u, v, w, h); + //glLoadIdentity(); + glLoadMatrixf(tran.GetMatrix().GetInternalValues()); + glBegin(GL_QUADS); + glTexCoord2f(u, v); glVertex3f(x - width / 2., y - height, z); //glVertex3f(v4.x, v4.y, v4.z);//glVertex3f(0, 50, 0); + glTexCoord2f(u + w, v); glVertex3f(x + width / 2., y - height, z); //glVertex3f(v3.x, v3.y, v3.z); //glVertex3f(50,50, 0); + glTexCoord2f(u + w, v + h); glVertex3f(x + width / 2., y, z); //glVertex3f(v2.x, v2.y, v2.z); //glVertex3f(50, 0, 0); + glTexCoord2f(u, v + h); glVertex3f(x - width / 2., y, z); //glVertex3f(v1.x, v1.y, v1.z);// glVertex3f(0, 0, 0); + glEnd(); + shader.Disable(); + //tran.ApplyTranslation(-m_position); + //glEnable(GL_DEPTH_TEST); +} \ No newline at end of file diff --git a/SQCSim2021/booster.h b/SQCSim2021/booster.h new file mode 100644 index 0000000..b9ff3b6 --- /dev/null +++ b/SQCSim2021/booster.h @@ -0,0 +1,14 @@ +#ifndef BOOSTER_H__ +#define BOOSTER_H__ +#include "define.h" +#include "textureatlas.h" +#include "shader.h" +#include "../SQCSim-common/vector3.h" +#include "../SQCSim-common/transformation.h" + + +class Booster { +public: + void RenderBillboard(const Vector3f pos, TextureAtlas& textureAtlas, TextureAtlas::TextureIndex idx, Shader& shader, Transformation tran); +}; +#endif diff --git a/SQCSim2021/define.h b/SQCSim2021/define.h index 9ce9bd2..4d67655 100644 --- a/SQCSim2021/define.h +++ b/SQCSim2021/define.h @@ -34,6 +34,6 @@ #define AUDIO_PATH "./media/audio/" #define CHUNK_PATH "./media/chunks/" #define MENU_ITEM_PATH "./media/menu_items/" -#define BOOSTER_TEXTURE_PATH "./media/textures/Booster" +#define BOOSTER_TEXTURE_PATH "./media/textures/Booster/" #endif // DEFINE_H__ diff --git a/SQCSim2021/engine.cpp b/SQCSim2021/engine.cpp index 6d3cc95..9c8b201 100644 --- a/SQCSim2021/engine.cpp +++ b/SQCSim2021/engine.cpp @@ -448,7 +448,7 @@ void Engine::LoadResource() { TextureAtlas::TextureIndex texIceIndex = m_textureAtlas.AddTexture(TEXTURE_PATH "metal2.png"); TextureAtlas::TextureIndex texGrassIndex = m_textureAtlas.AddTexture(TEXTURE_PATH "grass.png"); TextureAtlas::TextureIndex texMetalIndex = m_textureAtlas.AddTexture(TEXTURE_PATH "dirt.png"); - TextureAtlas::TextureIndex texBoostHeal = m_textureAtlas.AddTexture(BOOSTER_TEXTURE_PATH "BoosterMauve.png"); + TextureAtlas::TextureIndex texBoostHeal = m_textureAtlas.AddTexture(BOOSTER_TEXTURE_PATH "BoosterVert.png"); TextureAtlas::TextureIndex texBoostDmg = m_textureAtlas.AddTexture(BOOSTER_TEXTURE_PATH "BoosterRouge.png"); TextureAtlas::TextureIndex texBoostSpd = m_textureAtlas.AddTexture(BOOSTER_TEXTURE_PATH "BoosterBleu.png"); TextureAtlas::TextureIndex texBoostInv = m_textureAtlas.AddTexture(BOOSTER_TEXTURE_PATH "BoosterJaune.png"); @@ -1160,6 +1160,7 @@ void Engine::Render(float elapsedTime) { m_renderer.UpdateMesh(&m_world, m_player.GetPosition(), m_blockinfo); glClear(GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); m_remotePlayer.Render(m_textureAtlas, m_shader01, all, elapsedTime); + m_booster.RenderBillboard({ 120,20,120 }, m_textureAtlas, texBoostHeal, m_shader01, all); if (m_isSkybox) m_renderer.RenderWorld(&m_world, m_renderCount, m_player.GetPosition(), m_player.GetDirection(), all, m_shader01, m_textureAtlas); diff --git a/SQCSim2021/engine.h b/SQCSim2021/engine.h index 23b62da..f5754aa 100644 --- a/SQCSim2021/engine.h +++ b/SQCSim2021/engine.h @@ -23,6 +23,7 @@ #include "connector.h" #include "renderer.h" #include "remoteplayer.h" +#include "booster.h" class Engine : public OpenglContext { @@ -74,6 +75,7 @@ private: World m_world = World(); Renderer m_renderer = Renderer(); + Booster m_booster = Booster(); Texture m_textureCrosshair; Texture m_textureFont; @@ -85,6 +87,8 @@ private: Texture m_textureMultiText; Texture m_textureTitle; + TextureAtlas::TextureIndex texBoostHeal; + Skybox m_skybox; Audio m_audio = Audio(AUDIO_PATH "start.wav"); diff --git a/SQCSim2021/remoteplayer.h b/SQCSim2021/remoteplayer.h index 6050356..36eb275 100644 --- a/SQCSim2021/remoteplayer.h +++ b/SQCSim2021/remoteplayer.h @@ -8,7 +8,6 @@ #include "texture.h" #include "openglcontext.h" #include "vertexbuffer.h" -#include "texture.h" #include "../SQCSim-common/matrix4.h" class RemotePlayer : public Player { diff --git a/SQCSim2021/renderer.cpp b/SQCSim2021/renderer.cpp index d2b9b30..3e5fc97 100644 --- a/SQCSim2021/renderer.cpp +++ b/SQCSim2021/renderer.cpp @@ -1,4 +1,9 @@ #include "renderer.h" +#include +#include + +#include +#include Renderer::Renderer() { m_meshes.Reset(nullptr); @@ -131,7 +136,8 @@ void Renderer::RenderWorld(World* origin, int& rendercount, const Vector3f& play } shader.Disable(); glStencilFunc(GL_GREATER, 1, 0xFF); -}; +} + void Renderer::UpdateMesh(World* origin, const Vector3f& player, BlockInfo* blockinfo[BTYPE_LAST]) { int cx = player.x; @@ -238,6 +244,30 @@ void Renderer::UpdateMesh(World* origin, const Vector3f& player, BlockInfo* bloc } } +void Renderer::RenderBillboard(const Vector3f pos, TextureAtlas textureAtlas, TextureAtlas::TextureIndex idx, Shader& shader, Transformation tran) +{ + //float x = pos.x; + //float y = pos.y; + //float z = pos.z; + //float width = 1.0f; + //float height = 1.0f; + + //float u, v, w, h; + //shader.Use(); + //textureAtlas.Bind(); + //textureAtlas.TextureIndexToCoord(idx, u, v, w, h); + + //glLoadMatrixf(tran.GetMatrix().GetInternalValues()); + //glBegin(GL_QUADS); + //glTexCoord2f(u, v); glVertex3f(x - width / 2., y - height, z); //glVertex3f(v4.x, v4.y, v4.z);//glVertex3f(0, 50, 0); + //glTexCoord2f(u + w, v); glVertex3f(x + width / 2., y - height, z); //glVertex3f(v3.x, v3.y, v3.z); //glVertex3f(50,50, 0); + //glTexCoord2f(u + w, v + h); glVertex3f(x + width / 2., y, z); //glVertex3f(v2.x, v2.y, v2.z); //glVertex3f(50, 0, 0); + //glTexCoord2f(u, v + h); glVertex3f(x - width / 2., y, z); //glVertex3f(v1.x, v1.y, v1.z);// glVertex3f(0, 0, 0); + //glEnd(); + //shader.Disable(); +} + + void Renderer::RenderPlayer(Player* player, Transformation tran) const { } diff --git a/SQCSim2021/renderer.h b/SQCSim2021/renderer.h index 0289baf..5a13709 100644 --- a/SQCSim2021/renderer.h +++ b/SQCSim2021/renderer.h @@ -9,6 +9,9 @@ #include "textureatlas.h" #include "shader.h" #include "remoteplayer.h" +#include "openglcontext.h" +#include "vertexbuffer.h" +#include "../SQCSim-common/matrix4.h" class Renderer { private: @@ -16,6 +19,7 @@ private: TextureAtlas* m_playertext = nullptr; Shader* m_playershader = nullptr; + bool test = true; public: Renderer(); @@ -25,6 +29,8 @@ public: void UpdateMesh(World* origin, const Vector3f& player, BlockInfo* blockinfo[BTYPE_LAST]); + void RenderBillboard(const Vector3f pos, TextureAtlas textureAtlas, TextureAtlas::TextureIndex idx, Shader& shader, Transformation tran); + void RenderWorld(World* origin, int& rendercount, const Vector3f& player_pos, const Vector3f& player_dir, Transformation world, Shader& shader, TextureAtlas& atlas) const; void RenderPlayer(Player* player, Transformation tran) const; void RenderPlayer(RemotePlayer* rplayer, const Vector3f& player_pos, const Vector3f& player_dir) const;