action player_action()
{
var SetHeight = 20; //TWEAK :: distance of ball from ground.
player = my;
vec_set(my.scale_x,vector(0.5,0.5,0.5));
wait(1);
c_setminmax(my);
VECTOR tmpV;
while(1)
{
if(key_e) {c_move(my,vector( 5*time_step,0,0),nullvector,GLIDE);}
if(key_q) {c_move(my,vector(-5*time_step,0,0),nullvector,GLIDE);}
vec_set(tmpV, vector(my.x,my.y,my.z-9999));
vec_rotate(tmpV, my.pan);
c_trace(my.x, tmpV, IGNORE_ME | USE_BOX);
if(trace_hit) // if SOMETHING hit
{
vec_to_angle(tmpV, normal); //get angle of "ground". (Terrain, Entity, or WED block)
my.tilt = 90 - tmpV.y; //apply angle to ball
if((my.skill1=vec_dist(my.x,target))<SetHeight)
{ c_move(my,vector(0,0,SetHeight-my.skill1),nullvector,GLIDE); }
}
wait(1);
}
}
function camera_handling()
{
VECTOR tmpV, pos_off, ang_off; //working space
vec_set(pos_off, vector(-50,0,25)); //TWEAK :: distance of camera from ball.
vec_set(ang_off, vector(0,15,0)); //TWEAK :: angle of camera, so it looks OVER ball
var smoothness = 0.2; //TWEAK :: smaller is smoother but slower (camera lags behind a bit)
ENTITY* cam_det = ent_create(0,0,0); //used for camera-collision-detection only.
while(1)
{
if(player)
{
//position camera
vec_set(tmpV, pos_off);
vec_rotate(tmpV, player.pan);
vec_add(tmpV, player.x);
vec_sub(tmpV, camera.x);
vec_scale(tmpV, smoothness * time_step);
c_move(cam_det, NULL, tmpV, IGNORE_YOU|GLIDE);
vec_set(camera.x, cam_det.x);
//rotate camera toward Player
vec_set(tmpV, player.x); vec_sub(tmpV, camera.x);
vec_to_angle(camera.pan, tmpV);
if(tmpV.x<0) { camera.pan -= 180; camera.tilt = 90-(camera.tilt-90); }
vec_add(camera.pan, ang_off);
}
proc_mode = PROC_LATE;
wait(1);
}
ent_remove(cam_det);
}