private void CreateCourseController() { if (enforcedCourseController != null) { CurrentCourseController = enforcedCourseController; } else if (useCustomPrefab && customPrefab != null) { Instantiate(customPrefab); return; } ICourseController defaultCourseController = GetCourseControllerFromType(); if (CurrentCourseController == null) { CurrentCourseController = defaultCourseController; if (CurrentCourseController == null) { Debug.LogError("CourseControllerSetup was not configured properly."); return; } } else { RemoveComponents(defaultCourseController.GetRequiredSetupComponents().Except(CurrentCourseController.GetRequiredSetupComponents()).ToList()); } GameObject courseControllerPrefab = CurrentCourseController.GetCourseControllerPrefab(); if (courseControllerPrefab != null) { Instantiate(CurrentCourseController.GetCourseControllerPrefab()); } }
/// <summary> /// Workaround to set the focus to the CourseControllerSetup if it has missing components that are required by the CourseController. /// </summary> private static void SetupCourseController() { CourseControllerSetup setup = FindObjectOfType <CourseControllerSetup>(); if (setup == null) { return; } List <Type> currentTypes = setup.GetComponents <Component>().Select(c => c.GetType()).ToList(); ICourseController courseController = setup.GetCourseControllerFromType(); bool courseControllerHasMissingComponents = courseController.GetRequiredSetupComponents().Except(currentTypes).Any(); if (courseControllerHasMissingComponents) { Selection.activeObject = setup; Debug.LogWarning($"Automatically added missing required components to {setup}."); } }