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

137 lines
5.3 KiB
Ucode

//=============================================================================
// KFWallPathNode
//=============================================================================
// Pathnode type that can be placed on walls (for PHYS_Spider)
//=============================================================================
// Killing Floor 2
// Copyright (C) 2015 Tripwire Interactive LLC
//=============================================================================
// Based on GearWallPathNode
// Copyright 1998-2011 Epic Games, Inc. All Rights Reserved.
//=============================================================================
class KFWallPathNode extends KFPathnode
placeable
native(Waypoint);
cpptext
{
#if WITH_EDITOR
virtual UReachSpec* ManualForcePathTo( ANavigationPoint *Nav, AScout *Scout, UClass* ReachSpecClass, UBOOL bJump = FALSE );
virtual void PostEditChangeProperty( FPropertyChangedEvent& PropertyChangedEvent );
virtual void PostEditMove(UBOOL bFinished);
virtual UBOOL PreserveForcedPath( ANavigationPoint* DestNav )
{
//bManuallyForced = true;
return TRUE;
}
//virtual void AddSpecialReachSpecs();
void addReachSpecs(AScout *Scout, UBOOL bOnlyChanged=0);
virtual void AddForcedSpecs( AScout *Scout );
virtual UBOOL CanConnectTo(ANavigationPoint* Dest, UBOOL bCheckDistance);
virtual UBOOL ConnectWallToFloor( AKFPathnode* FloorNode );
virtual UReachSpec* ForcePathTo(ANavigationPoint *Nav, AScout *Scout = NULL, UClass* ReachSpecClass = NULL );
#endif //WITH_EDITOR
virtual UClass* GetReachSpecClass( ANavigationPoint* Nav, UClass* DefaultReachSpecClass );
virtual void FindBase();
virtual void ClearPaths();
virtual void SetBase(AActor *NewBase, FVector NewFloor = FVector(0,0,1), INT bNotifyActor=1, USkeletalMeshComponent* SkelComp=NULL, FName AttachName=NAME_None );
virtual UBOOL GetUpDir( FVector &V )
{
V = -(Rotation.Vector());
return 1;
}
}
var duplicatetransient const float MaxJumpDist;
/** If true, Crawlers will attempt to jump from the floor to this node when attempting to move from the floor to a wall */
var() duplicatetransient bool bMustJumpTo;
var duplicatetransient bool bAutoConnectDropDownNodes;
/** KFPathnodes on the default floor will not add a floor-to-wall connection to this wall node if the distance between the nodes exceeds this value. */
var() duplicatetransient float MaxFloorToWallDistance;
/** Maximum allowed distance (Unreal units) to nodes on the ground - this is almost always going to be for KFWallPathNode to KFPathnode connections.
Pawns can drop to floor if within distance. */
var() duplicatetransient float Max2DDistToFloorNodes;
/** Maximum allowed distance (Unreal units) to nodes on other walls or ceiling if I'm not on a ceiling (excluding the real floor, which is handled by MaxDistToFloorNodes */
var() duplicatetransient float MaxDistToNodesOnOtherFloors;
/** Maximum height distance (UU) to create a wall-to-floor dropdown reachspec from this node to nearby pathnodes on the floor */
var() duplicatetransient float MaxDropFromWallDistance;
/** Auto-generated during pathbuilding. This is a reference to the KFPathNode, if any, that a Crawler can drop down to from this wall node. */
var() duplicatetransient editconst KFPathNode DropDownNode;
native function bool IsUsableAnchorFor( Pawn P );
simulated event string GetDebugAbbrev()
{
return "WPN";
}
/**
* SpecialCost()
* Event allowing cost of this path to be modified based on who's pathing and which
* ReachSpec is in use.
*
* @param Seeker The pawn who is pathfinding
* @param Path ReachSpec connecting this navigation point to the end navigation point
* @return int Special cost to apply
*/
event int SpecialCost( Pawn Seeker, ReachSpec Path )
{
return super.SpecialCost(Seeker, Path);
}
/**
* Accept()
* Event that accepts or rejects an actor that has teleported to this node.
*
* @param Incoming
* @param Source
* @return function bool
*/
event bool Accept( actor Incoming, actor Source )
{
return Super.Accept( Incoming, Source );
}
/**
* DetourWeight()
* Value of this path to take a quick detour (usually 0, used when on route to distant objective)
*
* @param Other Detouring pawn
* @param PathWeight
* @return float
*/
event float DetourWeight( Pawn Other, float PathWeight )
{
return super.DetourWeight( Other, PathWeight );
}
/**
* SuggestMovePreparation()
* Optionally tell Pawn any special instructions to prepare for moving to this goal.
* (Called by Pawn.PrepareForMove() if this node's bSpecialMove==true)
*
* @param Other Pathfinding NPC
*/
event bool SuggestMovePreparation( Pawn Other )
{
// If special move was taken to get to this link
return Other.SpecialMoveTo(Other.Anchor, self, Other.Controller.MoveTarget);
}
defaultproperties
{
EditorIconColor=(R=50,G=50,B=255,A=255)
bSpecialMove=true // TODO: Look into auto-setting this, only for Wall to Floor and Floor to Wall ReachSpecs
bBuildLongPaths=false
bConnectToSameFloorOnly=false
WallReachSpecClass=class'KFGame.WallReachSpec'
bAutoConnectDropDownNodes=false
Max2DDistToFloorNodes=96.f
MaxJumpDist=512.f
MaxDistToNodesOnOtherFloors=300.f
bWallNode=true
MaxDropFromWallDistance=350.f
MaxFloorToWallDistance=100.f
bAutoAdjustZToCeiling=false
}