private void SetResponseButton(TextMeshProResponseButton button, Response response, Transform target, int buttonNumber) { if (button != null) { button.visible = true; button.clickable = response.enabled; button.target = target; if (response != null) { button.SetFormattedText(response.formattedText); } button.response = response; // Auto-number: if (autonumber.enabled) { button.Text = string.Format(autonumber.format, buttonNumber + 1, button.Text); var keyTrigger = button.GetComponent <UIButtonKeyTrigger>(); if (keyTrigger == null) { keyTrigger = button.gameObject.AddComponent <UIButtonKeyTrigger>(); } keyTrigger.key = (KeyCode)((int)KeyCode.Alpha1 + buttonNumber); } } }
/// <summary> /// Sets the response buttons. /// </summary> /// <param name='responses'> /// Responses. /// </param> /// <param name='target'> /// Target that will receive OnClick events from the buttons. /// </param> protected override void SetResponseButtons(Response[] responses, Transform target) { DestroyInstantiatedButtons(); if ((buttons != null) && (responses != null)) { int buttonNumber = 0; // Add explicitly-positioned buttons: for (int i = 0; i < responses.Length; i++) { if (responses[i].formattedText.position != FormattedText.NoAssignedPosition) { int position = responses[i].formattedText.position; if (0 <= position && position < buttons.Length && buttons[position] != null) { SetResponseButton(buttons[position], responses[i], target, buttonNumber++); } else { Debug.LogWarning(DialogueDebug.Prefix + ": Buttons list doesn't contain a button for position " + position); } } } if ((buttonTemplate != null) && (buttonTemplateHolder != null)) { // Reset scrollbar to top: if (buttonTemplateScrollbar != null) { buttonTemplateScrollbar.value = buttonTemplateScrollbarResetValue; } // Instantiate buttons from template: for (int i = 0; i < responses.Length; i++) { if (responses[i].formattedText.position != FormattedText.NoAssignedPosition) { continue; } GameObject buttonGameObject = GameObject.Instantiate(buttonTemplate.gameObject) as GameObject; if (buttonGameObject == null) { Debug.LogError(string.Format("{0}: Couldn't instantiate response button template", DialogueDebug.Prefix)); } else { instantiatedButtons.Add(buttonGameObject); buttonGameObject.transform.SetParent(buttonTemplateHolder.transform, false); buttonGameObject.SetActive(true); TextMeshProResponseButton responseButton = buttonGameObject.GetComponent <TextMeshProResponseButton>(); SetResponseButton(responseButton, responses[i], target, buttonNumber++); if (responseButton != null) { buttonGameObject.name = "Response: " + responseButton.Text; } } } } else { // Auto-position remaining buttons: if (buttonAlignment == ResponseButtonAlignment.ToFirst) { // Align to first, so add in order to front: for (int i = 0; i < Mathf.Min(buttons.Length, responses.Length); i++) { if (responses[i].formattedText.position == FormattedText.NoAssignedPosition) { int position = Mathf.Clamp(GetNextAvailableResponseButtonPosition(0, 1), 0, buttons.Length - 1); SetResponseButton(buttons[position], responses[i], target, buttonNumber++); } } } else { // Align to last, so add in reverse order to back: for (int i = Mathf.Min(buttons.Length, responses.Length) - 1; i >= 0; i--) { if (responses[i].formattedText.position == FormattedText.NoAssignedPosition) { int position = Mathf.Clamp(GetNextAvailableResponseButtonPosition(buttons.Length - 1, -1), 0, buttons.Length - 1); SetResponseButton(buttons[position], responses[i], target, buttonNumber++); } } } } } NotifyContentChanged(); }