action player_walk() {
var anim_percent = 0;
var grounddist, key_space_released = 0;
VECTOR speed,temp;
vec_set(speed,nullvector);
wait(1);
vec_set(temp,vector(-15,-15,-20)); // die bounding box setzen
vec_scale(temp,my.scale_x); //falls der spieler im level eine andere größe als 1 hat
vec_set(my.min_x,temp);
vec_set(temp,vector(15,15,20)); // die bounding box setzen
vec_scale(temp,my.scale_x); //falls der spieler im level eine andere größe als 1 hat
vec_set(my.max_x,temp);
my.z += 232;
while(1) {
if(!key_space) { key_space_released = 1; } // endlose Sprungwiederholung bei gedrückter Taste verhindern
if(key_a || key_d) {
my.pan = 180*key_a;
anim_percent += 8*time_step;
ent_animate(me, "run", anim_percent, ANM_CYCLE);
}
else {
anim_percent += 4*time_step;
ent_animate(me, "stand", anim_percent, ANM_CYCLE);
}
speed.x += (45*(key_d-key_a)-speed.x)/3*time_step; // sanftes beschleunigen
grounddist = c_trace(my.x,vector(my.x,my.y,my.z-150),IGNORE_ME | USE_BOX);
grounddist = clamp(grounddist+150*(!trace_hit),-5,150);
if(grounddist < 10 && speed.z <= 0) {
my.z -= grounddist-5;
speed.z = 0;
if(key_space && key_space_released) {
speed.z = 50;
}
}
else { speed.z += maxv((-60-speed.z)/5,-7)*time_step; }
c_move(my,nullvector, vector(speed.x*time_step,0,speed.z*time_step),GLIDE);
//Cameraposition
camera.x = 100+my.x;
camera.y = -2500;
camera.z = 400+my.z;
camera.pan = 90;
camera.tilt = -5;
wait(1);
}
}