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.");
            }
Exemple #2
0
        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);
        }
Exemple #3
0
        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.");
            }
Exemple #5
0
        internal void Fusion(Nanobot oldBot)
        {
            int index = mSeeds.Count;

            for (; index > 0 && mSeeds[index - 1] > oldBot.Bid; --index)
            {
            }
            mSeeds.Insert(index, oldBot.Bid);
        }
Exemple #6
0
            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.");
            }
Exemple #7
0
            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);
                    }
                }
            }
Exemple #8
0
 internal override void ApplyToState(State state, Nanobot bot)
 {
     state.Harmonics = (state.Harmonics == High) ? Low : High;
 }
Exemple #9
0
 internal override IEnumerable <Coord> GetVolatile(Nanobot bot)
 {
     yield return(bot.Pos);
 }
Exemple #10
0
 internal override void ApplyToState(State state, Nanobot bot)
 {
     state.RemoveBot(bot);
 }
Exemple #11
0
 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;
 }
Exemple #13
0
 internal override void ApplyToState(State state, Nanobot bot)
 {
     // Nothing to do.
 }
Exemple #14
0
 internal void RemoveBot(Nanobot bot)
 {
     mBots.Remove(bot);
 }
Exemple #15
0
 internal override void ApplyToState(State state, Nanobot bot)
 {
     state.FillVoxel(bot.Pos + mNd);
 }
Exemple #16
0
 internal override void ApplyToState(State state, Nanobot bot)
 {
     bot.Pos       = bot.Pos + mSld1 + mSld2;
     state.Energy += 2 * (mSld1.Mlen() + 2 + mSld2.Mlen());
 }
Exemple #17
0
 internal override void ApplyToState(State state, Nanobot bot)
 {
     bot.Pos      += mLld;
     state.Energy += 2 * mLld.Mlen();
 }
Exemple #18
0
 internal override IEnumerable <Coord> GetVolatile(Nanobot bot)
 => Region.Of(bot.Pos, bot.Pos + mLld).GetMembers();