private IEnumerator BuildHazardsAndEnemies(Chunk chunk, IncrementalTimer timer) { foreach (var space in _spaces) { foreach (var hazardSpawn in space.GetHazardBuildersInChunk(chunk)) { var hazard = hazardSpawn.Build(chunk, space); if (hazard != null) { chunk.Register(hazard); } } foreach (var enemySpawn in space.GetEnemySpawnsInChunk(chunk)) { var enemyData = EnemySpawner.SpawnEnemy(enemySpawn.Type, enemySpawn.Position); chunk.Register(enemyData); } foreach (var enemy in _enemies) { chunk.Register(enemy); } if (timer.CheckIncrement(Time.realtimeSinceStartup)) { yield return(null); timer.AdvanceIncrement(Time.realtimeSinceStartup); } } }
private IEnumerator BuildBlocks(Chunk chunk, IncrementalTimer timer) { foreach (var builder in _blockBuilders) { var position = builder.Position; var blockType = BlockTypes.None; var featureToBuild = FeatureTypes.None; if (builder.IsFill) { builder.SetType(FillBlock); } blockType = builder.GetBlock(); featureToBuild = builder.GetFeature();; Block block = null; if (blockType != BlockTypes.None) { block = BlockLoader.CreateBlock(blockType, position); chunk.Register(block); } if (featureToBuild != FeatureTypes.None) { var feature = FeatureLoader.CreateFeature(featureToBuild, position); chunk.Register(feature); if (block != null) { feature.Assign(block); } feature.Assign(builder.Space); feature.Initialize(); } if (timer.CheckIncrement(Time.realtimeSinceStartup)) { yield return(null); timer.AdvanceIncrement(Time.realtimeSinceStartup); } } }
public IEnumerator ReconstructCoroutine(Chunk chunk) { // Never use more than 1/3 of a frame var yieldTimer = new IncrementalTimer(Time.realtimeSinceStartup, 1f / 180f); foreach (var serializableBlock in _blocks) { var block = serializableBlock.ToObject(); chunk.Register(block); if (yieldTimer.CheckIncrement(Time.realtimeSinceStartup)) { yield return(null); yieldTimer.AdvanceIncrement(Time.realtimeSinceStartup); } } foreach (var serializableFeature in _features) { var feature = serializableFeature.ToObject(); chunk.Register(feature); if (yieldTimer.CheckIncrement(Time.realtimeSinceStartup)) { yield return(null); yieldTimer.AdvanceIncrement(Time.realtimeSinceStartup); } } foreach (var serializedHazard in _hazards) { var hazard = serializedHazard.ToObject(); chunk.Register(hazard); if (yieldTimer.CheckIncrement(Time.realtimeSinceStartup)) { yield return(null); yieldTimer.AdvanceIncrement(Time.realtimeSinceStartup); } } foreach (var serializedEnemy in _enemies) { var enemy = serializedEnemy.ToObject(); chunk.Register(enemy); if (yieldTimer.CheckIncrement(Time.realtimeSinceStartup)) { yield return(null); yieldTimer.AdvanceIncrement(Time.realtimeSinceStartup); } } foreach (var serializedItem in _items) { var item = serializedItem.ToObject(); chunk.Register(item); if (yieldTimer.CheckIncrement(Time.realtimeSinceStartup)) { yield return(null); yieldTimer.AdvanceIncrement(Time.realtimeSinceStartup); } } foreach (var spaceUsed in _spacesUsed) { chunk.Register(spaceUsed); } chunk.SetState(Chunk.ChunkState.Ready); }