示例#1
0
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);
}
示例#3
0
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");
   }
}
示例#4
0
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;
}
示例#5
0
void CGameObject::MoveForward(float fDistance)
{
//게임 객체를 로컬 z-축 방향으로 이동한다.
	D3DXVECTOR3 d3dxvPosition = GetPosition();
	D3DXVECTOR3 d3dxvLookAt = GetLookAt();
	d3dxvPosition += fDistance * d3dxvLookAt;
	CGameObject::SetPosition(d3dxvPosition);
}
示例#6
0
//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);
}
示例#9
0
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;
   }

}
示例#10
0
	/*!
	 *
	 * @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);
	}
示例#11
0
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();
}
示例#12
0
/* 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);
    */
}
示例#13
0
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 );
		}
	}
}
示例#14
0
Vect3f CFPSCamera::GetDirection () const
{
	assert(m_pObject3D);

	return (GetLookAt() - GetEye());
}
示例#15
0
	/*!
	 *
	 * @param speed
	 */
	void Camera::MoveZ(float speed)
	{
		SetPosition(GetPosition() - GetLookAt() * speed);
	}