public static void InstantiateSaveObject(SaveObject s) { foreach (GameObject obj in GameObject.FindGameObjectsWithTag("food")) { GameObject.Destroy(obj); } var fs = GameObject.FindGameObjectsWithTag("foodspawner"); double totalfoodRate = 0; for (int i = 0; i < fs.Length; i++) { totalfoodRate += fs[i].GetComponent <FoodSpawn>().foodRate; } for (int i = 0; i < fs.Length; i++) { fs[i].GetComponent <FoodSpawn>().foodCount = 0; while (fs[i].GetComponent <FoodSpawn>().foodCount < s.foodSpawned * (fs[i].GetComponent <FoodSpawn>().foodRate / totalfoodRate) && fs[i].GetComponent <FoodSpawn>().foodCount < fs[i].GetComponent <FoodSpawn>().MAX_FOOD) { fs[i].GetComponent <FoodSpawn>().SpawnFood(); } } foreach (SaveOrganism data in s.organisms) { Organism org = OrganismSpawn.SpawnOrganism(data.chromosome, new Vector3(data.x, data.y), data.initialEnergy); if (org != null) { // org.fullyGrow = true; } } }
void Spawn() { GenesManager.mutationRate = _mutationRate; GenesManager.neuralMutationRate = _neuralMutationRate; GameObject[] organisms = GameObject.FindGameObjectsWithTag("organism"); _organismNumber = organisms.Length; OrganismSpawn.organismNumber = organisms.Length; if (organisms.Length < STOP_SPAWNING_AT) { float x = (float)((r.NextDouble() * 0.8 + 0.1) * (Convert.ToDouble(Hyperparameters.MAP_SIZE))); float y = (float)((r.NextDouble() * 0.8 + 0.1) * (Convert.ToDouble(Hyperparameters.MAP_SIZE))); //PROBLEMA DI SPAWN SUI BORDI?? Chromosome chromosome; // if (organisms.Length == 0) // { chromosome = MakeChromosome(); // } // else // { // chromosome = organisms[r.Next(organisms.Length)].GetComponent<Organism>().chromosome; // } OrganismSpawn.SpawnOrganism(chromosome, new Vector3(x, y), OrganismSetter.BodyEnergy(chromosome) * 3 / 2); } }
void Start() { OrganismSpawn.organismSpawner = this; ModifyBodyEnergy(); InvokeRepeating("Spawn", 2f, 2f); }
// Update is called once per frame void Update() { if (Input.GetMouseButtonDown(2)) { Chromosome chromosome = new Chromosome(MakeGenes(), MakeNeuralChromosome(), new ChromosomeParameters.ChromosomeParametersBuilder().SetAltruismEnergy(0.5).Build()); OrganismSpawn.SpawnOrganism(chromosome, Camera.main.ScreenToWorldPoint(Input.mousePosition), OrganismSetter.BodyEnergy(chromosome) * 3 / 2); } }
public static void InstantiateRandomOrganism(SaveObject s) { SaveOrganism so = s.organisms[r.Next(s.organisms.Length)]; Organism org = OrganismSpawn.SpawnOrganism(so.chromosome, new Vector3(so.x, so.y), so.initialEnergy); if (org != null) { org.fullyGrow = true; } }
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; } }