#include <acknex.h>
#include <default.c>
#include <ackphysX.h>
#include <camera.c>
var ent_collided = FALSE;
ENTITY *colliding_entity = NULL;
// Push ents
void push_ents()
{
if (event_type == EVENT_ENTITY)
{
ent_collided = TRUE;
colliding_entity = you;
}
}
// App entry point
void main()
{
video_mode = 4;
fps_max = 60;
// Load empty level
level_load("");
// Place camera
vec_set(camera.x, vector(-500, 0, 100));
camera->tilt = -9;
// Open physX
physX_open();
ENTITY *ground = ent_createterrain(NULL, nullvector, 128, 128, 10);
bmap_fill(ent_getskin(ground, 1), vector(0x43, 0x21, 0), 100);
// Create sphere
ENTITY *ball = ent_create("SPHERE.MDL", vector(100, 0, 20), NULL);
// Create player
player = ent_create("CUBE.MDL", vector(0, 0, 20), NULL);
vec_set(player->scale_x, vector(1, 1, 2));
player.emask |= ENABLE_ENTITY;
player.event = push_ents;
// Init physX
pXent_settype(ground, PH_STATIC, PH_POLY);
pXent_settype(ball, PH_RIGID, PH_SPHERE);
// Set camera mode
tcamera_mode = 2; // TPCamera
tcamera_dist = 50;
// Movement vectors
VECTOR vMove, vForce, vSpeed;
vec_set(vMove, nullvector);
vec_set(vForce, nullvector);
vec_set(vSpeed, nullvector);
while(1)
{
vForce.x = key_force.y * 6;
vec_accelerate(vMove, vSpeed, vForce, 0.5);
c_move(player, vMove, NULL, IGNORE_ME | IGNORE_PASSABLE);
player.pan -= key_force.x * 6 * time_step;
if (ent_collided == TRUE)
{
if (colliding_entity != NULL)
{
VECTOR forward, angle;
vec_set(angle, colliding_entity.x);
vec_sub(angle, player.x);
vec_to_angle(angle, angle);
vec_set(forward, vector(100, 0, 0));
vec_rotate(forward, angle);
pXent_addvelcentral(colliding_entity, forward);
}
ent_collided = FALSE;
}
wait(1);
}
}