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