Also here is the code for the "player":
It's nothing special.
CreatePlayer + UpdatePlayer:
void cPlayer::CreatePlayer()
{
//controller
PlayerController=CreateController(1.8,0.45,0.3,46);
EntityType(PlayerController,1);
SetBodyMass(PlayerController,100);
}
void cPlayer::UpdatePlayer()
{
//rotation
gx = GraphicsWidth()/2;
gy = GraphicsHeight()/2;
dx = Curve((MouseX()-gx)/4.0,dx,3.0/AppSpeed());
dy = Curve((MouseY()-gy)/4.0,dy,3.0/AppSpeed());
MoveMouse(gx,gy);
CameraPitch = CameraPitch + dy;
CameraYaw = CameraYaw - dx;
CameraPitch=Clamp(CameraPitch,-89,89);
PlayerRotation.X = CameraPitch;
PlayerRotation.Y = CameraYaw;
//movement
PlayerMove=KeyDown(KEY_W)-KeyDown(KEY_S);
PlayerStrafe=KeyDown(KEY_D)-KeyDown(KEY_A);
if (KeyDown(KEY_LSHIFT)||KeyDown(KEY_RSHIFT)) {
if (!ControllerAirborne(PlayerController)) {
PlayerMove*=2.0;
PlayerStrafe*=2.0;
}
}
float PlayerJump=0.0;
if (KeyHit(KEY_SPACE)) {
if (!ControllerAirborne(PlayerController)) {
PlayerJump=6.0;
}
}
//controller input
UpdateController(PlayerController,PlayerRotation.Y,PlayerMove*3,PlayerStrafe*3,PlayerJump,500);
PlayerPosition=EntityPosition(PlayerController);
PlayerHeadPosition=PlayerPosition;
PlayerHeadPosition.Y =PlayerPosition.Y + 1.8;
double walkadd=AppSpeed()*Length(GetBodyVelocity(PlayerController));
walktimer+=walkadd;
PlayerHeadPosition.Y=Curve(1.0-0.4*sin(walktimer/500.0),PlayerHeadPosition.Y,16);
}
void cPlayer::SetPlayerPosition(TVec3 NewPlayerPosition)
{
MoveEntity(PlayerController,NewPlayerPosition);
}
Main Loop:
myPlayer.UpdatePlayer();
RotateEntity(frameworkCam,myPlayer.PlayerRotation);
PositionEntity(frameworkCam,myPlayer.PlayerHeadPosition);