/// <summary> /// Nyilvántartásba vesz egy felfedező hangyát /// </summary> /// <param name="UnderlyingAnt">A követendő hangya</param> public Explorer(CorvinusAnt UnderlyingAnt) : base(UnderlyingAnt) { this.Type = AntType.Explorer; this.UnderlyingAnt.EveryTick += new CorvinusAnt.TickDelegate(Explorer_UnderlyingAnt_EveryTick); this.Task = new Task(TaskType.Discover); }
/// <summary> /// Nyilvántartásba vesz egy cukorgyűjtögető hangyát /// </summary> /// <param name="UnderlyingAnt">A követendő hangya</param> public SugarWorker(CorvinusAnt UnderlyingAnt) : base(UnderlyingAnt) { this.Type = AntType.SugarWorker; this.UnderlyingAnt.EveryTick += new CorvinusAnt.TickDelegate(SugarWorker_UnderlyingAnt_EveryTick); this.UnderlyingAnt.Idle += new CorvinusAnt.IdleDelegate(SugarWorker_UnderlyingAnt_Idle); }
/// <summary> /// Nyilvántartásba vesz egy hangyát /// </summary> /// <param name="UnderlyingAnt">A hangya</param> protected AntBase(CorvinusAnt UnderlyingAnt) { this.UnderlyingAnt = UnderlyingAnt; if (this is Queen) { if (Queen.Ant != null) { throw new InvalidOperationException("Queen already exists"); } Queen.Ant = (Queen)this; return; } if (BaseList.Contains(UnderlyingAnt) || UnderlyingAnt.CurrentEnergy <= 0) { throw new InvalidOperationException("This ant is already being tracked"); } All.Add(this); this.UnderlyingAnt.Died += new CorvinusAnt.DiedDelegate(UnderlyingAnt_Died); this.UnderlyingAnt.EveryTick += new CorvinusAnt.TickDelegate(UnderlyingAnt_EveryTick); }
/// <summary> /// Nyilvántartásba vesz egy hangyát a megadott típussal /// </summary> /// <param name="Ant">A hangya</param> /// <param name="Type">Milyen típusú hangya legyen?</param> /// <returns>A nyilvántartott hangya</returns> public static AntBase TrackAs(CorvinusAnt Ant, AntType Type) { if (Type == AntType.Any) { throw new ArgumentException("AntType.Any cannot be used here"); } if (Ants.AntBase.BaseList.Contains(Ant)) { return null; } try { switch (Type) { case AntType.Queen: return new Queen(Ant); case AntType.Explorer: return new Explorer(Ant); case AntType.SugarWorker: return new SugarWorker(Ant); case AntType.FruitWorker: return new FruitWorker(Ant); case AntType.Soldier: return new Soldier(Ant); default: throw new ArgumentException("Invalid ant type"); } } catch (InvalidOperationException) { return null; } }
/// <summary> /// Megkeresi egy adott eredeti hangyának a nyilvántartott párját /// </summary> /// <param name="Ant">A hangya</param> /// <returns>A talált nyilvántartott hangya, vagy null, ha nincs ilyen</returns> public static AntBase FindBy(CorvinusAnt Ant) { foreach (AntBase item in All) { if (item.UnderlyingAnt == Ant) { return item; } } return null; }
/// <summary> /// Nyilvántartásba vesz egy harcos hangyát /// </summary> /// <param name="UnderlyingAnt">A követendő hangya</param> public Soldier(CorvinusAnt UnderlyingAnt) : base(UnderlyingAnt) { this.Type = AntType.Soldier; }
/// <summary> /// Nyilvántartásba veszi a királynőt /// </summary> /// <param name="UnderlyingAnt">A követendő királynő</param> public Queen(CorvinusAnt UnderlyingAnt) : base(UnderlyingAnt) { this.Type = AntType.Queen; this.UnderlyingAnt.EveryTick += new CorvinusAnt.TickDelegate(Queen_UnderlyingAnt_EveryTick); }