private void OnCollisionEnter2D(Collision2D collision) { if (collision.gameObject.tag == "organism") { Organism other = collision.gameObject.GetComponent <Organism>(); if (GenesManager.SameSpecie(this.chromosome, other.chromosome)) { Altruism(other); SexualReproduction(other); } } }
private void SexualReproduction(Organism mother) { int energyToReproduce = (int)(bodyEnergy * chromosome.Parameters.EnergyToSonRatio * 2); int momEnergyToReproduce = (int)(mother.bodyEnergy * mother.chromosome.Parameters.EnergyToSonRatio * 2); if (organismEnergy.Value > (1 + chromosome.Parameters.ExcessEnergyToReproduce) * energyToReproduce && mother.organismEnergy.Value > (1 + mother.chromosome.Parameters.ExcessEnergyToReproduce) * momEnergyToReproduce && sexualReproductionNeuron.Value >= 0.5 && mother.sexualReproductionNeuron.Value >= 0.5) { Chromosome newChromosome = GenesManager.CreateNewGenesForReproduction(this.chromosome, mother.chromosome); int totalEnergy = energyToReproduce + momEnergyToReproduce; OrganismSpawn.SpawnOrganism(newChromosome, ComputeChildPosition(), totalEnergy); organismEnergy.Value -= energyToReproduce; mother.organismEnergy.Value -= momEnergyToReproduce; } }
public void Mitosis() { if (!Hyperparameters.ALLOW_MITOSIS) { return; } int energyToReproduce = (int)(bodyEnergy * chromosome.Parameters.EnergyToSonRatio * 4); if (organismEnergy.Value > energyToReproduce * (1 + chromosome.Parameters.ExcessEnergyToReproduce) && mitosisNeuron.Value >= 0.5) { Chromosome newChromosome = GenesManager.CreateNewGenesForReproduction(this.chromosome); OrganismSpawn.SpawnOrganism(newChromosome, ComputeChildPosition(), energyToReproduce); organismEnergy.Value -= energyToReproduce; } }