while(1)
{
var dist_down;
// adjust entity to the ground height, using a downwards trace
if(c_trace(my.x,vector(my.x,my.y,my.z-5000),IGNORE_ME | IGNORE_PASSABLE | USE_BOX) > 0)
dist_down= my.z + vFeet.z - target.z; // always place player's feet on the ground
else
dist_down = 0;
if(dist_down > 0)
{
dist_down = clamp(dist_down,0,accelerate(speed_down,10,0.1));
ent_blend("land",25,75);
}
else
speed_down = 0;
//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,0),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;
//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);
}
if(my.STATE == 7)
{
jump_height = 75 * time_step;
jump_perct += 45 *time_step;
c_move(me,vector(0,0,jump_height),NULL,GLIDE);
ent_animate(me,"jump",jump_perct,0);
ent_blend("hang",0,25);
}
//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)
{
my.STATE = 2;
}
//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;
}
//Press the space key to make the player jump
if(key_space == 1 && my.STATE == 0)
{
my.ANIMATION = 1;
my.STATE = 7;
}