diff --git a/SQCSim-common/netprotocol.h b/SQCSim-common/netprotocol.h index 432e31d..4a6046b 100644 --- a/SQCSim-common/netprotocol.h +++ b/SQCSim-common/netprotocol.h @@ -106,7 +106,11 @@ namespace netprot { uint64_t id = 0, tid = 0; PlayerInfo() {} - PlayerInfo(PlayerInfo* log) : id(log->id), tid(log->tid) { strcpy(log->name, name); } + PlayerInfo(PlayerInfo* log) : id(log->id), tid(log->tid) { + strcpy(log->name, name); + }; + PlayerInfo(int id, int tid, std::string strname) : id(id), tid(tid) { memcpy((void*)strname.c_str(), name, strname.length()); + } }; struct GameInfo { // cli <-> srv TCP event (before game start)/ once diff --git a/SQCSim-common/player.h b/SQCSim-common/player.h index eedbf74..facfc5f 100644 --- a/SQCSim-common/player.h +++ b/SQCSim-common/player.h @@ -5,6 +5,7 @@ #include "transformation.h" #include "vector3.h" + class World; class Player { @@ -50,6 +51,8 @@ protected: bool m_airborne; + + Vector3f InterpolatePosition(const Vector3f& vec1, const Vector3f& vec2, const Timestamp& tim1, const Timestamp& tim2, const Timestamp& now); }; diff --git a/SQCSim2021/engine.cpp b/SQCSim2021/engine.cpp index 1e7ea27..2b9190c 100644 --- a/SQCSim2021/engine.cpp +++ b/SQCSim2021/engine.cpp @@ -11,12 +11,13 @@ struct Notification { float displayStartTime = 0.0f; }; + // Use a queue to manage notifications //std::queue notificationQueue; // Use a vector to manage notifications std::vector notifications; -Engine::Engine() {} +Engine::Engine() : m_remotePlayer(&m_pinfo), m_pinfo(){} Engine::~Engine() { m_world.CleanUpWorld(m_renderCount, true); @@ -275,7 +276,8 @@ void Engine::DrawMenu() ShowCursor(); } -void Engine::Init() { +void Engine::Init() { + GLenum glewErr = glewInit(); @@ -372,6 +374,7 @@ void Engine::Init() { m_startTime = std::chrono::high_resolution_clock::now(); + // Gestion de souris. CenterMouse(); HideCursor(); @@ -397,6 +400,7 @@ void Engine::LoadResource() { LoadTexture(MenuQuitTexture, MENU_ITEM_PATH "BasicQuit.png"); LoadTexture(MenuOptionsTexture, MENU_ITEM_PATH "test.png"); LoadTexture(MenuStartTexture, MENU_ITEM_PATH "BasicPlay.png"); + TextureAtlas::TextureIndex texDirtIndex = m_textureAtlas.AddTexture(TEXTURE_PATH "metal3.png"); TextureAtlas::TextureIndex texIceIndex = m_textureAtlas.AddTexture(TEXTURE_PATH "metal2.png"); TextureAtlas::TextureIndex texGrassIndex = m_textureAtlas.AddTexture(TEXTURE_PATH "grass.png"); @@ -799,6 +803,7 @@ void Engine::DisplaySingleOrMultiplayerMenu() { glBindTexture(GL_TEXTURE_2D, 0); + // Single Player and Multiplayer button background quads float buttonWidthProportion = 0.4f; float buttonHeightProportion = 0.075f; @@ -1025,6 +1030,11 @@ void Engine::Render(float elapsedTime) { m_player.ApplyTransformation(skybox, false); // Version d'ApplyTransformation qui ne tient compte que de la rotation // (donc l'objet ne bouge pas relativement au joueur, ce qui est pratique pour une skybox!). + + + + m_remotePlayer.Render(m_textureAtlas, m_shader01, elapsedTime); + //m_remotePlayer.ApplyTransformation(all); if (m_mouseWU) bloc++; else if (m_mouseWD) bloc--; @@ -1080,7 +1090,7 @@ void Engine::Render(float elapsedTime) { } } - m_renderer.RenderWorld(&m_world, m_renderCount, m_player.GetPosition(), m_player.GetDirection(), all, m_shader01, m_textureAtlas); + //m_renderer.RenderWorld(&m_world, m_renderCount, m_player.GetPosition(), m_player.GetDirection(), all, m_shader01, m_textureAtlas); m_world.Update(m_bullets, m_player.GetPosition(), m_blockinfo); m_renderer.UpdateMesh(&m_world, m_player.GetPosition(), m_blockinfo); diff --git a/SQCSim2021/engine.h b/SQCSim2021/engine.h index 41b8a4f..bf10f58 100644 --- a/SQCSim2021/engine.h +++ b/SQCSim2021/engine.h @@ -23,6 +23,7 @@ #include "renderer.h" #include "remoteplayer.h" + class Engine : public OpenglContext { public: Engine(); @@ -144,7 +145,8 @@ private: float m_mousemy = 0; bool m_networkgame = false; - + netprot::PlayerInfo m_pinfo; + RemotePlayer m_remotePlayer; std::string m_messageNotification = ""; }; diff --git a/SQCSim2021/remoteplayer.cpp b/SQCSim2021/remoteplayer.cpp index 7769ddc..31d396c 100644 --- a/SQCSim2021/remoteplayer.cpp +++ b/SQCSim2021/remoteplayer.cpp @@ -1,10 +1,26 @@ #include "remoteplayer.h" #include #include +#include "texture.h" +#include +#include -RemotePlayer::RemotePlayer(netprot::PlayerInfo pinfo) : Player(Vector3f(0, 0, 0), 0, 0), m_pinfo(pinfo), m_aminacc(0.0f), m_animstate(Anim::STILL), m_team_id(0), current(), previous() { +RemotePlayer::RemotePlayer(netprot::PlayerInfo pinfo) : m_pinfo(pinfo), m_aminacc(0.0f), m_animstate(Anim::STILL), m_team_id(0), current(), previous(), m_texture_front(), Player(Vector3f(0, 0, 0), 0, 0) { + + LoadTexture(m_texture_front, TEXTURE_PATH "AssetOtherPlayer/FinalPNGStanding/BlueFrontRight.png", false, false); + +} + + +//RemotePlayer::RemotePlayer() +//{ +// +//} + +RemotePlayer::~RemotePlayer() +{ } void RemotePlayer::Init() { @@ -67,4 +83,31 @@ void RemotePlayer::Feed(const netprot::Output out) { -} \ No newline at end of file +} + +void RemotePlayer::Render(TextureAtlas& atlas, Shader& shader, float elapsedTime) +{ + + m_texture_front.Bind(); + glBegin(GL_QUADS); + glTexCoord2f(0, 0); glVertex2f(0, 500); + glTexCoord2f(1, 0); glVertex2f(500, 500); + glTexCoord2f(1, 1); glVertex2f(500, 0); + glTexCoord2f(0, 1); glVertex2f(0, 0); + glEnd(); + +} + +bool RemotePlayer::LoadTexture(Texture& texture, const std::string& filename, bool useMipmaps, bool stopOnError) +{ + texture.Load(filename, useMipmaps); + if (!texture.IsValid()) { + std::cerr << "Unable to load texture (" << filename << ")" << std::endl; + if (stopOnError) + return false; + + return false; + } + + return true; +} diff --git a/SQCSim2021/remoteplayer.h b/SQCSim2021/remoteplayer.h index 556c7aa..40d4ed6 100644 --- a/SQCSim2021/remoteplayer.h +++ b/SQCSim2021/remoteplayer.h @@ -5,15 +5,24 @@ #include "define.h" #include "textureatlas.h" #include "shader.h" +#include "texture.h" +#include "openglcontext.h" class RemotePlayer : public Player { public: enum Anim: uint8_t { STILL = 1, RUNNING = 2, JUMPING = 4, SHOOTING = 8, POWERUP = 16, DEAD = 32 }; + + /*RemotePlayer();*/ RemotePlayer(netprot::PlayerInfo pinfo); + ~RemotePlayer(); + + void Init(); void Feed(const netprot::Output out); + void Render(TextureAtlas& atlas, Shader& shader, float elapsedTime); + bool LoadTexture(Texture& texture, const std::string& filename, bool useMipmaps, bool stopOnError); private: netprot::Output current, previous; @@ -22,6 +31,8 @@ private: float m_aminacc; Anim m_animstate; uint64_t m_team_id; + Texture m_texture_front; + }; #endif \ No newline at end of file