// C-Script
/*
This sample is an attempt at combining the gravity / movement sample found in the manual entry "c_move"
(attributed to jcl?) and a path movement sample found in this thread.
It is an example which may be used to help determine what, or what not, to do.
*/
define _nodePos, skill20;
function evf_getFloor() {
var vDown[3]; vec_set(vDown, my.x);
var evResult; evResult = 0;
var vFeet[3];
vec_for_min(vFeet, me);
vDown.z -= (my.max_z - my.min_z) * 3;
evResult = c_trace(my.x, vDown, IGNORE_ME | IGNORE_PASSABLE | USE_BOX);
if (trace_hit) {
evResult = my.z + vFeet.z - target.z;
} else {
evResult = 666;
}
return(evResult);
}
function boot_player() {
var nodeResult; nodeResult = 0;
var node; node = 1; // start at first node
var angle[3]; vec_set(angle, nullvector);
var evDistZ; evDistZ = 0;
var distX; distX = 0;
var speedZ; speedZ = 0;
my.ambient=100;
// attach entity to nearest path
nodeResult = path_scan(me,my.x,my.pan,vector(360,180,1000));
if (nodeResult == 0) { return; } // no path found
path_getnode(my,node,my._nodePos,NULL);
while (me != NULL) {
nodeResult = vec_to_angle(angle, vec_diff(temp, my._nodePos, my.x));
if (nodeResult < 25) {
node = path_nextnode(me,node,1);
if (node == 3) {
node=1;
nodeResult = path_scan(me,my.x,my.pan,vector(360,180,1000));
}
path_getnode(my,node,my._nodePos,NULL);
}
// turn to node pos
my.pan = angle[0];
//my.z = -180; //<==if i put this it will stuck on the point where the player is gliding.
//c_move(me,vector(3*time_step,0,0),NULL,GLIDE); // walk ahead...
evDistZ = evf_getFloor();
if (evDistZ > 0) {
evDistZ = clamp(evDistZ, 0, accelerate(speedZ, 5, 0.1));
} else {
speedZ = 0;
}
distX = 3 * time_step;
distX = sign(distX) * (abs(distX) + 0.5 * evDistZ);
c_move(my,vector(distX,0,0), vector(0, 0, -evDistZ), IGNORE_YOU | IGNORE_PASSABLE | IGNORE_WORLD | GLIDE ); //moves the player
// animation
my.skill42 += 6*time_step;
if(my.skill42 > 100) {my.skill42 = 0;}
ent_animate(my,"walk",my.skill42,ANM_CYCLE);
// test camera
// temp.x = (my.max_x - my.min_x) * -3; temp.y = 0; temp.z = 0;
// vec_rotate(temp, my.pan);
// vec_add(temp, my.x);
// vec_set(camera.x, temp);
// vec_diff(temp, my.x, camera.x);
// vec_to_angle(camera.pan, temp);
wait(1);
}
}