public void Update() { if (updateQueue.Count == 0) { return; } lock (queueLock) { int n = updateQueue.Count; for (int i = 0; i < n; i++) { PhysicsBlock block = updateQueue.Dequeue(); if (((TimeSpan)(DateTime.Now - block.startTime)).TotalMilliseconds >= PhysicsTime(block.type)) { switch (block.type) { case Blocks.air: AirCheck(block.x, block.y, block.z); break; case Blocks.water: GenericSpread(block.x, block.y, block.z, block.type, false); CheckWaterLavaCollide(block.x, block.y, block.z, block.type); break; case Blocks.lava: GenericSpread(block.x, block.y, block.z, block.type, false); CheckWaterLavaCollide(block.x, block.y, block.z, block.type); break; case Blocks.unflood: Unflood(block.x, block.y, block.z, block.type); break; case Blocks.sponge: NewSponge(block.x, block.y, block.z); break; case Blocks.staircasestep: Staircase(block); break; default: if (Blocks.AffectedByGravity(block.type)) { SandGravelFall(block.x, block.y, block.z, block.type); } break; } } else { updateQueue.Enqueue(block); } } } }
public void Staircase(PhysicsBlock block) { if (world.GetTile(block.x, block.y, block.z) != block.type) { return; } if (world.GetTile(block.x, block.y - 1, block.z) == Blocks.staircasestep) { world.SetTile(block.x, block.y - 1, block.z, Blocks.staircasefull); world.SetTile(block.x, block.y, block.z, Blocks.air); } }