Overview Package Class Source Class tree Glossary
previous class      next class frames      no frames

Engine.NavigationPoint


00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
//=============================================================================
// NavigationPoint.
//
// NavigationPoints are organized into a network to provide AIControllers 
// the capability of determining paths to arbitrary destinations in a level
//
//=============================================================================
class NavigationPoint extends Actor
    hidecategories(Lighting,LightColor,Karma,Force)
    native;

#exec Texture Import File=Textures\S_Pickup.pcx Name=S_Pickup Mips=Off MASKED=1
#exec Texture Import File=Textures\SpwnAI.pcx Name=S_NavP Mips=Off MASKED=1

// not used currently
#exec Texture Import File=Textures\SiteLite.pcx Name=S_Alarm Mips=Off MASKED=1

//------------------------------------------------------------------------------
// NavigationPoint variables

var transient bool bEndPoint;       // used by C++ navigation code
var transient bool bTransientEndPoint; // set right before a path finding attempt, cleared afterward.
var transient bool bHideEditorPaths;    // don't show paths to this node in the editor
var transient bool bCanReach;       // used during paths review in editor

var bool taken;                 // set when a creature is occupying this spot
var() bool bBlocked;            // this path is currently unuseable 
var() bool bPropagatesSound;    // this navigation point can be used for sound propagation (around corners)
var() bool bOneWayPath;         // reachspecs from this path only in the direction the path is facing (180 degrees)
var() bool bNeverUseStrafing;   // shouldn't use bAdvancedTactics going to this point
var() bool bAlwaysUseStrafing;  // shouldn't use bAdvancedTactics going to this point
var const bool bForceNoStrafing;// override any LD changes to bNeverUseStrafing
var const bool bAutoBuilt;      // placed during execution of "PATHS BUILD"
var bool bSpecialMove;          // if true, pawn will call SuggestMovePreparation() when moving toward this node
var bool bNoAutoConnect;        // don't connect this path to others except with special conditions (used by LiftCenter, for example)
var const bool  bNotBased;      // used by path builder - if true, no error reported if node doesn't have a valid base
var const bool  bPathsChanged;  // used for incremental path rebuilding in the editor
var bool        bDestinationOnly; // used by path building - means no automatically generated paths are sourced from this node
var bool        bSourceOnly;    // used by path building - means this node is not the destination of any automatically generated path
var bool        bSpecialForced; // paths that are forced should call the SpecialCost() and SuggestMovePreparation() functions
var bool        bMustBeReachable;   // used for PathReview code
var bool        bBlockable;     // true if path can become blocked (used by pruning during path building)
var bool        bFlyingPreferred;   // preferred by flying creatures
var bool        bMayCausePain;      // set in C++ if in PhysicsVolume that may cause pain
var bool    bReceivePlayerToucherDiedNotify;
var bool bAlreadyVisited;   // internal use
var() bool  bVehicleDestination;    // if true, forced paths to this node will have max width to accomodate vehicles
var() bool bMakeSourceOnly;
var() bool  bNoSuperSize;           // hack for Leviathans, which pretend to be smaller than they really are to use the path network - this forces them not to use a path
var bool    bForcedOnly;            // only connect forced paths to this NavigationPoint

var const array<ReachSpec> PathList; //index of reachspecs (used by C++ Navigation code)
var() name ProscribedPaths[4];  // list of names of NavigationPoints which should never be connected from this path
var() name ForcedPaths[4];      // list of names of NavigationPoints which should always be connected from this path
var int visitedWeight;
var const int bestPathWeight;
var const NavigationPoint nextNavigationPoint;
var const NavigationPoint nextOrdered;  // for internal use during route searches
var const NavigationPoint prevOrdered;  // for internal use during route searches
var const NavigationPoint previousPath;
var int cost;                   // added cost to visit this pathnode
var() int ExtraCost;            // Extra weight added by level designer
var transient int TransientCost;    // added right before a path finding attempt, cleared afterward.
var transient int FearCost;     // extra weight diminishing over time (used for example, to mark path where bot died)

var Pickup  InventoryCache;     // used to point to dropped weapons
var float   InventoryDist;
var const float LastDetourWeight;

var byte BaseVisible[2];        // used by some team game types- whether this point is visible from red base or defense points
var float BaseDist[2];          // used by some team game types - distance to red base

var vector MaxPathSize;

function PostBeginPlay()
{
    local int i;
    
    ExtraCost = Max(ExtraCost,0);
    
    for ( i=0; i<PathList.Length; i++ )
    {
        MaxPathSize.X = FMax(MaxPathSize.X, PathList[i].CollisionRadius);
        MaxPathSize.Z = FMax(MaxPathSize.Z, PathList[i].CollisionHeight);
    }
    MaxPathSize.Y = MaxPathSize.X;
    Super.PostBeginPlay();
}

native final function SetBaseDistance(int BaseNum);

function SetBaseVisibility(int BaseNum)
{
    local NavigationPoint N;
    
    BaseVisible[BaseNum] = 1;
    for ( N=Level.NavigationPointList; N!=None; N=N.NextNavigationPoint )
        if ( (N.BaseVisible[BaseNum] == 0) && FastTrace(N.Location + (88 - 2*N.CollisionHeight)*Vect(0,0,1), Location + (88 - 2*N.CollisionHeight)*Vect(0,0,1)) )
            N.BaseVisible[BaseNum] = 1;
}

event int SpecialCost(Pawn Seeker, ReachSpec Path);

// Accept an actor that has teleported in.
// used for random spawning and initial placement of creatures
event bool Accept( actor Incoming, actor Source )
{
    // Move the actor here.
    taken = Incoming.SetLocation( Location );
    if (taken)
    {
        Incoming.Velocity = vect(0,0,0);
        Incoming.SetRotation(Rotation);
    }
    Incoming.PlayTeleportEffect(true, false);
    TriggerEvent(Event, self, Pawn(Incoming));
    return taken;
}

/* DetourWeight()
value of this path to take a quick detour (usually 0, used when on route to distant objective, but want to grab inventory for example)
*/
event float DetourWeight(Pawn Other,float 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
*/
event bool SuggestMovePreparation(Pawn Other)
{
    return false;
}

/* ProceedWithMove()
Called by Controller to see if move is now possible when a mover reports to the waiting
pawn that it has completed its move
*/
function bool ProceedWithMove(Pawn Other)
{
    return true;
}

/* MoverOpened() & MoverClosed() used by NavigationPoints associated with movers */
function MoverOpened();
function MoverClosed();

/* needed for HoldObjectives */
function PlayerToucherDied( Pawn P );

defaultproperties
{
     bPropagatesSound=True
     bMayCausePain=True
     BaseDist(0)=1000000.000000
     BaseDist(1)=1000000.000000
     bStatic=True
     bHidden=True
     bNoDelete=True
     Texture=Texture'Engine.S_NavP'
     bCollideWhenPlacing=True
     SoundVolume=0
     CollisionRadius=40.000000
     CollisionHeight=43.000000
}

Overview Package Class Source Class tree Glossary
previous class      next class frames      no frames
Class file time: Mon 23/10/2006 20:25:16.000 - Creation time: Wed 7/2/2007 19:16:45.281 - Created with UnCodeX