#include <acknex.h>
#include <default.c>
#include <ackphysX3.h>
#define PRAGMA_PATH "C:\\Program Files (x86)\\GStudio8\\templates\\sounds";
SOUND *snd_left="shot1.wav";
SOUND *snd_impact = "aiimpact.wav";
SOUND *trigger_enter = "tap.wav";
SOUND *trigger_leave = "splash.wav";
ENTITY *cube1 = NULL;
ENTITY *cube2 = NULL;
ENTITY *trigger = NULL;
// Impact event :
void impact_event()
{
if (event_type == EVENT_FRICTION && hit->flags & PX_EVENT_TOUCH_LOST)
{
ent_playsound(me, snd_left, 100);
}
else if (event_type == EVENT_FRICTION && hit->flags & PX_EVENT_TOUCH_FOUND)
{
ent_playsound(me, snd_impact, 100);
}
}
// Cube action :
void cube_action()
{
while(trigger == NULL || cube2 == NULL) wait(1);
pX3ent_settype(me, PH_RIGID, PH_BOX);
set(me, SHADOW);
pX3ent_setcollisionflag(me, NULL, PX_PF_NOTIFY_TOUCH);
//pX3ent_setcollisionflag(me, cube2, PX_PF_NOTIFY_TOUCH_LOST);
me->event = impact_event;
}
// Trigger event :
void trigger_event()
{
if (event_type != EVENT_TRIGGER)
return;
if (hit->flags & PX_EVENT_TOUCH_FOUND)
ent_playsound(me, trigger_enter, 100);
if (hit->flags & PX_EVENT_TOUCH_LOST)
ent_playsound(me, trigger_leave, 100);
}
// Trigger action :
void trigger_action()
{
while(cube1 == NULL || cube2 == NULL) wait(1);
pX3ent_settype(me, PH_STATIC, PH_BOX);
pX3ent_settriggerflag(me, PX_TF_TRIGGER_ENABLE, 1);
me->event = trigger_event;
}
// App entry point
void main()
{
// Open physX :
physX3_open();
// Level config :
shadow_stencil = 2;
// Load level :
level_load("IMPACT_LEVEL.WMB");
vec_set(camera.x, vector(-253, -6, 128));
camera.tilt = -26;
// Create cube :
cube1 = ent_create(CUBE_MDL, vector(0, 0, 300), cube_action);
cube2 = ent_create(CUBE_MDL, vector(0, 0, 30), NULL);
trigger = ent_create(CUBE_MDL, vector(0, 0, 60), trigger_action);
vec_set(trigger->scale_x, vector(2, 2, 2));
set(trigger, TRANSLUCENT);
pX3ent_settype(cube2, PH_RIGID, PH_BOX);
wait(-5);
pX3ent_addforcecentral(cube1, vector(0, -5, 10));
diag(str_printf(NULL, "Cube1:%X, Cube2:%X, Cube3:%X\n", handle(cube1), handle(cube2), handle(level_ent)));
}