1
0
KF2-Dev-Scripts/KFGame/Classes/WallReachSpec.uc
2020-12-13 18:01:13 +03:00

87 lines
2.7 KiB
Ucode

///=============================================================================
// WallReachSpec
//=============================================================================
//
//=============================================================================
// Killing Floor 2
// Copyright (C) 2015 Tripwire Interactive LLC
//=============================================================================
class WallReachSpec extends KFReachSpec
native(Waypoint);
var() editconst bool bMustJump;
cpptext
{
/*
supports() -
returns true if it supports the requirements of aPawn. Distance is not considered.
*/
virtual UBOOL supports (INT iRadius, INT iHeight, INT moveFlags, INT iMaxFallVelocity)
{
#if 0
UBOOL bSupports = CollisionRadius >= iRadius * 0.5 && CollisionHeight >= iHeight;
if( !bSupports )
{
debugf( TEXT("%s SUPPORTS returning FALSE 1 [radii failure][ColRadius: %i ColHeight: %i] [iRadius: %i iHeight: %i moveFlags: %i iMaxFallVelocity: %i]"), *GetName(), CollisionRadius, CollisionHeight, iRadius, iHeight, moveFlags, iMaxFallVelocity );
return FALSE;
}
INT Test = (reachFlags & moveFlags);
bSupports = ((reachFlags & moveFlags) == reachFlags);
if( !bSupports )
{
debugf( TEXT("%s SUPPORTS returning FALSE 2 [reachflags failure, test: %i] [iRadius: %i iHeight: %i moveFlags: %i iMaxFallVelocity: %i]"), *GetName(), Test, iRadius, iHeight, moveFlags, iMaxFallVelocity );
return FALSE;
}
bSupports = (MaxLandingVelocity <= iMaxFallVelocity);
if( !bSupports )
{
debugf( TEXT("%s SUPPORTS returning FALSE [MaxLandingVelocity failure (MaxLandingVelocity: %i)] [iRadius: %i iHeight: %i moveFlags: %i iMaxFallVelocity: %i]"), *GetName(), MaxLandingVelocity, iRadius, iHeight, moveFlags, iMaxFallVelocity );
}
else
{
debugf( TEXT("%s SUPPORTS returning TRUE"), *GetName() );
}
return bSupports;
#else
return ( (CollisionRadius >= iRadius * 0.5 )
&& (CollisionHeight >= iHeight)
&& ((reachFlags & moveFlags) == reachFlags)
&& (MaxLandingVelocity <= iMaxFallVelocity) );
#endif
}
virtual UBOOL IsForced() { return bManuallyForced; }
virtual INT CostFor( APawn* P );
virtual INT AdjustedCostFor( APawn* P, const FVector& StartToGoalDir, ANavigationPoint* Goal, INT Cost );
virtual FPlane PathColor()
{
if( bMustJump )
{
return FPlane( 0.545f, 0.909f, 0.137f, 1.f );
}
else if( !bManuallyForced )
{
return FPlane( 0.89f, 0.565f, 0.294f, 1.f );
}
else
{
return FPlane( 0.909f, 0.709f, 0.137f, 1.f );
}
}
virtual UBOOL CanBeSkipped(APawn* P)
{
return FALSE;
}
}
DefaultProperties
{
bSkipPrune=false
bCanCutCorners=false
bCheckForObstructions=true
}