/// <summary> /// Event Handler /// </summary> /// <param name="eventType"></param> /// <param name="Sender"></param> /// <param name="Param"></param> public void OnEvent(EventType eventType, Component Sender, object Param = null) { //select event type switch (eventType) { case EventType.OpenGenericPicker: GenericPickerDetails details = Param as GenericPickerDetails; SetGenericPicker(details); break; case EventType.CloseGenericPicker: CloseGenericPicker(); break; case EventType.CancelButtonGeneric: ProcessCancelButton(); break; case EventType.ChangeColour: SetColours(); break; case EventType.ChangeSide: SetSide(); break; case EventType.ConfirmGenericActivate: GenericReturnData data = Param as GenericReturnData; SetConfirmButton(true, data); break; case EventType.ConfirmGenericDeactivate: SetConfirmButton(false); break; case EventType.ConfirmGenericChoice: ProcessGenericChoice(); break; case EventType.BackButtonGeneric: ProcessBackButton(); break; default: Debug.LogError(string.Format("Invalid eventType {0}{1}", eventType, "\n")); break; } }
/// <summary> /// Sets up Generic picker window /// </summary> private void SetGenericPicker(GenericPickerDetails details) { //close Node tooltip safety check GameManager.i.tooltipNodeScript.CloseTooltip("ModalGenericPicker.cs -> SetGenericPicker"); //open Generic picker bool errorFlag = false; CanvasGroup genericCanvasGroup; //set modal status GameManager.i.guiScript.SetIsBlocked(true); //activate main panel modalPanelObject.SetActive(true); //header activated only if text provided if (string.IsNullOrEmpty(details.textHeader) == false) { modalHeader.gameObject.SetActive(true); headerText.text = details.textHeader; } else { modalHeader.gameObject.SetActive(false); } //activate dialogue window modalPickerCanvas.gameObject.SetActive(true); modalGenericObject.SetActive(true); //confirm button should be switched off at the start buttonConfirm.gameObject.SetActive(false); //back button only switched on if it has a valid underlying eventType if (backReturnEvent == EventType.None) { buttonBack.gameObject.SetActive(false); } else { buttonBack.gameObject.SetActive(true); } //halt execution, until picker is processed, if indicated if (details.isHaltExecution == true) { GameManager.i.turnScript.haltExecution = true; } //canvasGroup.alpha = 100; //populate dialogue if (details != null) { if (details.arrayOfOptions.Length > 0) { //initialise data nodeIDSelected = details.nodeID; actorSlotIDSelected = details.actorSlotID; datapoint = details.data; optionIDSelected = -1; optionNameSelected = ""; //set help List <HelpData> listOfHelpData = GameManager.i.helpScript.GetHelpData(details.help0, details.help1, details.help2, details.help3); if (listOfHelpData != null && listOfHelpData.Count > 0) { buttonHelp.gameObject.SetActive(true); help.SetHelpTooltip(listOfHelpData, 150, 200); } else { buttonHelp.gameObject.SetActive(false); } //assign sprites, texts, optionID's and tooltips for (int i = 0; i < details.arrayOfOptions.Length; i++) { if (arrayOfGenericOptions[i] != null) { GenericInteraction interaction = arrayOfInteractions[i]; if (interaction != null) { //there are 'maxOptions' options but not all of them may be used if (details.arrayOfOptions[i] != null) { //get option canvas genericCanvasGroup = arrayOfGenericOptions[i].GetComponent <CanvasGroup>(); if (genericCanvasGroup != null) { //activate option arrayOfGenericOptions[i].SetActive(true); //populate data interaction.optionImage.sprite = details.arrayOfOptions[i].sprite; interaction.displayText.text = details.arrayOfOptions[i].text; interaction.imageInteraction.data.optionID = details.arrayOfOptions[i].optionID; interaction.imageInteraction.data.optionName = details.arrayOfOptions[i].optionName; interaction.imageInteraction.data.optionNested = details.arrayOfOptions[i].optionText; interaction.imageInteraction.data.actorSlotID = details.actorSlotID; //option Active or Not? if (details.arrayOfOptions[i].isOptionActive == true) { //activate option genericCanvasGroup.alpha = 1.0f; genericCanvasGroup.interactable = true; interaction.imageInteraction.isActive = true; } else { //deactivate option genericCanvasGroup.alpha = 0.25f; genericCanvasGroup.interactable = false; interaction.imageInteraction.isActive = false; } //tooltip -> Image GenericTooltipUI tooltipImage = arrayOfImageTooltips[i]; if (details.arrayOfImageTooltips[i] != null) { tooltipImage.tooltipHeader = details.arrayOfImageTooltips[i].textHeader; tooltipImage.tooltipMain = details.arrayOfImageTooltips[i].textMain; tooltipImage.tooltipDetails = details.arrayOfImageTooltips[i].textDetails; } else { //default values tooltipImage.tooltipHeader = ""; tooltipImage.tooltipMain = ""; tooltipImage.tooltipDetails = ""; } //tooltip -> Text GenericTooltipUI tooltipText = arrayOfTextTooltips[i]; if (details.arrayOfTextTooltips[i] != null) { tooltipText.tooltipHeader = details.arrayOfTextTooltips[i].textHeader; tooltipText.tooltipMain = details.arrayOfTextTooltips[i].textMain; tooltipText.tooltipDetails = details.arrayOfTextTooltips[i].textDetails; } else { //default values tooltipText.tooltipHeader = ""; tooltipText.tooltipMain = ""; tooltipText.tooltipDetails = ""; } } else { Debug.LogError(string.Format("Invalid genericCanvasGroup for arrayOfGenericOptions[{0}]", i)); } } else { arrayOfGenericOptions[i].SetActive(false); } } else { //error -> Null Interaction data Debug.LogError(string.Format("Invalid arrayOfGenericOptions[\"{0}\"] genericData (Null)", i)); errorFlag = true; break; } } else { //error -> Null array Debug.LogError(string.Format("Invalid arrayOfGenericOptions[\"{0}\"] (Null)", i)); errorFlag = true; break; } } //register return event for reference once user confirms a choice defaultReturnEvent = details.returnEvent; } } else { //error -> null parameter Debug.LogError("Invalid GenericPickerDetails (Null)"); errorFlag = true; } //if a problem then generate an outcome window instead if (errorFlag == true) { modalPickerCanvas.gameObject.SetActive(false); /*modalGenericObject.SetActive(false);*/ //create an outcome window to notify player ModalOutcomeDetails outcomeDetails = new ModalOutcomeDetails(); outcomeDetails.textTop = "There has been a SNAFU"; outcomeDetails.textBottom = "Heads, toes and other limbswill be removed"; outcomeDetails.side = details.side; EventManager.i.PostNotification(EventType.OutcomeOpen, this, outcomeDetails, "ModalGenericPicker.cs -> SetGenericPicker"); } //all good, generate else { //texts topText.text = details.textTop; middleText.text = details.textMiddle; bottomText.text = details.textBottom; //set game state ModalStateData package = new ModalStateData(); package.mainState = ModalSubState.GenericPicker; package.pickerState = details.subState; GameManager.i.inputScript.SetModalState(package); Debug.LogFormat("[UI] ModalGenericPicker.cs -> SetGenericPicker{0}", "\n"); } }