Пример #1
0
        public override bool UpdateNodes(TrinityGrid grid, Structures.Avoidance avoidance)
        {
            var actor = Core.Actors.RactorByRactorId <TrinityActor>(avoidance.RActorId);

            if (actor == null || !actor.IsValid)
            {
                return(false);
            }

            var part = avoidance.Definition.GetPart(actor.Animation);

            var radius            = Math.Max(part.Radius, actor.Radius) * avoidance.Settings.DistanceMultiplier;
            var nonCachedRotation = actor.Rotation;
            var arcDegrees        = Math.Max(15, part.AngleDegrees);
            var nodes             = grid.GetConeAsNodes(actor.Position, arcDegrees, radius, nonCachedRotation);

            HandleNavigationGrid(grid, nodes.SelectMany(n => n.AdjacentNodes), avoidance, actor, radius);
            return(true);
        }
        public void UpdateNodes(TrinityGrid grid, Structures.Avoidance avoidance)
        {
            foreach (var actor in avoidance.Actors)
            {
                try
                {
                    var part = avoidance.Definition.GetPart(actor.Animation);
                    if (actor.Animation != part.Animation)
                    {
                        continue;
                    }

                    var radius            = Math.Max(part.Radius, actor.Radius) * avoidance.Settings.DistanceMultiplier;
                    var nonCachedRotation = actor.Rotation;
                    var arcDegrees        = Math.Max(15, part.AngleDegrees);
                    var nodes             = grid.GetConeAsNodes(actor.Position, arcDegrees, radius, nonCachedRotation);
                    grid.FlagAvoidanceNodes(nodes.SelectMany(n => n.AdjacentNodes), AvoidanceFlags.Avoidance, avoidance, 10);
                }
                catch (Exception ex)
                {
                    Core.Logger.Debug($"AnimationConeAvoidanceHandler Exception for Actor: {actor.InternalName}. {ex}");
                }
            }
        }