Beispiel #1
0
        public void SetTileDynamic(TilePosition pos, bool dynamic, bool useGravity, int timeout)
        {
            if (tiles[pos.x | (pos.y << sizeXbits) | (pos.z << sizeXBitsYBits)].Dynamic != dynamic)
            {
                if (tiles[pos.x | (pos.y << sizeXbits) | (pos.z << sizeXBitsYBits)].Dynamic)
                {
                    DynamicTile dynamicTile = dynamicTiles[pos];
                    dynamicTiles.Remove(pos);
                    if (dynamicTile.timeout > 0)
                    {
                        dynamicTilesTimeout.Remove(pos);
                    }
                    world.cwListener.DestroyObject(dynamicTile);
                    dynamicTile.Clear();
                }

                tiles[pos.x | (pos.y << sizeXbits) | (pos.z << sizeXBitsYBits)].Dynamic = dynamic;

                if (dynamic)
                {
                    DynamicTile dynamicTile = new DynamicTile(world, pos, true, world.gameplay.NextObjectId());
                    if (useGravity)
                    {
                        dynamicTile.AddComponent(new TileComponentGravity());
                    }
                    dynamicTiles[pos] = dynamicTile;
                    if (timeout > 0)
                    {
                        dynamicTile.timeout      = timeout;
                        dynamicTilesTimeout[pos] = dynamicTile;
                    }

                    world.cwListener.CreateObject(dynamicTile);
                }

                if (reportTileInvalidated)
                {
                    ReportTileInvalidated(pos);
                }
            }
            else
            {
                if (dynamic && timeout >= 0)
                {
                    SetTileDynamicTimeout(pos, timeout);
                }
            }
        }