diff --git a/SQCSim2021/remoteplayer.cpp b/SQCSim2021/remoteplayer.cpp index 2ee8e38..f896d4f 100644 --- a/SQCSim2021/remoteplayer.cpp +++ b/SQCSim2021/remoteplayer.cpp @@ -10,14 +10,10 @@ 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)){ - - } RemotePlayer::RemotePlayer(netprot::PlayerInfo pinfo, const Vector3f& pos) : m_pinfo(pinfo), m_aminacc(0.0f), m_animstate(Anim::STILL), m_team_id(0), current(), previous(), m_texture_front(), Player(pos) { - - } @@ -98,11 +94,15 @@ void RemotePlayer::Render(TextureAtlas& atlas, Shader& shader, Transformation tr Vector3f DiffCam = GetPosition() - camera.GetPosition(); Vector3f UpCam = Vector3f(0.f, 1.f, 0.f); + Vector3f CrossA = DiffCam.Cross(UpCam); Vector3f CrossB = DiffCam.Cross(CrossA); + CrossA.Normalize(); CrossB.Normalize(); + Vector3f playerPosition = GetPosition() + Vector3f(0.f, -.75f, 0.f); + Vector3f v2 = (playerPosition + CrossA * 0.5 * width + CrossB * 0.5 * height); Vector3f v1 = (playerPosition - CrossA * 0.5 * width + CrossB * 0.5 * height); Vector3f v3 = (playerPosition + CrossA * 0.5 * width - CrossB * 0.5 * height); @@ -110,6 +110,7 @@ void RemotePlayer::Render(TextureAtlas& atlas, Shader& shader, Transformation tr Vector3f angleRemote = GetDirection(); Vector3f angleCam = (v1 - v2).Cross(v3 - v2); + angleCam.y = 0; angleRemote.y = 0; angleCam.Normalize(); @@ -122,6 +123,7 @@ void RemotePlayer::Render(TextureAtlas& atlas, Shader& shader, Transformation tr static float time = 0.f; static bool Shooting = false; + bool isLeft = side.y > 0; time += elapsedTime; if (time >= 200) @@ -129,25 +131,21 @@ void RemotePlayer::Render(TextureAtlas& atlas, Shader& shader, Transformation tr time -= 200; if (!current.states.shooting) Shooting = false; - else { + else Shooting = !Shooting; - } - } - bool isLeft = side.y > 0; - if (angle >= 0.75) //Face //side positif - { - + if (angle >= 0.75) //Face - side positif + { if(current.states.shooting){ if (Shooting) index = 17; else index = 9; } - else if (current.states.jumpshot) { + else if (current.states.jumping && current.states.shooting) { if (Shooting) index = 41; else @@ -158,20 +156,16 @@ void RemotePlayer::Render(TextureAtlas& atlas, Shader& shader, Transformation tr else if (current.states.running && current.states.still) index = 0; - - } else if (angle >= 0.25 && isLeft) //Frontleft { - - if (current.states.shooting) { if (Shooting) index = 18; else index = 10; } - else if (current.states.jumpshot) { + else if (current.states.jumping && current.states.shooting) { if (Shooting) index = 42; else @@ -185,15 +179,13 @@ void RemotePlayer::Render(TextureAtlas& atlas, Shader& shader, Transformation tr } else if (angle >= -0.25 && isLeft) //ProfileLeft { - - if (current.states.shooting) { if (Shooting) index = 20; else index = 12; } - else if (current.states.jumpshot) { + else if (current.states.jumping && current.states.shooting) { if (Shooting) index = 44; else @@ -207,15 +199,13 @@ void RemotePlayer::Render(TextureAtlas& atlas, Shader& shader, Transformation tr } else if (angle >= -0.75 && isLeft) //BackLeft { - - if (current.states.shooting) { if (Shooting) index = 22; else index = 14; } - else if (current.states.jumpshot) { + else if (current.states.jumping && current.states.shooting) { if (Shooting) index = 46; else @@ -226,17 +216,15 @@ void RemotePlayer::Render(TextureAtlas& atlas, Shader& shader, Transformation tr else if (current.states.running && current.states.still) index = 5; } - else if (angle < -0.75) //Dos //side négatif + else if (angle < -0.75) //Dos - side négatif { - - if (current.states.shooting) { if (Shooting) index = 24; else index = 16; } - else if (current.states.jumpshot) { + else if (current.states.jumping && current.states.shooting) { if (Shooting) index = 48; else @@ -250,15 +238,13 @@ void RemotePlayer::Render(TextureAtlas& atlas, Shader& shader, Transformation tr } else if (angle >= 0.25 && !isLeft) //FrontRight { - - if (current.states.shooting) { if (Shooting) index = 19; else index = 11; } - else if (current.states.jumpshot) { + else if (current.states.jumping && current.states.shooting) { if (Shooting) index = 43; else @@ -272,15 +258,13 @@ void RemotePlayer::Render(TextureAtlas& atlas, Shader& shader, Transformation tr } else if (angle >= -0.25 && !isLeft) //ProfileRight { - - if (current.states.shooting) { if (Shooting) index = 21; else index = 13; } - else if (current.states.jumpshot) { + else if (current.states.jumping && current.states.shooting) { if (Shooting) index = 45; else @@ -294,15 +278,13 @@ void RemotePlayer::Render(TextureAtlas& atlas, Shader& shader, Transformation tr } else if (angle >= -0.75 && !isLeft) //BackRight { - - if (current.states.shooting) { if (Shooting) index = 23; else index = 15; } - else if (current.states.jumpshot) { + else if (current.states.jumping && current.states.shooting) { if (Shooting) index = 47; else