예제 #1
0
 virtual void update(const UpdateEventUnrecPtr e)
 {
     ForceOnCharacter.setValues(0.0,0.0,0.0);
     Real32 PushForce(10000.0);
     Real32 Speed(20.0);
     if(_IsUpKeyDown)
     {
         ForceOnCharacter += Vec3f(0.0, PushForce, 0.0);
     }
     if(_IsDownKeyDown)
     {
         ForceOnCharacter += Vec3f(0.0, -PushForce, 0.0);
     }
     if(_IsLeftKeyDown)
     {
         ForceOnCharacter += Vec3f(-PushForce, 0.0, 0.0);
     }
     if(_IsRightKeyDown)
     {
         ForceOnCharacter += Vec3f(PushForce, 0.0, 0.0);
     }
     if(ForceOnCharacter != Vec3f(0.0,0.0,0.0))
     {
         ShipBody->setEnable(true);
     }
         if(ForceOnCharacter.x() !=0.0)
         {
             ShipMotor->setFMax(osgAbs(ForceOnCharacter.x()));
             ShipMotor->setVel(osgSgn(ForceOnCharacter.x())*Speed);
         }
         else
         {
             ShipMotor->setFMax(0.0);
             ShipMotor->setVel(0.0);
         }
         if(ForceOnCharacter.y() !=0.0)
         {
             ShipMotor->setFMax2(osgAbs(ForceOnCharacter.y()));
             ShipMotor->setVel2(osgSgn(ForceOnCharacter.y())*Speed);
         }
         else
         {
             ShipMotor->setFMax2(0.0);
             ShipMotor->setVel2(0.0);
         }
         if(ForceOnCharacter.z() !=0.0)
         {
             ShipMotor->setFMax3(osgAbs(ForceOnCharacter.z()));
             ShipMotor->setVel3(osgSgn(ForceOnCharacter.z())*Speed);
         }
         else
         {
             ShipMotor->setFMax3(0.0);
             ShipMotor->setVel3(0.0);
         }
 }
예제 #2
0
void handleUpdate(UpdateEventDetails* const details,
                  PhysicsBody* const CharacterPhysicsBody,
                  PhysicsLMotorJoint* const CharacterMover)
{
    ForceOnCharacter.setValues(0.0,0.0,0.0);
    Real32 PushForce(55000.0);
    Real32 Speed(10.0);
    if(_IsUpKeyDown)
    {
        ForceOnCharacter += Vec3f(0.0, PushForce, 0.0);
    }
    if(_IsDownKeyDown)
    {
        ForceOnCharacter += Vec3f(0.0, -PushForce, 0.0);
    }
    if(_IsLeftKeyDown)
    {
        ForceOnCharacter += Vec3f(-PushForce, 0.0, 0.0);
    }
    if(_IsRightKeyDown)
    {
        ForceOnCharacter += Vec3f(PushForce, 0.0, 0.0);
    }
    if(_ShouldJump)
    {
        ForceOnCharacter += Vec3f(0.0, 0.0, 50000.0);
        _ShouldJump = false;
    }
    if(ForceOnCharacter != Vec3f(0.0,0.0,0.0))
    {
        CharacterPhysicsBody->setEnable(true);
    }
    if(ForceOnCharacter.x() !=0.0)
    {
        CharacterMover->setFMax(osgAbs(ForceOnCharacter.x()));
        CharacterMover->setVel(osgSgn(ForceOnCharacter.x())*Speed);
    }
    else
    {
        CharacterMover->setFMax(0.0);
        CharacterMover->setVel(0.0);
    }
    if(ForceOnCharacter.y() !=0.0)
    {
        CharacterMover->setFMax2(osgAbs(ForceOnCharacter.y()));
        CharacterMover->setVel2(osgSgn(ForceOnCharacter.y())*Speed);
    }
    else
    {
        CharacterMover->setFMax2(0.0);
        CharacterMover->setVel2(0.0);
    }
    if(ForceOnCharacter.z() !=0.0)
    {
        CharacterMover->setFMax3(osgAbs(ForceOnCharacter.z()));
        CharacterMover->setVel3(osgSgn(ForceOnCharacter.z())*Speed);
    }
    else
    {
        CharacterMover->setFMax3(0.0);
        CharacterMover->setVel3(0.0);
    }

    Real32 RotationRate(1.57);
    if(_IsAKeyDown)
    {
        Quaternion newRotation(CharacterPhysicsBody->getQuaternion());
        newRotation.mult(Quaternion(Vec3f(0.0,0.0,1.0),RotationRate*details->getElapsedTime()));
        CharacterPhysicsBody->setQuaternion( newRotation );
    }
    if(_IsDKeyDown)
    {
        Quaternion newRotation(CharacterPhysicsBody->getQuaternion());
        newRotation.mult(Quaternion(Vec3f(0.0,0.0,1.0),-RotationRate*details->getElapsedTime()));
        CharacterPhysicsBody->setQuaternion( newRotation );
    }
}