public static void GrowCell(CellAttributes cellToGrow, Organism organism)
    {
        organism.cells.AddCell(cellToGrow);

        CellsCreator.InstantiateCell(cellToGrow, organism.transform);

        organism.orderOfGrowth.RemoveFirst();

        SubtractEnergyForGrowth(cellToGrow.type.GetComponent <Cell>().bodyEnergy, organism.organismEnergy);

        organism.SetTotalEnergyStorage();

        int freeEnergyStorage = organism.organismEnergy.TotalEnergyStorage - organism.organismEnergy.Value;

        if (organism.organismEnergy.EggEnergy > freeEnergyStorage)
        {
            organism.organismEnergy.Value     += freeEnergyStorage;
            organism.organismEnergy.EggEnergy -= freeEnergyStorage;
        }
        else
        {
            organism.organismEnergy.Value    += organism.organismEnergy.EggEnergy;
            organism.organismEnergy.EggEnergy = 0;
        }
    }
示例#2
0
    private void Heal()
    {
        int healProb = 10;//inverse heal probability for each dead cell next to living cell

        foreach (CellAttributes cell in cells)
        {
            if ((!cell.alive) &&
                GenesManager.r.Next(healProb * cell.type.GetComponent <Cell>().bodyEnergy) < organismEnergy.Value &&
                CellHasLivingNeighbour(cell) &&
                organismEnergy.Value > cell.type.GetComponent <Cell>().bodyEnergy&&
                CellsCreator.CanInstantiate(cell, transform))
            {
                organismEnergy.Value -= cell.type.GetComponent <Cell>().bodyEnergy;

                organismEnergy.SetTotalEnergyStorage(organismEnergy.GetTotalEnergyStorage() + cell.type.GetComponent <Cell>().energyStorage);
                cell.alive = true;

                CellsCreator.InstantiateCell(cell, transform);

                cells.deadCells--;
                return;
            }
        }
    }