#include "remoteplayer.h" #include #include #include #include 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)){ LoadTexture(m_texture_front, TEXTURE_PATH "AssetOtherPlayer/FinalPNGStanding/BlueFrontRight.png", false, false); } 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) { LoadTexture(m_texture_front, TEXTURE_PATH "AssetOtherPlayer/FinalPNGStanding/BlueFrontRight.png", false, false); } RemotePlayer::~RemotePlayer() { } void RemotePlayer::Init() { } void RemotePlayer::Feed(const netprot::Output out) { m_position = Vector3f(out.position); //current.position = out.position; //current.direction = out.direction; //current.states = out.states; //current.id = out.id; //if (current.position != previous.position) //{ // Vector3f positionDelta = current.position - previous.position; // m_position = current.position + positionDelta; // m_direction = current.direction; //} //if(current.direction != previous.direction) //{ // m_direction = current.direction; // current.direction = current.direction; //} //if (current.states.shooting) { // m_animstate = Anim::SHOOTING; //} //else if (current.states.jumping) { // m_animstate = Anim::JUMPING; //} //else if (current.states.dead) { // m_animstate = Anim::DEAD; //} //else if(current.states.powerup){ // m_animstate = Anim::POWERUP; //} //else if (current.states.still) { // m_animstate = Anim::STILL; //} //else if (current.states.running) { // m_animstate = Anim::RUNNING; //} //previous.direction = current.direction; //previous.position = current.position; //previous.states = current.states; //previous.id = current.id; //m_direction = current.direction; //m_position = current.position; } void RemotePlayer::Render(TextureAtlas& atlas, Shader& shader, Transformation tran, float elapsedTime) { float x = GetPosition().x; float y = GetPosition().y; float z = GetPosition().z; float width = 1.f; float height = 1.7f; //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(); atlas.Bind(); atlas.TextureIndexToCoord(0, u, v, w, h); //glLoadIdentity(); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBlendEquation(GL_FUNC_ADD); 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(); glBlendFunc(GL_CONSTANT_COLOR, GL_ONE_MINUS_CONSTANT_COLOR); glBlendEquation(GL_FUNC_SUBTRACT); glDisable(GL_BLEND); shader.Disable(); //tran.ApplyTranslation(-m_position); //glEnable(GL_DEPTH_TEST); } 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; }