public void Launch() { if (generations != null) { generations.Reset(); } if (setup == null) { setup = GetComponent <SetupScript>(); } ui = GetComponent <UIManager>(); cars = setup.Setup(); carStates = new Dictionary <GameObject, CarState>(); carExecutors = new Dictionary <GameObject, GeneExecutor>(); generations = GetComponent <GenerationDB>(); fitness = (IFitnessFunction)System.Activator.CreateInstance(setup.FitnessFunctions.Where(type => type.Name.Equals(selectedFitnessFunction)).First()); terminator = (ITerminator)System.Activator.CreateInstance(setup.Terminators.Where(type => type.Name.Equals(selectedTerminator)).First()); mutator = (IMutator)System.Activator.CreateInstance(setup.Mutators.Where(type => type.Name.Equals(selectedMutator)).First()); foreach (string genetype in selectedGenes) { mutator.AssignGene(((IGene)System.Activator.CreateInstance(setup.GeneTypes.Where(type => type.Name.Equals(genetype)).First())).ID); } selector = (ISelector)System.Activator.CreateInstance(setup.Selectors.Where(type => type.Name.Equals(selectedSelector)).First()); recombiner = (IRecombiner)System.Activator.CreateInstance(setup.Recombiners.Where(type => type.Name.Equals(selectedRecombiner)).First()); init = (IInitializer)System.Activator.CreateInstance(setup.Initializers.Where(type => type.Name.Equals(selectedInitializer)).First()); foreach (string genetype in selectedGenes) { init.AssignGene(((IGene)System.Activator.CreateInstance(setup.GeneTypes.Where(type => type.Name.Equals(genetype)).First())).ID); } SetupCars(); simulation = StartCoroutine(FullSimulation()); }