Example #1
0
        public static GameUnit PickNextEnergyPacketTarget(UnitConduit CurConduit, GameUnit Except1, GameUnit Except2)
        {
            if (CurConduit.LinkedConduit != null)
            {
                if (CurConduit.LinkedConduit.Destroyed)
                {
                    CurConduit.LinkedConduit = null;
                }
                else
                {
                    return(CurConduit.LinkedConduit);
                }
            }

            PickInRange(ref GameUnitsTemp, out int Length, CurConduit.Position, UnitConduit.ConnectRangePower);

            if (Length == 0)
            {
                return(null);
            }

            for (int i = 0; i < Length; i++)
            {
                if (GameUnitsTemp[i] == Except1 || GameUnitsTemp[i] == Except2)
                {
                    GameUnitsTemp[i] = null;
                    continue;
                }

                if (GameUnitsTemp[i] is UnitMineral)
                {
                    GameUnitsTemp[i] = null;
                    continue;
                }

                if (GameUnitsTemp[i] is UnitConduit)
                {
                    continue;
                }

                if (!GameUnitsTemp[i].CanAcceptEnergyPacket())
                {
                    GameUnitsTemp[i] = null;
                    continue;
                }
                else
                {
                    return(GameUnitsTemp[i]);
                }
            }

            int MaxLen = Utils.Rearrange(GameUnitsTemp);

            if (MaxLen <= 0)
            {
                return(null);
            }

            return(GameUnitsTemp[Utils.Random(0, MaxLen)]);
        }
Example #2
0
        public override void SlowUpdate()
        {
            UnitConduit RandomTarget = Utils.Random(GameEngine.PickInRange(Position, UnitConduit.ConnectRangePower).OfType <UnitConduit>().ToArray());

            if (RandomTarget == null)
            {
                return;
            }

            GameEngine.Spawn(new UnitEnergyPacket(Position, RandomTarget));
        }
Example #3
0
 public UnitEnergyPacket(UnitConduit Source, GameUnit Target) : this(Source.Position, Target)
 {
     Previous = Source;
 }