#include <acknex.h>
#define PRAGMA_PATH "%EXE_DIR%\templates\models"
#define skOffsetX skill1
#define skOffsetY skill2
#define skOffsetZ skill3
#define skDistance skill4
#define skDistSoft skill5
action actCameraCollider () {
proc_mode = PROC_LATE;
wait(1);
my->flags |= INVISIBLE | PASSABLE;
my->eflags = FAT | NARROW;
vec_set(&my->max_x, vector(8, 8, 8));
vec_set(&my->min_x, vector(-8, -8, -8));
vec_set(&my->skOffsetX, vector(0, -7, 35));
my->skDistance = 200;
my->skDistSoft = my->skDistance;
my->parent = player;
while (my->parent == player) {
my->skDistance = clamp(my->skDistance + mickey.z * 0.3, 20, 400);
camera->pan = player->pan;
camera->tilt = clamp(camera->tilt - mickey.y * 0.2, -80, 45);
vec_set(&my->pan, &camera->pan);
vec_set(&my->x, &my->skOffsetX);
vec_rotate(&my->x, &player->pan);
vec_add(&my->x, &player->x);
VECTOR vDir;
vec_for_angle(&vDir, &camera->pan);
vec_scale(&vDir, -my->skDistance);
VECTOR vTarget;
vec_set(&vTarget, &my->x);
vec_add(&vTarget, &vDir);
you = player;
var nDist = c_trace(&my->x, &vTarget, IGNORE_YOU | IGNORE_PASSABLE | USE_BOX);
if (nDist > 0)
my->skDistSoft += (nDist - my->skDistSoft) * time_step;
else
my->skDistSoft += (my->skDistance - my->skDistSoft) * time_step;
vec_normalize(&vDir, my->skDistSoft);
vec_set(&camera->x, &my->x);
vec_add(&camera->x, &vDir);
wait(1);
}
ent_remove(me);
}
#define skPan skill1
#define skAngle skill2
#define skMoveX skill3
#define skMoveY skill4
#define skMoveZ skill5
action actPlayer () {
player = me;
ent_create(NULL, &my->x, actCameraCollider);
wait(1);
my->eflags |= FAT | NARROW;
vec_set(&my->max_x, vector(16, 16, 32));
vec_set(&my->min_x, vector(-16, -16, -32));
my->skPan = 0;
my->skMoveZ = 0;
while (me == player) {
my->skPan = ang(my->skPan - mickey.x * 0.2);
my->skAngle = ang(my->skPan - my->pan) * time_step;
c_rotate(me, vector(my->skAngle, 0, 0), IGNORE_PASSABLE | GLIDE);
my->skMoveX = key_w - key_s;
my->skMoveY = key_a - key_d;
vec_normalize(&my->skMoveX, time_step * 10);
c_move(me, &my->skMoveX, NULL, IGNORE_PASSABLE | GLIDE);
wait(1);
}
ent_remove(me);
}
void main () {
video_mode = 10;
fps_max = 60;
wait(1);
level_load("level.wmb");
camera->clip_near = 1;
ent_create("player.mdl", vector(100, 100, 32), actPlayer);
while(!key_esc)
wait(1);
player = NULL;
wait(1);
sys_exit(NULL);
}