public void Start() { MethodDataBoxInstance.gameObject.SetActive(false); if (GenerationInst == null) { GenerationInst = FindObjectOfType <GenerationInstance>(); if (GenerationInst == null) { Debug.LogError("No Generation Instance found."); } } //Populate the dropdown for normal methods List <Dropdown.OptionData> methodDropdownData = new List <Dropdown.OptionData>(); foreach (Type type in Methods) { methodDropdownData.Add(new Dropdown.OptionData(type.Name)); } MethodsDropdown.AddOptions(methodDropdownData); //Populate the dropdown for conversion methods List <Dropdown.OptionData> cmethodDropdownData = new List <Dropdown.OptionData>(); foreach (Type type in ConversionMethods) { cmethodDropdownData.Add(new Dropdown.OptionData(type.Name)); } ConversionMethodsDropdown.AddOptions(cmethodDropdownData); //Set the first conversion method as the current conversion method by default ConvertMethodChange(0); }
public static float EvaluateFitness(this FitnessFunction fitnessFunction, GenerationInstance instance) { var f = instance.dieOnCollision && instance.Collided ? .5f : 1f; float val; switch (fitnessFunction) { case FitnessFunction.Linear: val = instance.transform.position.y; break; case FitnessFunction.Gate: val = instance.transform.position.y * (Array.IndexOf(MainHandler.Gates, instance.currentGate) + 1); break; case FitnessFunction.VerticalWithGates: var goodDistance = instance.transform.position.y; var wasteDistance = instance.totalDistance - goodDistance; // we want to credit those, who move upwards // but we dont want them to just stand val = Mathf.Max(0, goodDistance * (Array.IndexOf(MainHandler.Gates, instance.currentGate) + 1) - wasteDistance); break; default: return(0f); } return(val * f); }