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++; }
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++; }
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++; }