Terrarium.Game.GameEngine.incubate C# (CSharp) Метод

incubate() приватный Метод

private incubate ( ) : void
Результат void
        private void incubate()
        {
            foreach (string organismID in _organismIDList)
            {
                OrganismState organismState = _newWorldState.GetOrganismState(organismID);
                if (organismState == null || !organismState.IsAlive || !organismState.IsIncubating) continue;
                if (organismState.IncubationTicks == EngineSettings.TicksToIncubate)
                {
                    Point newPosition = findEmptyPosition(organismState.CellRadius, Point.Empty);
                    if (newPosition != Point.Empty)
                    {
                        // Only birth an organism if there is space
                        NewOrganism newOrganism = new NewOrganism(
                            ((Species) organismState.Species).InitializeNewState(newPosition,
                                                                                 organismState.Generation + 1),
                            (organismState.CurrentReproduceAction.Dna == null)
                                ? (new byte[0])
                                : ((byte[]) organismState.CurrentReproduceAction.Dna.Clone()));
                        _newOrganismQueue.Enqueue(newOrganism);
                    }
                    else
                    {
                        // Kill the organism since there is no place to put it
                        OnEngineStateChanged(new EngineStateChangedEventArgs(EngineStateChangeType.Other,
                                                                             "A '" +
                                                                             ((Species) organismState.Species).Name +
                                                                             "' died during birth: couldn't find an open spot quickly enough."));
                    }

                    organismState.OrganismEvents.ReproduceCompleted =
                        new ReproduceCompletedEventArgs(organismState.CurrentReproduceAction.ActionID,
                                                        organismState.CurrentReproduceAction);
                    organismState.ResetReproductionWait();
                    organismState.CurrentReproduceAction = null;
                }
                else
                {
                    // Only incubate if the organism isn't hungry
                    if (organismState.EnergyState >= EnergyState.Normal)
                    {
                        if (organismState is AnimalState)
                        {
                            organismState.BurnEnergy(organismState.Radius*
                                                     EngineSettings.AnimalIncubationEnergyPerUnitOfRadius);
                        }
                        else
                        {
                            Debug.Assert(organismState is PlantState);
                            organismState.BurnEnergy(organismState.Radius*
                                                     EngineSettings.PlantIncubationEnergyPerUnitOfRadius);
                        }

                        organismState.AddIncubationTick();
                    }
                }
            }
        }