Exemplo n.º 1
0
        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);
                }
            }
        }
Exemplo n.º 2
0
        public IEnumerator BuildCoroutine(Chunk chunk)
        {
            // Never use more than 1/3 of a frame
            var yieldTimer = new IncrementalTimer(Time.realtimeSinceStartup, 1f / 180f);

            yield return(BuildBlocks(chunk, yieldTimer));

            yield return(BuildHazardsAndEnemies(chunk, yieldTimer));

            foreach (var space in _spaces)
            {
                chunk.Register(space.Name);
            }

            chunk.SetState(Chunk.ChunkState.Ready);
            Chunk.OnChunkChanged.Raise(chunk);
        }
Exemplo n.º 3
0
        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);
                }
            }
        }
Exemplo n.º 4
0
        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);
        }