internal override void VerifyPreconds(State state, Nanobot bot) { Coord c0 = bot.Pos; Coord c1 = c0 + mNd; Verify(state.Matrix.Contains(c1), $"{c1} is out of the matrix."); }
internal Nanobot Fission(Coord pos, int m) { var newBot = new Nanobot(mSeeds[0], pos, mSeeds.Skip(1).Take(m)); mSeeds.RemoveRange(0, m + 1); return(newBot); }
internal void InsertBot(Nanobot bot) { int index = mBots.Count; for (; index > 0 && mBots[index - 1].Bid > bot.Bid; index--) { } mBots.Insert(index, bot); }
internal override void VerifyPreconds(State state, Nanobot bot) { Coord c0 = bot.Pos; Coord c1 = c0 + mNd; Verify(state.Matrix.Contains(c1), $"{c1} is out of the matrix."); Verify(state.Matrix[c1] == Voxel.Void, $"{c1} is Full."); Verify(bot.Seeds.Count >= mM + 1, $"The bot is lack of seeds."); }
internal void Fusion(Nanobot oldBot) { int index = mSeeds.Count; for (; index > 0 && mSeeds[index - 1] > oldBot.Bid; --index) { } mSeeds.Insert(index, oldBot.Bid); }
internal override void VerifyPreconds(State state, Nanobot bot) { Coord c0 = bot.Pos; Coord c1 = c0 + mLld; Verify(state.Matrix.Contains(c1), $"{c1} is out of the matrix."); Region c0c1 = Region.Of(c0, c1); Verify(c0c1.GetMembers().All(c => state.Matrix[c] == Voxel.Void), $"{c0c1} contains one or more Full coordinate."); }
internal override IEnumerable <Coord> GetVolatile(Nanobot bot) { Coord c0 = bot.Pos; Coord c1 = c0 + mSld1; Coord c2 = c1 + mSld2; foreach (Coord c in Region.Of(c0, c1).GetMembers()) { yield return(c); } foreach (Coord c in Region.Of(c1, c2).GetMembers()) { if (c != c1) { yield return(c); } } }
internal override void ApplyToState(State state, Nanobot bot) { state.Harmonics = (state.Harmonics == High) ? Low : High; }
internal override IEnumerable <Coord> GetVolatile(Nanobot bot) { yield return(bot.Pos); }
internal override void ApplyToState(State state, Nanobot bot) { state.RemoveBot(bot); }
internal override void VerifyPreconds(State state, Nanobot bot) { Verify(bot.Pos == Coord.Zero, "bot.Pos"); Verify(state.Bots.Count == 1 && state.Bots[0] == bot, "state.Bots"); Verify(state.Harmonics == Harmonics.Low, "state.Harmonics"); }
internal override void ApplyToState(State state, Nanobot bot) { state.InsertBot(bot.Fission(bot.Pos + mNd, mM)); state.Energy += 24; }
internal override void ApplyToState(State state, Nanobot bot) { // Nothing to do. }
internal void RemoveBot(Nanobot bot) { mBots.Remove(bot); }
internal override void ApplyToState(State state, Nanobot bot) { state.FillVoxel(bot.Pos + mNd); }
internal override void ApplyToState(State state, Nanobot bot) { bot.Pos = bot.Pos + mSld1 + mSld2; state.Energy += 2 * (mSld1.Mlen() + 2 + mSld2.Mlen()); }
internal override void ApplyToState(State state, Nanobot bot) { bot.Pos += mLld; state.Energy += 2 * mLld.Mlen(); }
internal override IEnumerable <Coord> GetVolatile(Nanobot bot) => Region.Of(bot.Pos, bot.Pos + mLld).GetMembers();