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); } }
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 ); } }