96 lines
2.4 KiB
Ucode
96 lines
2.4 KiB
Ucode
//=============================================================================
|
|
// JumpDest.
|
|
// specifies positions that can be reached with greater than normal jump
|
|
// forced paths will check for greater than normal jump capability
|
|
// NOTE these have NO relation to JumpPads
|
|
//=============================================================================
|
|
class JumpDest extends NavigationPoint
|
|
native;
|
|
|
|
cpptext
|
|
{
|
|
virtual void SetupForcedPath(APawn* Scout, UReachSpec* Path);
|
|
void ClearPaths();
|
|
UBOOL ReviewPath(APawn* Scout);
|
|
}
|
|
|
|
var bool bOptionalJumpDest;
|
|
var() bool bForceDoubleJump; // hack for map fixing
|
|
var int NumUpstreamPaths;
|
|
var ReachSpec UpstreamPaths[8];
|
|
var vector NeededJump[8];
|
|
var float CalculatedGravityZ[8];
|
|
//#ifdef _KF_
|
|
var(KF) bool bIgnoreZDiff; // Force the jump regardless of height distance from jump start location
|
|
var(KF) int SpecialCostOverride; // Override the result of SpecialCost
|
|
var(KF) float XYVelocityScale;
|
|
//#endif
|
|
|
|
function int GetPathIndex(ReachSpec Path)
|
|
{
|
|
local int i;
|
|
|
|
if ( Path == None )
|
|
return 0;
|
|
|
|
for ( i=0; i<4; i++ )
|
|
if ( UpstreamPaths[i] == Path )
|
|
return i;
|
|
return 0;
|
|
}
|
|
|
|
event int SpecialCost(Pawn Other, ReachSpec Path)
|
|
{
|
|
local int Num;
|
|
|
|
if ( Other.Physics == PHYS_Flying )
|
|
return 100;
|
|
if ( Vehicle(Other) != None )
|
|
return 10000000;
|
|
|
|
Num = GetPathIndex(Path);
|
|
if ( Abs(Other.JumpZ/Other.PhysicsVolume.Gravity.Z) >= Abs(NeededJump[Num].Z/CalculatedGravityZ[Num]) )
|
|
return 100;
|
|
|
|
return 10000000;
|
|
}
|
|
|
|
function DoJump(Pawn Other)
|
|
{
|
|
Other.bWantsToCrouch = false;
|
|
Other.Controller.MoveTarget = self;
|
|
Other.Controller.Destination = Location;
|
|
Other.bNoJumpAdjust = true;
|
|
if ( bForceDoubleJump )
|
|
Other.Velocity = Other.Controller.EAdjustJump(0,Other.Default.GroundSpeed);
|
|
else
|
|
Other.Velocity = Other.Controller.EAdjustJump(0,Other.GroundSpeed);
|
|
Other.Acceleration = vect(0,0,0);
|
|
Other.SetPhysics(PHYS_Falling);
|
|
Other.Controller.SetFall();
|
|
Other.DestinationOffset = CollisionRadius;
|
|
}
|
|
|
|
event bool SuggestMovePreparation(Pawn Other)
|
|
{
|
|
local int Num;
|
|
if ( Other.Controller == None )
|
|
return false;
|
|
|
|
Num = GetPathIndex(Other.Controller.CurrentPath);
|
|
if ( Abs(Other.JumpZ/Other.PhysicsVolume.Gravity.Z) < Abs(NeededJump[Num].Z/CalculatedGravityZ[Num]) )
|
|
return false;
|
|
|
|
DoJump(Other);
|
|
return false;
|
|
}
|
|
|
|
defaultproperties
|
|
{
|
|
//#ifdef _KF_
|
|
SpecialCostOverride=-1
|
|
XYVelocityScale=1.f
|
|
//#endif
|
|
bSpecialForced=true
|
|
}
|