//cart_defines------------------------------------------------------------------------------------
#define spring 90000
#define damper 1000
#define FR 0
#define FL 1
#define RR 2
#define RL 3
//------------------FR-----FL----RR----RL ->Vertex num
var wheel_pos[4] = {290, 288, 289, 287};
//cart_skills-------------------------------------------------------------------------------------
var phent_group_count = 1;
#define phent_group skill10
#define wheel_index skill11
#define wheel_id 12
#define wheel0 skill12
#define wheel1 skill13
#define wheel2 skill14
#define wheel3 skill15
function main()
{
video_screen = 1;
level_load("map.WMB");
wait(2);
ph_setgravity (vector (0, 0, -1800));
ph_setcorrections (25000, 0.05);
player = ent_create ("cart.mdl", vector (1000, 0, 0), init_cart);
wait (2);
VECTOR temp;
while (1)
{
phcon_setmotor (player.skill[wheel_id + RR], nullvector, vector (5000 * -key_force.y, 350, 0), nullvector);
phcon_setmotor (player.skill[wheel_id + RL], nullvector, vector (5000 * -key_force.y, 350, 0), nullvector);
phcon_getposition (player.skill[wheel_id + FR], temp.x);
phcon_setmotor (player.skill[wheel_id + FR], vector(((50 * key_force.x) - temp.x) * minv(time_step, 1), 500, 0),
vector (5000 * -key_force.y, 350, 0), nullvector);
phcon_getposition (player.skill[wheel_id + FL], temp.x);
phcon_setmotor (player.skill[wheel_id + FL], vector(((50 * key_force.x) - temp.x) * minv(time_step, 1), 500, 0),
vector (5000 * -key_force.y, 350, 0), nullvector);
vec_set (temp.x, vector (-500, 0, 200));
vec_rotate (temp.x, player.pan);
vec_add (temp.x, player.x);
vec_set (camera.x, temp.x);
vec_set (camera1.pan, player.pan);
camera1_view.tilt -= 20;
wait (1);
}
}
void init_wheel ();
void init_cart ()
{
set (my, SHADOW);
wait (1);
phent_group_count += 1;
my.phent_group = phent_group_count;
c_setminmax (me);
phent_settype (my, PH_RIGID, PH_BOX);
phent_setmass (my, 7, PH_BOX);
phent_setfriction (my, 10);
phent_setdamping (my, 15, 15);
phent_setelasticity (my, 40, 100);
phent_setgroup (my, my.phent_group);
VECTOR temp;
for (my.wheel_index = 0; my.wheel_index < 4; my.wheel_index++)
{
vec_for_vertex (temp.x, me, wheel_pos[my.wheel_index]);
ent_create ("wheel.mdl", temp.x, init_wheel);
}
wait (1);
phcon_setparams2 (my.skill[wheel_id + FR], vector (-30, 30, 0), nullvector, vector (spring, damper, 0));
phcon_setparams2 (my.skill[wheel_id + FL], vector (-30, 30, 0), nullvector, vector (spring, damper, 0));
}
void init_wheel ()
{
my.skill1 = you.wheel_index;
if (my.skill1 > 1) vec_scale (my.scale_x, 1.25);
set (my, SHADOW);
c_setminmax (me);
phent_settype (my, PH_RIGID, PH_SPHERE);
phent_setmass (my, 12, PH_SPHERE);
phent_setfriction (my, 80);
phent_setdamping (my, 25, 5);
phent_setelasticity (my, 0, 100);
phent_setgroup (my, you.phent_group);
you.skill[wheel_id + my.skill1] = phcon_add (PH_WHEEL, you, me);
phcon_setparams1 (you.skill[wheel_id + my.skill1], my.x, vector (0, 0, 1), vector (0, 1, 0));
phcon_setparams2 (you.skill[wheel_id + my.skill1], nullvector, nullvector, vector (spring, damper, 0));
}