Exemple #1
0
        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);
                    }
                }
            }
        }
Exemple #2
0
        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);
            }
        }
Exemple #3
0
        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);
            }
        }