public void observe(GameObject a, GameObject b)
{
collision_events.Add(new CollEvent(a, b));
CollEvent dup = findMatch(a, b);
// If a duplicate event has been found spawn a child
if (null != dup) {
collision_events.Clear();
Vector3 pos = (a.transform.position - b.transform.position) * 0.5F + b.transform.position;
// Get references to the scripts of each creature
Creature a_script = a.transform.parent.parent.GetComponent<Creature>();
Creature b_script = b.transform.parent.parent.GetComponent<Creature>();
double a_energy = a_script.getEnergy();
double b_energy = b_script.getEnergy();
Chromosome newChromosome;
newChromosome = GeneticsUtils.crossover(a_script.chromosome, b_script.chromosome, crossover_rate);
newChromosome = GeneticsUtils.mutate(newChromosome, mutation_rate, mutation_factor);
spw.spawn(pos,Vector3.zero,
a_energy * energy_scale + b_energy * energy_scale,
newChromosome
);
a_script.subtractEnergy(a_energy * energy_scale);
b_script.subtractEnergy(b_energy * energy_scale);
a_script.offspring++;
b_script.offspring++;
} else {
collision_events.Add(new CollEvent(b,a));
}
}