#include <acknex.h>
#include <default.c>
#include "defines.c"
#define STATE skill1
#define ANIMATION skill2
//#define Above_Ground skill3
function ninja_move();
var jump_percentage;
var reached_height;
var dist_down;
var speed_down = 0;
var distance_to_ground;
var jump_height = 200;
var jump_target;
var nc_gravity = 2;
var playermovementz;
var move;
function camera_follow(ENTITY* ent)
{
while(1)
{
vec_set(camera.x,vector(-200,0,50)); // camera position relative to the player
vec_rotate(camera.x,ent.pan); // rotate the camera position with the player
vec_add(camera.x,ent.x); // add player position
vec_set(camera.pan,vector(ent.pan,-10,0)); // look in player direction, slighty down
wait(1);
}
}
action ninja_move()
{
camera_follow(me);
my.skill42 = floatv(25);
VECTOR vFeet;
vec_for_min(vFeet,me); // vFeet.z = distance from player origin to lowest vertex
my.STATE = 0;
while(1)
{
// adjust entity to the ground height, using a downwards trace
if(c_trace(my.x,vector(my.x,my.y,my.z-10000),USE_BOX|IGNORE_ME | IGNORE_PASSABLE) > 5)
dist_down= my.z + vFeet.z - target.z; // always place player's feet on the ground
else
dist_down = 0;
//dist_down = clamp(dist_down,0,100);
if((dist_down > 5))
{
dist_down = clamp(dist_down,0,accelerate(speed_down,-nc_gravity * time_step,0.1));
}
else
{
speed_down = -(dist_down/1.2)+2;
if((dist_down + speed_down)> 5)
{
speed_down = - dist_down - 5;
}
if(key_space == 1)
{
jump_target = jump_height;
}
}
if(jump_target > 5)
{
speed_down = (sqrt((jump_target)* nc_gravity))*time_step;
jump_target -= speed_down;
}
move_friction = 0.9;
//move the entity forward
var distance =(key_cuu)* 25 *time_step;
distance = sign(distance)* (abs(distance) + 0.5 * dist_down);
c_move(me,vector(distance,0,speed_down),vector(0,0,-dist_down),IGNORE_PASSABLE |GLIDE);
//rotate player with the left and right keys
my.pan += (key_cul-key_cur)*5* time_step;
my.pan += (key_cud) * 5 * time_step;
//default state
if(my.STATE == 0)
{
my.ANIMATION += 2 *time_step;
ent_animate(me,"idleSWA",my.ANIMATION,ANM_CYCLE);
}
//the run state without the sword in hand
if(my.STATE ==1)
{
ent_blend("runWS",25,45);
//animate the player
my.ANIMATION += 15 * time_step;
ent_animate(me,"runWS",my.ANIMATION,ANM_CYCLE);
}
//pressing the move key to make him run with out the sword
//changing his state
if((key_cuu == 1) && my.STATE == 0)
{
my.ANIMATION = 0;
my.STATE = 1;
}
else if((!key_cuu)&& my.STATE == 1)
{
my.ANIMATION = 0;
my.STATE = 0;
}
//take the sword out and put it in the hand.
if(my.STATE ==2)
{
my.ANIMATION += 5 *time_step;
ent_animate(me,"takeSWO",my.ANIMATION,0);
//blend the state from taking out the sword
//to the idle.
if(my.ANIMATION > 100)
{
ent_blend(my.STATE = 4,0,50);
}
}
//run with the sword in his hand
if(my.STATE == 3)
{
ent_blend("run",25,45);
//animate the player
my.ANIMATION += 15 * time_step;
ent_animate(me,"run",my.ANIMATION,ANM_CYCLE);
}
//idle with the sword in hand
if(my.STATE == 4)
{
my.ANIMATION += 2 *time_step;
ent_animate(me,"idleSWI",my.ANIMATION,ANM_CYCLE);
}
//putting the sword away
if(my.STATE == 5)
{
my.ANIMATION += 5 * time_step;
ent_animate(me,"putSWA",my.ANIMATION,NULL);
if(my.ANIMATION > 100)
{
ent_blend(my.STATE = 0,0,50);
}
}
//the attack state
if(my.STATE == 6)
{
my.ANIMATION += 4 * time_step;
ent_animate(me,"attack",my.ANIMATION,NULL);
}
//press the key to change states
//take out the sword if you are in the idle state
//with the sword in sheath
if((key_t == 1)&& my.STATE == 0)
{
my.ANIMATION = 1;
my.STATE = 2;
}
//running and pull sword at the same time
if((key_cuu == 1)&& (key_t ==1) && my.STATE == 1)
{
ent_blend(my.STATE = 2,25,50);
}
//after changing states if you are trying to
//move with the sword in hand
if((key_cuu==1)&& my.STATE == 2)
{
my.ANIMATION = 1;
my.STATE = 3;
}
//if you have stopped moving
//play the idle with the sword in the hand
else if((key_cuu == 0)&& my.STATE == 3)
{
my.ANIMATION = 1;
my.STATE = 4;
}
//run with the sword in hand
if((my.STATE == 4) && key_cuu == 1)
{
my.ANIMATION = 1;
my.STATE = 3;
}
//when your idle is sword in hand
//and you want to put it away
if((key_p == 1) && my.STATE == 4)
{
my.ANIMATION = 1;
my.STATE = 5;
}
//now you have put the sword away
//go back to original state and start over again
if((my.STATE == 5) && key_cuu == 1)
{
my.ANIMATION = 1;
my.STATE = 1;
}
wait(1);
}
}