void CNetworkPlayer::UpdateAim( bool bAiming ) { DEBUG_TRACE("CNetworkPlayer::UpdateAim"); // Is the playerped not valid? if( !m_pPlayerPed ) return; // Should we start aiming? if( bAiming && !IsAiming() ) { // Terminate the old aim object if it's valid if ( m_pAimObject ) m_pAimObject->Terminate (); // Delete the old aim object SAFE_DELETE( m_pAimObject ); // Create the initial aim sync object if needed m_pAimObject = new CM2SyncObject( m_pPlayerPed->AimAt( GetLookAt() ) ); // Mark as aiming SetAiming( true ); } // Should we stop aiming? else if( !bAiming && IsAiming() ) { // Terminate the old aim object if it's valid if ( m_pAimObject ) m_pAimObject->Terminate (); // Delete the old aim sync object SAFE_DELETE( m_pAimObject ); // Mark as not aiming SetAiming( false ); } // Should we update the aim position else if( bAiming && IsAiming() ) { // Is the aim sync object valid? if( m_pAimObject && !m_pAimObject->IsDone() ) { // Update the aim position m_pAimObject->SetTarget( GetLookAt(), eTargetType::E_TYPE_AIM ); } else if( m_pAimObject && m_pAimObject->IsDone() ) { // Mark as not aiming to rebuild the object next pulse SetAiming( false ); } } }
void CObject::MoveForward(const float fDistance) { D3DXVECTOR3 d3dxvPosition = *GetPosition(); D3DXVECTOR3 d3dxvLookAt = *GetLookAt(); d3dxvPosition += fDistance * d3dxvLookAt; MoveAbsolute(&d3dxvPosition); }
void physGrapplePoint(){ lookAt = GetLookAt(); glm::vec3 at = glm::vec3(lookAt.x,lookAt.y,lookAt.z); glm::vec3 targ = glm::vec3(tmp.getX(),tmp.getY(),tmp.getZ()); glm::vec3 loc = targ-at; float dist = sqrt(loc.x*loc.x+loc.y*loc.y+loc.z*loc.z); targ-=at; targ*=10; // dist/=3; dist = dist>1?dist:1; dist = targ.y>0?dist:dist/1.4; // player->setLinearVelocity(btVector3(targ.x,targ.y/dist,targ.z)); if(dist<1.1 && !hold){ if(flip==0){ flip = 1; //printf("pls rotate camera to normal of building\n"); // rotateCamera(pi); } playerJump = 1; playerGrappleActive=0; //setPlayerSpeed(0,10,0); //printf("reset\n"); } }
bool physGrapple(float lx,float ly,float lz){ bool ret = false; flip = 0; dir = glm::normalize(glm::vec3(-lx,ly,-lz)); //printf("grapple in dir %f %f %f\n",dir.x,dir.y,dir.z); //printf("looks at is %f %f %f\n",lookAt.x,lookAt.y,lookAt.z); /* btCollisionWorld::ClosestRayResultCallback RayCallback(btVector3(lookAt.x+.0*dir.x,lookAt.y-.0*dir.y,lookAt.z+.0*dir.z), btVector3(lookAt.x+50*dir.x,lookAt.y-50*dir.y,lookAt.z+50*dir.z)); dynamicsWorld->rayTest(btVector3(lookAt.x+.0*dir.x,lookAt.y-.0*dir.y,lookAt.z+.0*dir.z), btVector3(lookAt.x+50*dir.x,lookAt.y-50*dir.y,lookAt.z+50*dir.z), RayCallback); */ ////////////////////////////// glm:: vec3 ggaze = GetLookAt() - GetEye(); glm::vec3 gw = ggaze/magnitude(ggaze); gw = glm::vec3(-1.0 * gw.x, -1.0 * gw.y, -1.0 * gw.z); glm::vec3 gu = glm::cross(GetUp(), gw)/magnitude(glm::cross(GetUp(), gw)); gu *= 2; lookAt += glm::vec3(gu.x, 0, gu.z); /////////////////////////////// btCollisionWorld::ClosestRayResultCallback RayCallback(btVector3(lookAt.x+1.6*dir.x,lookAt.y-1.6*dir.y,lookAt.z+1.6*dir.z), btVector3(lookAt.x+75*dir.x,lookAt.y-75*dir.y,lookAt.z+75*dir.z)); dynamicsWorld->rayTest(btVector3(lookAt.x+1.6*dir.x,lookAt.y-1.6*dir.y,lookAt.z+1.6*dir.z), btVector3(lookAt.x+75*dir.x,lookAt.y-75*dir.y,lookAt.z+75*dir.z), RayCallback); //player->setLinearVelocity(btVector3(dir.x*50,dir.y*50,dir.z*50)); btTransform plPos; player->getMotionState()->getWorldTransform(plPos); if(RayCallback.hasHit()&& !playerGrappleActive && RayCallback.m_hitPointWorld.distance(plPos.getOrigin())>1.8) { playerJump=0; //End = RayCallback.m_hitPointWorld; //Normal = RayCallback.m_hitNormalWorld; //printf("hit!\n"); btVector3 go=RayCallback.m_hitNormalWorld*-5+player->getLinearVelocity(); if (go.length()>10)(go/go.length())*10; //player->setLinearVelocity(go); //printf("%f %f %f on hit norm",RayCallback.m_hitNormalWorld.getX(),RayCallback.m_hitNormalWorld.getY(),RayCallback.m_hitNormalWorld.getZ()); tmp = RayCallback.m_hitPointWorld; // Do some clever stuff here if(tmp.getY()>1){ playerGrappleActive =1; //SFX HERE //Sound s = Sound(); //s.playSFX("../Assets/Sounds/HookShot.mp3"); //printf("%f %f %f - player loc; %f %f %f grapple loc\n", physGetPlayerX(), physGetPlayerY(), physGetPlayerZ(), grapplingHookLocation().x, grapplingHookLocation().y, grapplingHookLocation().z); //printf("%f %f %f grapple sfx distance\n", abs(grapplingHookLocation().x - physGetPlayerX()), abs(grapplingHookLocation().y - physGetPlayerY()), abs(grapplingHookLocation().z - physGetPlayerZ())); musicPlayer.BGM.play3DSFX("../Assets/Sounds/HookShot.mp3", physGetPlayerX(), physGetPlayerY(), physGetPlayerZ(), grapplingHookLocation().x, grapplingHookLocation().y, grapplingHookLocation().z); ret = true; } } lookAt -= glm::vec3(gu.x, 0, gu.z); return ret; }
void CGameObject::MoveForward(float fDistance) { //게임 객체를 로컬 z-축 방향으로 이동한다. D3DXVECTOR3 d3dxvPosition = GetPosition(); D3DXVECTOR3 d3dxvLookAt = GetLookAt(); d3dxvPosition += fDistance * d3dxvLookAt; CGameObject::SetPosition(d3dxvPosition); }
//Draws the currently selected entity void drawSelectedObject() { //Only draw if an entity is selected if(isEntitySelected() == true) { //Get selected entity Entity entityTemp = getSelectedEntity(); //Update position to lookAtPoint entityTemp.position = GetLookAt(); //Place at that point PlaceModel(*entityTemp.mesh, entityTemp.position.x, entityTemp.position.y, entityTemp.position.z, entityTemp.scale.x, entityTemp.scale.y, entityTemp.scale.z, entityTemp.angle); } }
void CObject::MoveRelative(const D3DXVECTOR3 *d3dxVec) { D3DXVECTOR3 d3dxvPosition = *GetPosition(); D3DXVECTOR3 d3dxvRight = *GetRight(); D3DXVECTOR3 d3dxvUp = *GetUp(); D3DXVECTOR3 d3dxvLookAt = *GetLookAt(); d3dxvPosition += d3dxVec->x * d3dxvRight; d3dxvPosition += d3dxVec->y * d3dxvUp; d3dxvPosition += d3dxVec->z * d3dxvLookAt; MoveAbsolute(&d3dxvPosition); }
void CObject::MoveRelative(const float fx, const float fy, const float fz) { D3DXVECTOR3 d3dxvPosition = *GetPosition(); D3DXVECTOR3 d3dxvRight = *GetRight(); D3DXVECTOR3 d3dxvUp = *GetUp(); D3DXVECTOR3 d3dxvLookAt = *GetLookAt(); d3dxvPosition += fx * d3dxvRight; d3dxvPosition += fy * d3dxvUp; d3dxvPosition += fz * d3dxvLookAt; MoveAbsolute(&d3dxvPosition); }
void glfwEditGetCursorPos(GLFWwindow *window, double xpos, double ypos) { //printf("%f %f\n", xpos, g_height - ypos); lastCurPos = glm::vec2(xpos, g_height - ypos - 1); //If in GUI Selection, disable pitch and yaw if(eKeysPressed['G'] == 0) { if(xpos > g_width || xpos < 0 || ypos < 0 || ypos > g_height) { return; } //Get rid of if unneeded egaze = GetLookAt() - GetEye(); ew = glm::vec3(-1.0 * ew.x, -1.0 * ew.y, -1.0 * ew.z); ew = glm::normalize(ew); eu = glm::cross(GetUp(), ew)/magnitude(glm::cross(GetUp(), ew)); eu = glm::normalize(eu); eendX = xpos; eendY = g_height-ypos-1; float diff; //Calculate change in X if(estartX < eendX) { diff = eendX - estartX; ebeta = incrementYaw((diff * M_PI)/g_width); } else if(estartX > eendX){ diff = estartX - eendX; ebeta = incrementYaw((-diff * M_PI)/g_width); } //Calculate change in Y if(eendY > estartY && ealpha <= 0.98) { diff = eendY - estartY; ealpha = incrementPitch((diff * M_PI)/g_width); } else if(eendY < estartY && ealpha >= -0.98) { diff = estartY - eendY; ealpha = incrementPitch(-(diff * M_PI)/g_width); } estartX = g_width/2.0;// = endX; estartY = g_height/2.0-1;// endY; } }
/*! * * @param angle * @param axis */ void Camera::RotateByQuat(const float angle, const glm::vec3 axis) { glm::vec3 view = GetLookAt(); glm::vec3 up(0.0f, 1.0f, 0.0f); glm::quat quatView(0, view); glm::quat quatViewResult = glm::rotate(quatView, angle, axis); view.x = quatViewResult.x; view.y = quatViewResult.y; view.z = quatViewResult.z; view = glm::normalize(view); glm::vec3 side = glm::cross(up, view); side = glm::normalize(side); up = glm::cross(view, side); up = glm::normalize(up); SetOrientation(side, up, view); }
int grappleInRange(float lx,float ly,float lz){ //glm::vec3 tempLookAt; dir = glm::normalize(glm::vec3(-lx,ly,-lz)); glm:: vec3 ggaze = GetLookAt() - GetEye(); glm::vec3 gw = ggaze/magnitude(ggaze); gw = glm::vec3(-1.0 * gw.x, -1.0 * gw.y, -1.0 * gw.z); glm::vec3 gu = glm::cross(GetUp(), gw)/magnitude(glm::cross(GetUp(), gw)); gu *= 2; lookAt += glm::vec3(gu.x, 0, gu.z); btCollisionWorld::ClosestRayResultCallback RayCallback(btVector3(lookAt.x+1.6*dir.x,lookAt.y-1.6*dir.y,lookAt.z+1.6*dir.z), btVector3(lookAt.x+75*dir.x,lookAt.y-75*dir.y,lookAt.z+75*dir.z)); dynamicsWorld->rayTest(btVector3(lookAt.x+1.6*dir.x,lookAt.y-1.6*dir.y,lookAt.z+1.6*dir.z), btVector3(lookAt.x+75*dir.x,lookAt.y-75*dir.y,lookAt.z+75*dir.z), RayCallback); lookAt -= glm::vec3(gu.x, 0, gu.z); // int ret = //inRange(50,75,glm::lookAt(playerPoss(),glm::vec3(tempLookAt.x+75*dir.x,tempLookAt.y+75*dir.y,tempLookAt.z+75*dir.z),glm::vec3(0,1,0))); //printf("grapple is %d range\n",RayCallback.hasHit()); //if(RayCallback.hasHit()) printf("%f %f %f",RayCallback.m_hitPointWorld.getX(),RayCallback.m_hitPointWorld.getY(),RayCallback.m_hitPointWorld.getZ()); return RayCallback.hasHit(); }
/* Main display function */ void glfwDraw (GLFWwindow *window) { ModelTrans.loadIdentity(); SetModelStat(); safe_glEnableVertexAttribArray(h_aPosition); glBindBuffer(GL_ARRAY_BUFFER, GrndBuffObj); safe_glVertexAttribPointer(h_aPosition, 3, GL_FLOAT, GL_FALSE, 0, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, GIndxBuffObj); SetMaterial(0); safe_glEnableVertexAttribArray(h_aNormal); glBindBuffer(GL_ARRAY_BUFFER, GNBuffObj); safe_glVertexAttribPointer(h_aNormal, 3, GL_FLOAT, GL_FALSE, 0, 0); /* draw!*/ glDrawElements(GL_TRIANGLES, g_GiboLen, GL_UNSIGNED_SHORT, 0); safe_glDisableVertexAttribArray(h_aPosition); //DRAW THE DANCING CYLINDER HERE!! btTransform pla; PlaceModel(playerMesh, GetLookAt().x, GetLookAt().y - 1, GetLookAt().z, .25, .1, .25, 1); //END OF DANCING CYLINDER CODE HERE!! SetMaterial(2); drawSelectedObject(); drawEntities(); //Draw Cubes, ?????????? SetupCube(plsRndr().getX(),plsRndr().getY(),plsRndr().getZ(),5,60,1,1,1); for(float i=.05; i<1; i+=.0075) { srand(physGetPlayerX()); float x = physGetPlayerX()*(1-i)+grapplingHookLocation().x*i; float y = physGetPlayerY()*(1-i)*(1-i)+grapplingHookLocation().y*i*i; float z = physGetPlayerZ()*(1-i)+grapplingHookLocation().z*i; SetupCube(x,y,z,5,rand()/300.0,.15,.15,.15); } SetMaterial(2); //draw phys cubes vector<btRigidBody*> loopable = getVecList(); srand(0); for(int i = 0; i<loopable.size(); i++) { btTransform trans; loopable[i]->getMotionState()->getWorldTransform(trans); //printf("actual is %f %f %f\n",trans.getOrigin().getX(),trans.getOrigin().getY(),trans.getOrigin().getZ()); if(!i) PlaceModel(*(Mesh*)(loopable[i]->getUserPointer()), trans.getOrigin().getX(),trans.getOrigin().getY(),trans.getOrigin().getZ(),.15*SCALE,-.05*SCALE,.15*SCALE,1); else PlaceModel(*(Mesh*)(loopable[i]->getUserPointer()), trans.getOrigin().getX(),trans.getOrigin().getY(),trans.getOrigin().getZ(),.1*SCALE,.1*SCALE,.1*SCALE, 0); // SetupCube(trans.getOrigin().getX(),trans.getOrigin().getY(),trans.getOrigin().getZ(),2,0,2,2,2); } ///render spherse /* btTransform trans; fallRigidBody->getMotionState()->getWorldTransform(trans); std::cout << "sphere height: " << trans.getOrigin().getY() << " sphere x:"<<trans.getOrigin().getX()<< " sphere z:"<< trans.getOrigin().getZ() <<std::endl; SetupCube(trans.getOrigin().getX(),trans.getOrigin().getY(),trans.getOrigin().getZ(),2,60,2,2,2); fallRigidBodyb->getMotionState()->getWorldTransform(trans); SetupCube(trans.getOrigin().getX(),trans.getOrigin().getY(),trans.getOrigin().getZ(),2,60,2,2,2); FRBbuilding->getMotionState()->getWorldTransform(trans); SetupCube(trans.getOrigin().getX(),trans.getOrigin().getY(),trans.getOrigin().getZ(),3,0,2,2,2); */ }
void CNetworkPlayer::UpdateShot( bool bShooting ) { DEBUG_TRACE("CNetworkPlayer::UpdateShot"); // Is the playerped not valid? if( !m_pPlayerPed ) return; // Should we start shooting? if( bShooting && !IsShooting() ) { // Terminate the old shot object if it's valid if ( m_pShootObject ) m_pShootObject->Terminate (); // Delete the old shoot object SAFE_DELETE( m_pShootObject ); // Terminate the old aim object if it's valid if ( m_pAimObject ) m_pAimObject->Terminate (); // Delete the old aim object SAFE_DELETE( m_pAimObject ); // Create the initial shoot sync object if needed m_pShootObject = new CM2SyncObject( m_pPlayerPed->ShootAt( GetLookAt() ) ); // Mark as shooting SetShooting( true ); } // Should we stop shooting? else if( !bShooting && IsShooting() ) { // Terminate the old shot object if it's valid if ( m_pShootObject ) m_pShootObject->Terminate (); // Delete the old aim sync object SAFE_DELETE( m_pShootObject ); // Mark as not shooting SetShooting( false ); // Are we aiming? if( IsAiming() ) { // Mark as not aiming SetAiming( false ); // Update the aim now! UpdateAim( true ); } } // Should we update the aim position else if( bShooting && IsShooting() ) { // Is the aim sync object valid? if( m_pShootObject && !m_pShootObject->IsDone() ) { // Update the aim position m_pShootObject->SetTarget( GetLookAt(), eTargetType::E_TYPE_SHOOT ); } else if( m_pShootObject && m_pShootObject->IsDone() ) { // Mark as not shooting SetShooting( false ); } } }
Vect3f CFPSCamera::GetDirection () const { assert(m_pObject3D); return (GetLookAt() - GetEye()); }
/*! * * @param speed */ void Camera::MoveZ(float speed) { SetPosition(GetPosition() - GetLookAt() * speed); }