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