void landing(ENTITY* obj)
{
obj.fallspeed = obj.fallspeedold;
obj.roofdist = c_trace(obj.x, vector(obj.x, obj.y, obj.z-9000), IGNORE_PASSABLE | IGNORE_FLAG2 | USE_POLYGON);
while(obj.roofdist > (obj.objekthoehe/2))
{
obj.roofdist = c_trace(obj.x, vector(obj.x, obj.y, obj.z-9000), IGNORE_PASSABLE | IGNORE_FLAG2 | USE_POLYGON);
c_move(obj, vector(0, 0, -(5*(bulleter/100))*time_step), nullvector, GLIDE | IGNORE_PASSABLE | USE_POLYGON);
wait(1);
}
//obj.z += obj.objekthoehe/2;
obj.in_jump = 0;
}
void fallgo(ENTITY* obj)
{
obj.roofdist = c_trace(obj.x, vector(obj.x, obj.y, obj.z-9000), IGNORE_PASSABLE | IGNORE_FLAG2 | USE_POLYGON);
if(obj.roofdist > (obj.objekthoehe/2))
{
c_move(obj, vector(0, 0, -(obj.fallspeed*(bulleter/100))*time_step), nullvector, IGNORE_FLAG2 | IGNORE_PASSABLE | USE_POLYGON | IGNORE_YOU | GLIDE);
obj.fallspeed += (obj.gewicht/10.5)*time_step;
obj.fallspeed = clamp(obj.fallspeed, 0, 100);
}
else if(obj.roofdist <= (obj.objekthoehe/2))
{
obj.in_jump = 4;
}
}
void fallstart(ENTITY* obj)
{
obj.jumpspeed = obj.jumpspeedold;
obj.fallspeedold = obj.fallspeed;
obj.roofdist = c_trace(obj.x, vector(obj.x, obj.y, obj.z-9000), IGNORE_PASSABLE | IGNORE_FLAG2 | USE_POLYGON);
if(obj.roofdist > (obj.objekthoehe/2))
{
c_move(obj, vector(0, 0, -(obj.fallspeed*(bulleter/100))*time_step), nullvector, IGNORE_FLAG2 | IGNORE_PASSABLE | USE_POLYGON | IGNORE_YOU | GLIDE);
obj.fallspeed += (obj.gewicht/10.5)*time_step;
obj.jumpkeytrigger = 1;
obj.in_jump = 3;
}
}
void jumpgo(ENTITY* obj)
{
obj.roofdist = c_trace(obj.x, vector(obj.x, obj.y, obj.z+9000), IGNORE_PASSABLE | IGNORE_FLAG2 | USE_POLYGON);
if(obj.roofdist > (obj.objekthoehe/2) && obj.jumpspeed > 10)
{
c_move(obj, vector(0, 0, (obj.jumpspeed*(bulleter/100))*time_step), nullvector, IGNORE_FLAG2 | IGNORE_PASSABLE | USE_POLYGON | IGNORE_YOU | GLIDE);
obj.jumpspeed -= (obj.gewicht/10.5)*time_step;
}
else if(obj.roofdist < (obj.objekthoehe/2))
{
obj.in_jump = 2;
}
else if(obj.jumpspeed <= 10)
{
obj.in_jump = 2;
}
else
{
obj.in_jump = 2;
}
}
void jumpstart(ENTITY* obj)
{
obj.roofdist = c_trace(obj.x, vector(obj.x, obj.y, obj.z+9000), IGNORE_PASSABLE | IGNORE_FLAG2 | USE_POLYGON);
if(obj.roofdist > (obj.objekthoehe/2))
{
obj.jumpspeedold = obj.jumpspeed;
c_move(obj, vector(0, 0, (obj.jumpspeed*(bulleter/100))*time_step), nullvector, IGNORE_FLAG2 | IGNORE_PASSABLE | USE_POLYGON | IGNORE_YOU | GLIDE);
obj.in_jump = 1;
}
}
//================================================================================================================================================
//================================================================================================================================================
//================================================================================================================================================
void jump_event(ENTITY* obj, var frames, VECTOR* direct, var fall)
{
obj.roofdist = c_trace(obj.x, vector(obj.x, obj.y, obj.z+9000), IGNORE_PASSABLE | IGNORE_FLAG2 | USE_POLYGON);
if(obj.roofdist > obj.objekthoehe/2)
{
obj.jumpspeedold = obj.jumpspeed;
c_move(obj, vector(0, 0, (obj.jumpspeed*(bulleter/100))*time_step), nullvector, IGNORE_FLAG2 | IGNORE_PASSABLE | USE_POLYGON | IGNORE_YOU | GLIDE);
obj.in_jump = 1;
}
while(frames > 0 && obj.in_jump == 1)
{
jumpgo(obj);
c_move(obj, vector((direct.x*(bulleter/100))*time_step, 0, 0), nullvector, GLIDE | IGNORE_PASSABLE | IGNORE_FLAG2);
frames -= 1;
wait(1);
}
obj.roofdistframe = c_trace(obj.x, vector(obj.x, obj.y, obj.z-9000), IGNORE_PASSABLE | IGNORE_FLAG2 | USE_POLYGON);
if(obj.roofdistframe > obj.objekthoehe/2)
{obj.in_jump = 2;}
if(fall == true)
{
while(obj.in_jump != 0 && obj.in_jump != 1)
{
if(obj.in_jump == 2)
{fallstart(obj);}
else if(obj.in_jump == 3)
{fallgo(obj);}
else if(obj.in_jump == 4)
{landing(obj);}
c_move(obj, vector((direct.y*(bulleter/100))*time_step, 0, 0), nullvector, GLIDE | IGNORE_PASSABLE | IGNORE_FLAG2);
wait(1);
}
}
c_move(obj, vector((direct.z*(bulleter/100))*time_step, 0, 0), nullvector, GLIDE | IGNORE_PASSABLE | IGNORE_FLAG2);
}
void jump_player(ENTITY* obj)
{
if(key_space == 1 && obj.jumpkeytrigger == 0)
{
if(obj.in_jump <= 0)
{jumpstart(obj);}
else if(obj.in_jump == 1)
{jumpgo(obj);}
}
else if(key_space == 0 && obj.in_jump == 1)
{obj.in_jump = 2;}
else if(key_space == 0 && obj.jumpkeytrigger == 1)
{obj.jumpkeytrigger = 0;}
obj.roofdistframe = c_trace(obj.x, vector(obj.x, obj.y, obj.z-9000), IGNORE_PASSABLE | IGNORE_FLAG2 | USE_POLYGON);
if(obj.in_jump == 2)
{fallstart(obj);}
else if(obj.in_jump == 3)
{fallgo(obj);}
else if(obj.in_jump == 4)
{landing(obj);}
else if(obj.roofdistframe > obj.objekthoehe/2 && obj.in_jump != 2 && obj.in_jump != 1)
{obj.in_jump = 2;}
}