public static void DoFlood(Level lvl, ref PhysInfo C, AirFlood mode, BlockID block)
        {
            if (C.Data.Data >= 1)
            {
                lvl.AddUpdate(C.Index, Block.Air, default(PhysicsArgs));
                C.Data.Data = PhysicsArgs.RemoveFromChecks; return;
            }

            ushort x = C.X, y = C.Y, z = C.Z;

            FloodAir(lvl, (ushort)(x + 1), y, z, block);
            FloodAir(lvl, (ushort)(x - 1), y, z, block);
            FloodAir(lvl, x, y, (ushort)(z + 1), block);
            FloodAir(lvl, x, y, (ushort)(z - 1), block);

            switch (mode)
            {
            case AirFlood.Full:
                FloodAir(lvl, x, (ushort)(y - 1), z, block);
                FloodAir(lvl, x, (ushort)(y + 1), z, block);
                break;

            case AirFlood.Layer:
                break;

            case AirFlood.Down:
                FloodAir(lvl, x, (ushort)(y - 1), z, block);
                break;

            case AirFlood.Up:
                FloodAir(lvl, x, (ushort)(y + 1), z, block);
                break;
            }
            C.Data.Data++;
        }
示例#2
0
 public static void DoFlood(Level lvl, Check C, Random rand, AirFlood mode, byte block) {
     if (C.time >= 1) {
         lvl.AddUpdate(C.b, 0);
         C.time = 255; return;
     }
     ushort x, y, z;
     lvl.IntToPos(C.b, out x, out y, out z);
     
     FloodAir(lvl, lvl.PosToInt((ushort)(x + 1), y, z), block);
     FloodAir(lvl, lvl.PosToInt((ushort)(x - 1), y, z), block);
     FloodAir(lvl, lvl.PosToInt(x, y, (ushort)(z + 1)), block);
     FloodAir(lvl, lvl.PosToInt(x, y, (ushort)(z - 1)), block);
     
     switch (mode) {
         case AirFlood.Full:
             FloodAir(lvl, lvl.PosToInt(x, (ushort)(y - 1), z), block);
             FloodAir(lvl, lvl.PosToInt(x, (ushort)(y + 1), z), block);
             break;
         case AirFlood.Layer:
             break;
         case AirFlood.Down:
             FloodAir(lvl, lvl.PosToInt(x, (ushort)(y - 1), z), block);
             break;
         case AirFlood.Up:
             FloodAir(lvl, lvl.PosToInt(x, (ushort)(y + 1), z), block);
             break;
     }
     C.time++;
 }
示例#3
0
        public static void DoFlood(Level lvl, ref Check C, AirFlood mode, byte block)
        {
            Random rand = lvl.physRandom;

            if (C.data.Data >= 1)
            {
                lvl.AddUpdate(C.b, Block.air);
                C.data.Data = PhysicsArgs.RemoveFromChecks; return;
            }
            ushort x, y, z;

            lvl.IntToPos(C.b, out x, out y, out z);

            FloodAir(lvl, lvl.PosToInt((ushort)(x + 1), y, z), block);
            FloodAir(lvl, lvl.PosToInt((ushort)(x - 1), y, z), block);
            FloodAir(lvl, lvl.PosToInt(x, y, (ushort)(z + 1)), block);
            FloodAir(lvl, lvl.PosToInt(x, y, (ushort)(z - 1)), block);

            switch (mode)
            {
            case AirFlood.Full:
                FloodAir(lvl, lvl.PosToInt(x, (ushort)(y - 1), z), block);
                FloodAir(lvl, lvl.PosToInt(x, (ushort)(y + 1), z), block);
                break;

            case AirFlood.Layer:
                break;

            case AirFlood.Down:
                FloodAir(lvl, lvl.PosToInt(x, (ushort)(y - 1), z), block);
                break;

            case AirFlood.Up:
                FloodAir(lvl, lvl.PosToInt(x, (ushort)(y + 1), z), block);
                break;
            }
            C.data.Data++;
        }