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)]); }
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)); }
public UnitEnergyPacket(UnitConduit Source, GameUnit Target) : this(Source.Position, Target) { Previous = Source; }