public void FlagNodes(IEnumerable <AvoidanceNode> nodes, AvoidanceFlags flags, int weightModification = 0) { foreach (var node in nodes.Where(node => node != null && node.AvoidanceFlags.HasFlag(AvoidanceFlags.AllowWalk))) { node.Weight += weightModification; node.AddNodeFlags(flags); } }
public bool RemoveNodeFlags(AvoidanceFlags flags) { if (flags != AvoidanceFlags.None) { AvoidanceFlags &= ~flags; return(true); } return(false); }
public bool AddNodeFlags(AvoidanceFlags flags) { if (flags != AvoidanceFlags.None) { AvoidanceFlags |= flags; return(true); } return(false); }
public void FlagAvoidanceNodes(IEnumerable <AvoidanceNode> nodes, AvoidanceFlags flags, Avoidance.Structures.Avoidance avoidance, int weightModification = 0) { var type = avoidance.Definition.Type; var hashCode = avoidance.GetHashCode(); foreach (var node in nodes.Where(node => node != null && node.AvoidanceFlags.HasFlag(AvoidanceFlags.AllowWalk))) { if (type != AvoidanceType.None) { node.AvoidanceTypes.Add(type); } node.AvoidanceHashCodes.Add(hashCode); node.Weight += weightModification; node.AddNodeFlags(flags); } }
public bool UpdateNodes(TrinityGrid grid, Structures.Avoidance avoidance) { var actor = Core.Actors.RactorByRactorId <TrinityActor>(avoidance.RActorId); if (actor == null || !actor.IsValid) { return(false); } var fireChainFriendList = Core.Avoidance.CurrentAvoidances.Where(c => c != avoidance && c.ActorSno == avoidance.ActorSno) .ToList(); var appliedAvoidanceNode = false; foreach (var fireChainFriend in fireChainFriendList) { var friend = Core.Actors.RactorByRactorId <TrinityActor>(fireChainFriend.RActorId); if (friend == null || !friend.IsValid) { continue; } var nodes = grid.GetRayLineAsNodes(actor.Position, friend.Position).SelectMany(n => n.AdjacentNodes); AvoidanceFlags flags = AvoidanceFlags.Avoidance; int weightModification = BaseAvoidanceHandler.DefaultWeightModification; if (avoidance.Settings.Prioritize) { flags |= AvoidanceFlags.CriticalAvoidance; weightModification = BaseAvoidanceHandler.CriticalWeightModification; } grid.FlagAvoidanceNodes(nodes, flags, avoidance, weightModification); appliedAvoidanceNode = true; } if (appliedAvoidanceNode) { Core.DBGridProvider.AddCellWeightingObstacle(actor.RActorId, ObstacleFactory.FromActor(actor)); return(true); } return(false); }
protected void HandleNavigationGrid(AvoidanceFlags defaultFlags, TrinityGrid grid, IEnumerable <AvoidanceNode> nodes, Structures.Avoidance avoidance, TrinityActor actor, float radius, int normalWeightModificationOverride = 0) { AvoidanceFlags flags = defaultFlags; int weightModification = DefaultWeightModification; if (normalWeightModificationOverride != 0) { weightModification = normalWeightModificationOverride; } if (avoidance.Settings.Prioritize) { weightModification = CriticalWeightModification; flags |= AvoidanceFlags.CriticalAvoidance; } grid.FlagAvoidanceNodes(nodes, flags, avoidance, weightModification); Core.DBGridProvider.AddCellWeightingObstacle(actor.RActorId, ObstacleFactory.FromActor(actor, radius)); }