/** * This constraint is to make path searches be biased against choosing in the same set polys over and over. * For Example: if we spawn in place a b c we do not want to spawn there again if there is a place d that matches * our criteria for spawning of guys. We often use this for determining places that No One Has Spawned Near Here Before. * * * Copyright 1998-2013 Epic Games, Inc. All Rights Reserved. */ class NavMeshPath_BiasAgainstPolysWithinDistanceOfLocations extends NavMeshPathConstraint native; /** Location to compare from **/ var transient vector Location; var transient vector Rotation; /** How far we want to spawn away from a previous spawn. **/ var transient float DistanceToCheck; /** Set of places we have spawned before **/ var transient array LocationsToCheck; cpptext { // Interface virtual UBOOL EvaluatePath( FNavMeshEdgeBase* Edge, FNavMeshEdgeBase* PredecessorEdge, FNavMeshPolyBase* SrcPoly, FNavMeshPolyBase* DestPoly, const FNavMeshPathParams& PathParams, INT& out_PathCost, INT& out_HeuristicCost, const FVector& EdgePoint ); } static function bool BiasAgainstPolysWithinDistanceOfLocations ( NavigationHandle NavHandle, const vector InLocation, const rotator InRotation, const float InDistanceToCheck, const array InLocationsToCheck ) { local NavMeshPath_BiasAgainstPolysWithinDistanceOfLocations Con; if( NavHandle != None ) { Con = NavMeshPath_BiasAgainstPolysWithinDistanceOfLocations(NavHandle.CreatePathConstraint(default.class)); if( Con != None ) { Con.Location = InLocation; Con.Rotation = vector(InRotation); Con.DistanceToCheck = InDistanceToCheck; Con.LocationsToCheck = InLocationsToCheck; NavHandle.AddPathConstraint( Con ); return TRUE; } } return FALSE; } function Recycle() { Super.Recycle(); } defaultproperties { }