|
From: julien r. <jul...@us...> - 2005-12-11 22:16:09
|
Update of /cvsroot/epfl/game In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26912 Modified Files: player.cc Log Message: bugfix deplacements Index: player.cc =================================================================== RCS file: /cvsroot/epfl/game/player.cc,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** player.cc 7 Dec 2005 22:23:51 -0000 1.2 --- player.cc 11 Dec 2005 22:16:00 -0000 1.3 *************** *** 21,187 **** ----------------------------------------------------------------------------- */ ! #include "player.h" ! #include <iostream> ! ! tgPlayer::tgPlayer (tgIWorldManager* pWorldManager, tgIModelManager* pModelManager, const tgVector3& position) ! { ! totY = totX = 0; ! bActive = false; ! ! for(int i=0; i<6; i++) ! bMoveDirs[i] = false; ! rView.vOrigin.Set(-50,0,-100); ! tgQuaternion q; ! q.GetMatrix(rView.matrix); ! ! //chargement du modèle ! pModel = pModelManager->GetInstance("imp"); ! pModel->SetAnimation("idle", -1, false, false); ! pModel->SetAnimation("evade_left", 1, false, false); ! pModel->SetAnimation("range1", 0, false, false); ! pModel->SetAnimation("sight1", 0, false, false); ! ! tgAABoundingBox* box = new tgAABoundingBox(tgVector3(-30,-30,-30), tgVector3(30,30,30)); ! box->SetPosition(position); ! //tgBoundingSphere* box = new tgBoundingSphere(position, 30); ! pModel->SetBoundingVolume(box); ! ! pModel->SetPosition(position); ! ! ! ! pWorldManager->AddModel(pModel); ! } ! ! tgPlayer::~tgPlayer () ! { ! delete pModel; ! } ! ! void tgPlayer::SetActive () ! { ! pModel->SetVisible(false); ! bActive = true; ! } ! ! void tgPlayer::SetInactive () ! { ! pModel->SetVisible(true); ! bActive = false; ! } ! ! void tgPlayer::Think (float eTime) ! { ! //FIXME: sans les 2 lignes suivantes, la caméra ne suit pas les mouvemnts du perso si il est déplacé par la physique ! // avec, cela pose de gros problèmes dans les déplacements... ! rView.vOrigin = pModel->GetPosition(); ! //rView.qRotation = pModel->GetRotation(); ! ! ! #define SPEED 2 ! if (bMoveDirs[FORWARD]) ! rView.vOrigin -= rView.qRotation.GetZAxis()*SPEED; ! if (bMoveDirs[BACKWARD]) ! rView.vOrigin += rView.qRotation.GetZAxis()*SPEED; ! if (bMoveDirs[STRAFELEFT]) ! rView.vOrigin -= rView.qRotation.GetXAxis()*SPEED; ! if (bMoveDirs[STRAFERIGHT]) ! rView.vOrigin += rView.qRotation.GetXAxis()*SPEED; ! ! pModel->SetPosition(rView.vOrigin); ! #if 0 ! float angle_x, angle_y, angle_z; ! //Matrix to euler conversion ! { ! float matrix[16]; ! rView.qRotation.GetMatrix(matrix); ! angle_y = -asin(matrix[2]); ! float C = cos(angle_y); ! angle_y *= RADTODEG; ! ! if (fabs(C) > 0.005) { ! float tr_x = matrix[10]/C; ! float tr_y = -matrix[6]/C; ! ! angle_x = atan2(tr_y, tr_x)*RADTODEG; ! ! tr_x = matrix[0]/C; ! tr_y = -matrix[1]/C; ! ! angle_z = atan2(tr_y, tr_x)*RADTODEG; ! } else { ! angle_x = 0; ! float tr_x = matrix[5]; ! float tr_y = matrix[4]; ! angle_z = atan2(tr_y, tr_x)*RADTODEG; ! } ! } ! ! cout << angle_x << "\t" << angle_y << "\t" << angle_z << endl; ! #endif ! pModel->SetRotation(rView.qRotation*tgQuaternion(90, tgVector3(0,1,0))); ! //pModel->SetRotation(tgQuaternion(angle_y, tgVector3(0,1,0))); ! ! ! ! ! //std::cout << rView.vOrigin.x << ":" << rView.vOrigin.y << ":" << rView.vOrigin.z << std::endl; ! } ! ! void tgPlayer::MouseMotion (int rx, int ry) ! { ! float fSensivity = 0.2f; ! ! totX -= ((float)ry)*fSensivity; ! totY -= ((float)rx)*fSensivity; ! ! tgQuaternion qY = tgQuaternion(totY, tgVector3(0,1,0)); ! tgQuaternion qX = tgQuaternion(totX, tgVector3(1,0,0)); ! tgQuaternion q = qY*qX; ! q.Normalize(); ! rView.qRotation = q; ! q = q.Conjugate(); ! ! q.GetMatrix(rView.matrix); ! ! } ! ! void tgPlayer::MoveForward (int state) ! { ! if (state) ! bMoveDirs[FORWARD] = true; ! else ! bMoveDirs[FORWARD] = false; ! //rView.vOrigin.z -= 10; ! //pModel->SetAnimation("walk", 1, false, true); ! } ! ! void tgPlayer::MoveBackward (int state) ! { ! if (state) ! bMoveDirs[BACKWARD] = true; ! else ! bMoveDirs[BACKWARD] = false; ! //rView.vOrigin.z += 10; ! //pModel->SetAnimation("crouch", 1, true, false); ! } ! ! void tgPlayer::StrafeLeft (int state) ! { ! if (state) ! bMoveDirs[STRAFELEFT] = true; ! else ! bMoveDirs[STRAFELEFT] = false; ! //pModel->SetAnimation("range1", 0, false, true); ! //rView.vOrigin.x -= 10; ! } ! ! void tgPlayer::StrafeRight (int state) ! { ! if (state) ! bMoveDirs[STRAFERIGHT] = true; ! else ! bMoveDirs[STRAFERIGHT] = false; ! //pModel->SetAnimation("sight1", 0, true, false); ! //rView.vOrigin.x += 10; ! } --- 21,187 ---- ----------------------------------------------------------------------------- */ ! #include "player.h" ! #include <iostream> ! ! tgPlayer::tgPlayer (tgIWorldManager* pWorldManager, tgIModelManager* pModelManager, const tgVector3& position) ! { ! totY = totX = 0; ! bActive = false; ! ! for(int i=0; i<6; i++) ! bMoveDirs[i] = false; ! rView.vOrigin.Set(-50,0,-100); ! tgQuaternion q; ! q.GetMatrix(rView.matrix); ! ! //chargement du modèle ! pModel = pModelManager->GetInstance("imp"); ! pModel->SetAnimation("idle", -1, false, false); ! pModel->SetAnimation("evade_left", 1, false, false); ! pModel->SetAnimation("range1", 0, false, false); ! pModel->SetAnimation("sight1", 0, false, false); ! ! tgAABoundingBox* box = new tgAABoundingBox(tgVector3(-30,-30,-30), tgVector3(30,30,30)); ! box->SetPosition(position); ! //tgBoundingSphere* box = new tgBoundingSphere(position, 30); ! pModel->SetBoundingVolume(box); ! ! pModel->SetPosition(position); ! ! ! ! pWorldManager->AddModel(pModel); ! } ! ! tgPlayer::~tgPlayer () ! { ! delete pModel; ! } ! ! void tgPlayer::SetActive () ! { ! pModel->SetVisible(false); ! bActive = true; ! } ! ! void tgPlayer::SetInactive () ! { ! pModel->SetVisible(true); ! bActive = false; ! } ! ! void tgPlayer::Think (float eTime) ! { ! //FIXME: sans les 2 lignes suivantes, la caméra ne suit pas les mouvemnts du perso si il est déplacé par la physique ! // avec, cela pose de gros problèmes dans les déplacements... ! rView.vOrigin = pModel->GetPosition(); ! //rView.qRotation = pModel->GetRotation(); ! ! ! #define SPEED 200 ! if (bMoveDirs[FORWARD]) ! rView.vOrigin -= rView.qRotation.GetZAxis()*SPEED*eTime; ! if (bMoveDirs[BACKWARD]) ! rView.vOrigin += rView.qRotation.GetZAxis()*SPEED*eTime; ! if (bMoveDirs[STRAFELEFT]) ! rView.vOrigin -= rView.qRotation.GetXAxis()*SPEED*eTime; ! if (bMoveDirs[STRAFERIGHT]) ! rView.vOrigin += rView.qRotation.GetXAxis()*SPEED*eTime; ! ! pModel->SetPosition(rView.vOrigin); ! #if 0 ! float angle_x, angle_y, angle_z; ! //Matrix to euler conversion ! { ! float matrix[16]; ! rView.qRotation.GetMatrix(matrix); ! angle_y = -asin(matrix[2]); ! float C = cos(angle_y); ! angle_y *= RADTODEG; ! ! if (fabs(C) > 0.005) { ! float tr_x = matrix[10]/C; ! float tr_y = -matrix[6]/C; ! ! angle_x = atan2(tr_y, tr_x)*RADTODEG; ! ! tr_x = matrix[0]/C; ! tr_y = -matrix[1]/C; ! ! angle_z = atan2(tr_y, tr_x)*RADTODEG; ! } else { ! angle_x = 0; ! float tr_x = matrix[5]; ! float tr_y = matrix[4]; ! angle_z = atan2(tr_y, tr_x)*RADTODEG; ! } ! } ! ! cout << angle_x << "\t" << angle_y << "\t" << angle_z << endl; ! #endif ! pModel->SetRotation(rView.qRotation*tgQuaternion(90, tgVector3(0,1,0))); ! //pModel->SetRotation(tgQuaternion(angle_y, tgVector3(0,1,0))); ! ! ! ! ! //std::cout << rView.vOrigin.x << ":" << rView.vOrigin.y << ":" << rView.vOrigin.z << std::endl; ! } ! ! void tgPlayer::MouseMotion (int rx, int ry) ! { ! float fSensivity = 0.2f; ! ! totX -= ((float)ry)*fSensivity; ! totY -= ((float)rx)*fSensivity; ! ! tgQuaternion qY = tgQuaternion(totY, tgVector3(0,1,0)); ! tgQuaternion qX = tgQuaternion(totX, tgVector3(1,0,0)); ! tgQuaternion q = qY*qX; ! q.Normalize(); ! rView.qRotation = q; ! q = q.Conjugate(); ! ! q.GetMatrix(rView.matrix); ! ! } ! ! void tgPlayer::MoveForward (int state) ! { ! if (state) ! bMoveDirs[FORWARD] = true; ! else ! bMoveDirs[FORWARD] = false; ! //rView.vOrigin.z -= 10; ! //pModel->SetAnimation("walk", 1, false, true); ! } ! ! void tgPlayer::MoveBackward (int state) ! { ! if (state) ! bMoveDirs[BACKWARD] = true; ! else ! bMoveDirs[BACKWARD] = false; ! //rView.vOrigin.z += 10; ! //pModel->SetAnimation("crouch", 1, true, false); ! } ! ! void tgPlayer::StrafeLeft (int state) ! { ! if (state) ! bMoveDirs[STRAFELEFT] = true; ! else ! bMoveDirs[STRAFELEFT] = false; ! //pModel->SetAnimation("range1", 0, false, true); ! //rView.vOrigin.x -= 10; ! } ! ! void tgPlayer::StrafeRight (int state) ! { ! if (state) ! bMoveDirs[STRAFERIGHT] = true; ! else ! bMoveDirs[STRAFERIGHT] = false; ! //pModel->SetAnimation("sight1", 0, true, false); ! //rView.vOrigin.x += 10; ! } |