Esempio n. 1
0
 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);
     }
 }
Esempio n. 2
0
 public bool RemoveNodeFlags(AvoidanceFlags flags)
 {
     if (flags != AvoidanceFlags.None)
     {
         AvoidanceFlags &= ~flags;
         return(true);
     }
     return(false);
 }
Esempio n. 3
0
 public bool AddNodeFlags(AvoidanceFlags flags)
 {
     if (flags != AvoidanceFlags.None)
     {
         AvoidanceFlags |= flags;
         return(true);
     }
     return(false);
 }
Esempio n. 4
0
        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));
        }