// Dynamically generates a Menu where all Courses are listed // Have to call LoadAddCourseInfos first. public void GenerateCoursesMenu(GameObject coursesMenuButtonCollection) { foreach (CourseInfoHolder info in courses.Courses) { // Create Button for a specific course GameObject newButton = Instantiate(buttonPrefab); newButton.transform.localScale += new Vector3(2, 2, 0); newButton.name = info.CourseTitle; var buttonConfigHelper = newButton.GetComponent <ButtonConfigHelper>(); buttonConfigHelper.MainLabelText = info.CourseTitle; // On Focus give user more information on the course var onFocusReciever = newButton.GetComponent <Interactable>().GetReceiver <InteractableOnFocusReceiver>(); if (onFocusReciever == null) { onFocusReciever = newButton.GetComponent <Interactable>().AddReceiver <InteractableOnFocusReceiver>(); } onFocusReciever.OnFocusOn.AddListener(() => ActivateDetails()); onFocusReciever.OnFocusOn.AddListener(() => SetCourseDetails(info.CourseID)); onFocusReciever.OnFocusOff.AddListener(() => DeactivateDetails()); // On Click open the menu of the particular course var onClickReciever = newButton.GetComponent <Interactable>().GetReceiver <InteractableOnPressReceiver>(); if (onClickReciever == null) { onClickReciever = newButton.GetComponent <Interactable>().AddReceiver <InteractableOnPressReceiver>(); } onClickReciever.OnPress.AddListener(() => MenuObject.GetComponent <MenuHelper>().SelectedMenuOption(info.CourseID)); // Add Button to the Collection and display it newButton.SetActive(true); newButton.transform.SetParent(coursesMenuButtonCollection.transform); } Microsoft.MixedReality.Toolkit.Utilities.GridObjectCollection objCollectionComponent = coursesMenuButtonCollection.GetComponent <Microsoft.MixedReality.Toolkit.Utilities.GridObjectCollection>(); // Update, so Button are displayed on the grid instead of on top of each other objCollectionComponent.UpdateCollection(); }
// Dynamically generates a Menu where all steps and coreographies of a course are listed or all coreographies of all courses are listed. private void GenerateCourseMenu() { for (int i = 0; i < steps.Count + coreographies.Count; i++) { // Create button for step/coreography GameObject newButton = Instantiate(buttonPrefab); newButton.transform.localScale += new Vector3(2, 2, 0); newButton.name = "Button" + i; var buttonConfigHelper = newButton.GetComponent <ButtonConfigHelper>(); int pos; string movementLocation; if (steps.ContainsKey(i)) { buttonConfigHelper.MainLabelText = steps[i].Name; pos = steps[i].Position; movementLocation = steps[i].Blocks[0].FileLocation; } else if (coreographies.ContainsKey(i)) { buttonConfigHelper.MainLabelText = "<color=\"yellow\">" + coreographies[i].Name + "</color>"; pos = coreographies[i].Position; movementLocation = coreographies[i].FileLocation; } else { Debug.Log("Step/coreography not found."); return; } // x is used in callback methods where the ref of i would be already changed and result in error int x = i; // On Focus give user more information on the step/coreo // On press starts the coreo or step var onPressReciever = newButton.GetComponent <Interactable>().GetReceiver <InteractableOnPressReceiver>(); var onFocusReciever = newButton.GetComponent <Interactable>().GetReceiver <InteractableOnFocusReceiver>(); if (onFocusReciever == null) { onFocusReciever = newButton.GetComponent <Interactable>().AddReceiver <InteractableOnFocusReceiver>(); } if (onPressReciever == null) { onPressReciever = newButton.GetComponent <Interactable>().AddReceiver <InteractableOnPressReceiver>(); } onFocusReciever.OnFocusOn.AddListener(() => ActivateDetails()); if (isTraining) { onFocusReciever.OnFocusOn.AddListener(() => CourseMenuHelperObject.GetComponent <CourseMenuHelper>().SetMoveDetails(pos)); } else { onFocusReciever.OnFocusOn.AddListener(() => CourseMenuHelperObject.GetComponent <CourseMenuHelper>().SetMoveDetails(x)); } onPressReciever.OnPress.AddListener(() => MainObject.GetComponent <PoseteacherMain>().SetTeacherFile(movementLocation)); onFocusReciever.OnFocusOff.AddListener(() => DeactivateDetails()); if (steps.ContainsKey(i)) { onPressReciever.OnPress.AddListener(() => CourseMenuHelperObject.GetComponent <CourseMenuHelper>().StartStep(pos)); } else if (coreographies.ContainsKey(i)) { if (isTraining) { onPressReciever.OnPress.AddListener(() => CourseMenuHelperObject.GetComponent <CourseMenuHelper>().StartCoreography(pos)); } else { onPressReciever.OnPress.AddListener(() => CourseMenuHelperObject.GetComponent <CourseMenuHelper>().StartCoreography(x)); } } onPressReciever.OnPress.AddListener(() => DeactivateDetails(true)); // Add Button to the Collection and display it newButton.SetActive(true); newButton.transform.SetParent(CourseButtonCollection.transform); } Microsoft.MixedReality.Toolkit.Utilities.GridObjectCollection objCollectionComponent = CourseButtonCollection.GetComponent <Microsoft.MixedReality.Toolkit.Utilities.GridObjectCollection>(); // Update, so Button are displayed on the grid instead of on top of each other objCollectionComponent.UpdateCollection(); }