Esempio n. 1
0
        /// <summary>
        ///     Gets the minions of the specified type and team
        /// </summary>
        /// <param name="type">The minion type flags</param>
        /// <param name="team">The requested team</param>
        /// <param name="inrange">The function determining whether this instance is in range</param>
        /// <returns></returns>
        public static List <Obj_AI_Minion> GetMinions(ObjectTeam team = ObjectTeam.Enemy | ObjectTeam.Ally, MinionType type = MinionType.Minion, Predicate <Obj_AI_Minion> inrange = null)
        {
            var container = new List <Obj_AI_Minion>();

            if ((type & MinionType.Minion) != 0)
            {
                container.AddRange(Minions);
            }
            if ((type & MinionType.Ward) != 0)
            {
                container.AddRange(Wards);
            }
            if ((type & MinionType.Pet) != 0)
            {
                container.AddRange(Pets);
            }
            if ((type & MinionType.Plant) != 0)
            {
                container.AddRange(Plants);
            }
            if ((type & MinionType.Jungle) != 0)
            {
                container.AddRange(JungleMinions);
            }
            if ((type & MinionType.Other) != 0)
            {
                container.AddRange(OtherMinions);
            }

            return(Selector(container, team, inrange));
        }
Esempio n. 2
0
 public Flag(int id, Vector position, ObjectTeam team, ObjectState state)
 {
     Id       = Id;
     Position = position;
     Team     = team;
     State    = state;
 }
Esempio n. 3
0
        /// <summary>
        ///     Gets the minions of the specified type and team
        /// </summary>
        /// <param name="type">The minion type flags</param>
        /// <param name="team">The requested team</param>
        /// <param name="inrange">The function determining whether this instance is in range</param>
        /// <returns></returns>
        public static List <Obj_AI_Minion> GetMinions(ObjectTeam team = ObjectTeam.Enemy, MinionType type = MinionType.Minion, Predicate <Obj_AI_Minion> inrange = null)
        {
            var container = new List <Obj_AI_Minion>(Obj_AI_MinionList.Count);

            if (type.HasFlag(MinionType.Minion))
            {
                container.AddRange(Minions);
            }
            if (type.HasFlag(MinionType.Ward))
            {
                container.AddRange(Wards);
            }
            if (type.HasFlag(MinionType.Pet))
            {
                container.AddRange(Pets);
            }
            if (type.HasFlag(MinionType.Jungle))
            {
                container.AddRange(JungleMinions);
            }
            if (type.HasFlag(MinionType.Other))
            {
                container.AddRange(OtherMinions);
            }

            return(Selector(container, team, true, true, inrange));
        }
Esempio n. 4
0
        /// <summary>
        ///     Gets the GameObjects of the specified type and team
        /// </summary>
        /// <typeparam name="TGameObject">The requested <see cref="GameObject" /> type</typeparam>
        /// <param name="team">The specified object team</param>
        /// <param name="predicate">The function determining whether this instance is eligible</param>
        /// <returns></returns>
        public static List <TGameObject> Get <TGameObject>(ObjectTeam team = ObjectTeam.Ally | ObjectTeam.Enemy | ObjectTeam.Neutral, Predicate <TGameObject> predicate = null) where TGameObject : GameObject
        {
            var name = typeof(TGameObject).Name + "List";

            FieldInfo field;

            // Found it cached
            if (FieldData.TryGetValue(name, out field))
            {
                return(Selector((List <TGameObject>)field.GetValue(null), team, predicate));
            }

            var container = GameObjectList.ConvertAll(o => o as TGameObject).FindAll(o => o != null);

            field = GetField(name);

            // This type of GameObject is supported however cache is being just initialized
            if (field != null)
            {
                field.SetValue(null, container);
                FieldData.Add(name, field);
            }

            return(Selector(container, team, predicate));
        }
Esempio n. 5
0
        /// <summary>
        ///     Gets minions in a similiar way to <see cref="E:MinionManager" />
        /// </summary>
        /// <param name="from">The from</param>
        /// <param name="range">The range to take minions from</param>
        /// <param name="team">The team</param>
        /// <param name="type">The minion type</param>
        /// <returns></returns>
        public static List <Obj_AI_Base> GetMinions(Vector2 from, float range, ObjectTeam team = ObjectTeam.Enemy, MinionType type = MinionType.Minion)
        {
            var container = new List <Obj_AI_Base>(Obj_AI_MinionList.Count);

            if (type.HasFlag(MinionType.Minion))
            {
                container.AddRange(Minions);
            }
            if (type.HasFlag(MinionType.Ward))
            {
                container.AddRange(Wards);
            }
            if (type.HasFlag(MinionType.Pet))
            {
                container.AddRange(Pets);
            }
            if (type.HasFlag(MinionType.Jungle))
            {
                container.AddRange(JungleMinions);
            }
            if (type.HasFlag(MinionType.Other))
            {
                container.AddRange(OtherMinions);
            }

            if (from.IsZero)
            {
                from = Player.ServerPosition.ToVector2();
            }

            var infinity = float.IsPositiveInfinity(range *= range);

            return(Selector(container, team, true, true, @base => infinity || Vector2.DistanceSquared(@base.ServerPosition.ToVector2(), from) <= range));
        }
Esempio n. 6
0
        public static List <TGameObject> Get <TGameObject>(ObjectTeam team = ObjectTeam.Ally | ObjectTeam.Enemy | ObjectTeam.Neutral, Predicate <TGameObject> inrange = null) where TGameObject : GameObject
        {
            FieldInfo field;
            var       name = typeof(TGameObject).Name + "List";

            // Found it cached
            if (FieldData.TryGetValue(name, out field))
            {
                return(Selector((List <TGameObject>)field.GetValue(null), team, true, true, inrange));
            }

            var container = GameObjectList.OfType <GameObject, TGameObject>(o => o.IsValid);

            field = GetField(name);

            // ReSharper disable once InvertIf
            // This type of GameObject is supported however cache is being just initialized
            if (field != null)
            {
                field.SetValue(null, container);
                FieldData.Add(name, field);
            }

            return(Selector(container, team, true, false, inrange));
        }
Esempio n. 7
0
        public static void DrawFlag(double diameter, ObjectTeam team, Vector position)
        {
            var colour = ChooseBrushColour(team);
            var pole   = new Line();
            var flag   = new Rectangle();

            pole.Stroke          = colour;
            pole.Fill            = colour;
            pole.StrokeThickness = 0.8;

            pole.X1 = position.X;
            pole.Y1 = position.Y;

            pole.X2 = position.X;
            pole.Y2 = position.Y + diameter;

            flag.Width  = diameter;
            flag.Height = diameter / 2;

            flag.Stroke = colour;
            flag.Fill   = colour;
            flag.Margin = new Thickness(0, 0, 0, 0);

            Canvas.SetLeft(flag, position.X);
            Canvas.SetBottom(flag, position.Y - diameter / 2);

            _canvas.Children.Add(flag);
            _canvas.Children.Add(pole);
        }
Esempio n. 8
0
 public Player(int id, ObjectTeam team, Vector position)
 {
     _maxSpeed = 10;
     State     = ObjectState.Idle;
     Team      = team;
     Id        = id;
     Position  = position;
     Velocity  = new Vector(0, 0);
 }
Esempio n. 9
0
        public static SolidColorBrush ChooseBrushColour(ObjectTeam team)
        {
            switch (team)
            {
            case ObjectTeam.Red:
                return(Brushes.Red);

            case ObjectTeam.Blue:
                return(Brushes.Blue);

            default:
                return(Brushes.Black);
            }
        }
Esempio n. 10
0
        public static void DrawCircle(double diameter, ObjectTeam team, Vector position)
        {
            var colour = ChooseBrushColour(team);
            var circle = new Ellipse();

            circle.Width  = diameter;
            circle.Height = diameter;
            circle.Stroke = colour;
            circle.Fill   = colour;

            Canvas.SetLeft(circle, position.X);
            Canvas.SetBottom(circle, position.Y);

            _canvas.Children.Add(circle);
        }
Esempio n. 11
0
        /// <summary>
        ///     Gets minions in a similar way to <see cref="E:MinionManager" />
        /// </summary>
        /// <param name="from">The from</param>
        /// <param name="range">The range to take minions from</param>
        /// <param name="team">The team</param>
        /// <param name="type">The minion type</param>
        /// <returns></returns>
        public static List <Obj_AI_Base> GetMinions(Vector2 from, float range, ObjectTeam team = ObjectTeam.Enemy, MinionType type = MinionType.Minion)
        {
            var container = new List <Obj_AI_Base>();

            if ((type & MinionType.Minion) != 0)
            {
                container.AddRange(Minions);
            }
            if ((type & MinionType.Ward) != 0)
            {
                container.AddRange(Wards);
            }
            if ((type & MinionType.Pet) != 0)
            {
                container.AddRange(Pets);
            }
            if ((type & MinionType.Plant) != 0)
            {
                container.AddRange(Plants);
            }
            if ((type & MinionType.Jungle) != 0)
            {
                container.AddRange(JungleMinions);
            }
            if ((type & MinionType.Other) != 0)
            {
                container.AddRange(OtherMinions);
            }

            if (from.IsZero)
            {
                from = Player.ServerPosition.ToVector2();
            }

            range *= range;

            if (float.IsPositiveInfinity(range))
            {
                return(Selector(container, team, null));
            }

            return(Selector(container, team, @base => Vector2.DistanceSquared(from, @base.ServerPosition.ToVector2()) <= range));
        }
Esempio n. 12
0
 /// <summary>
 ///     Returns a matched list
 /// </summary>
 /// <typeparam name="TGameObject">The requested <see cref="GameObject" /> type</typeparam>
 /// <param name="container">The original list</param>
 /// <param name="flags">The provided team flags</param>
 /// <param name="predicate">The function to check if the unit meets the condition</param>
 /// <returns></returns>
 private static List <TGameObject> Selector <TGameObject>(List <TGameObject> container, ObjectTeam flags, Predicate <TGameObject> predicate) where TGameObject : GameObject
 {
     return(predicate == null?container.FindAll(o => (flags & o.Team()) != 0) : container.FindAll(o => (flags & o.Team()) != 0 && predicate(o)));
 }
Esempio n. 13
0
        /// <summary>
        ///     Returns a matched list
        /// </summary>
        /// <typeparam name="TGameObject">The requested <see cref="GameObject" /> type</typeparam>
        /// <param name="container">The original list</param>
        /// <param name="flags">The provided team flags</param>
        /// <param name="moreChecks">Determines whether to perform additional checks</param>
        /// <param name="validityCheck">The additional predicate</param>
        /// <param name="inrange">The function to check if the unit is in range</param>
        /// <returns></returns>
        private static List <TGameObject> Selector <TGameObject>(List <TGameObject> container, ObjectTeam flags, bool moreChecks, bool validityCheck, Predicate <TGameObject> inrange) where TGameObject : GameObject
        {
            return(container.FindAll(o =>
            {
                if (validityCheck && (o == null || !o.IsValid))
                {
                    return false;
                }

                var team = o.Team;

                if (!flags.HasFlag(TeamDictionary.Single(pair => pair.Value == team).Key) || inrange != null && !inrange(o))
                {
                    return false;
                }

                if (!moreChecks)
                {
                    return true;
                }

                if (!o.IsVisible || o.IsDead)
                {
                    return false;
                }

                var attackable = o as AttackableUnit;

                if (attackable == null)
                {
                    return true;
                }

                if (attackable.IsInvulnerable || attackable.IsZombie || (team != AlliedTeam && !attackable.IsTargetable))
                {
                    return false;
                }

                var @base = attackable as Obj_AI_Base;
                return @base == null || @base.HealthPercent > 10f || @base.Buffs.All(buff => buff.Type != BuffType.Invulnerability && buff.Name != "kindredrnodeathbuff");
            }));
        }