Exemple #1
0
            public override bool Generate(CubeWorld.World.CubeWorld world)
            {
                switch (generationStep)
                {
                case 0:
                    world.tileManager.EnqueueTilesWithRules();
                    world.tileManager.enqueueTileUpdates = true;
                    generationStep++;
                    break;

                case 1:
                    if (world.tileManager.pendingTileUpdates.Count > 0 && initialIterations-- >= 0)
                    {
                        world.tileManager.Update(TILE_UPDATE_STEP);
                    }
                    else
                    {
                        generationStep++;
                    }
                    break;

                case 2:
                    LightModelAmbient.InitLuminance(world.tileManager);
                    generationStep++;
                    break;

                case 3:
                    LightModelLightSource.InitLuminance(world.tileManager);
                    generationStep++;
                    break;

                case 4:
                    world.tileManager.updateLighting        = true;
                    world.tileManager.reportTileInvalidated = true;

                    world.gameplay.WorldCreated();
                    return(true);
                }

                return(false);
            }
Exemple #2
0
        public void SetTileType(TilePosition pos, byte type)
        {
            Tile oldTile = tiles[pos.x | (pos.y << sizeXbits) | (pos.z << sizeXBitsYBits)];

            if (oldTile.Dynamic)
            {
                SetTileDynamic(pos, false, false, 0);
                oldTile.Dynamic = false;
            }

            if (oldTile.LightSource)
            {
                if (updateLighting)
                {
                    LightModelLightSource.UpdateLuminanceDark(this, pos);
                    oldTile.LightSourceLuminance = GetTileLightSourceLuminance(pos);
                }
                else
                {
                    oldTile.LightSourceLuminance = 0;
                }
            }

            Tile           newTile        = oldTile;
            TileDefinition tileDefinition = GetTileDefinition(type);

            newTile.tileType    = type;
            newTile.Energy      = (byte)tileDefinition.energy;
            newTile.Destroyed   = false;
            newTile.OnFire      = false;
            newTile.CastShadow  = tileDefinition.castShadow;
            newTile.LightSource = (tileDefinition.lightSourceIntensity > 0);
            newTile.ExtraData   = 0;

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

            if (updateLighting)
            {
                if (newTile.CastShadow != oldTile.CastShadow)
                {
                    if (newTile.CastShadow)
                    {
                        LightModelAmbient.UpdateLuminanceDark(this, pos);
                        LightModelLightSource.UpdateLuminanceDark(this, pos);
                    }
                    else
                    {
                        LightModelAmbient.UpdateLuminanceLight(this, pos, newTile.AmbientLuminance);
                        LightModelLightSource.UpdateLuminanceLight(this, pos, newTile.LightSourceLuminance);
                    }
                }

                if (tileDefinition.lightSourceIntensity > 0)
                {
                    LightModelLightSource.UpdateLuminanceLight(this, pos, tileDefinition.lightSourceIntensity);
                }
            }
            else
            {
                if (newTile.LightSource)
                {
                    SetTileLightSourceLuminance(pos, tileDefinition.lightSourceIntensity);
                }
            }

            ExecuteTileActions(pos, TileActionRule.ActionType.CREATED);

            if (enqueueTileUpdates)
            {
                EnqueueInvalidatedTileAndNearTiles(pos);
            }

            UpdateTopPosition(pos, type);

            if (reportTileInvalidated)
            {
                ReportTileInvalidated(pos);
            }
        }