This code works:
#include "engine.h"
int main(int argc, char** argv)
{
Initialize();
//Create a graphics context
Graphics(1280,768);
//Create a world
if (!CreateWorld()) {
MessageBoxA(0,"Error","Failed to create world.",0);
goto exitapp;
}
//Create a camera
TEntity cam=CreateCamera();
CameraClearColor(cam,Vec4(0,0,1,1));
PositionEntity(cam,Vec3(0,2,-10));
Collisions(1,2,true);
//Load a model
TModel scene=LoadModel("abstract::scene.gmf");
if (scene==0) {
MessageBoxA(0,"Error","Failed to load model.",0);
goto exitapp;
}
EntityType(scene,2);
//Create a light
TLight light=CreatePointLight();
PositionEntity(light,Vec3(0,5,0));
//Create a render buffer
TBuffer buffer=CreateBuffer(1280,768,BUFFER_COLOR|BUFFER_DEPTH|BUFFER_NORMAL);
TController player=CreateController();
EntityType(player,1);
SetBodyDamping(player,0.0);
SetBodyMass(player,1);
SetWorldGravity(Vec3(0,-20,0));
float move=0.0;
float strafe=0.0;
TVec3 camrotation=Vec3(0);
float mx=0;
float my=0;
HideMouse();
MoveMouse(GraphicsWidth()/2,GraphicsHeight()/2);
//Main loop
while(!KeyHit(KEY_ESCAPE)) {
//Camera looking
mx=Curve(MouseX()-GraphicsWidth()/2,mx,6);
my=Curve(MouseY()-GraphicsHeight()/2,my,6);
MoveMouse(GraphicsWidth()/2,GraphicsHeight()/2);
camrotation.X=camrotation.X+my/10.0;
camrotation.Y=camrotation.Y-mx/10.0;
RotateEntity(cam,camrotation);
//Player movement
move=KeyDown(KEY_W)-KeyDown(KEY_S);
strafe=KeyDown(KEY_D)-KeyDown(KEY_A);
//Jumping
float jump=0.0;
if (KeyHit(KEY_SPACE)) {
if (!ControllerAirborne(player)) {
jump=4.0;
}
}
//Run
if (KeyDown(KEY_LSHIFT)||KeyDown(KEY_RSHIFT)) {
if (!ControllerAirborne(player)) {
move*=2.0;
strafe*=2.0;
}
}
//Set controller input
UpdateController(player,camrotation.Y,move*3,strafe*3,jump,500.0f);
//Update the world
UpdateWorld();
//Position the camera
TVec3 playerpos=EntityPosition(player);
TVec3 camerapos=EntityPosition(cam);
camerapos.Y=Curve(playerpos.Y+1.75,camerapos.Y,2.0);
camerapos=Vec3(playerpos.X,camerapos.Y,playerpos.Z);
PositionEntity(cam,camerapos);
//Render the scene
SetBuffer(buffer);
RenderWorld();
//Render lighting
SetBuffer(BackBuffer());
RenderLights(buffer);
//Swap the front and back buffer
Flip();
}
exitapp:
return Terminate();
}