public void UpdatePrompt(StoryText text, List <DialogueChoiceOption> choices, Action <int> callback) { if (choices.Count > buttons.Length) { Debug.LogError("too many choices for the container"); } gtv.AnimatePrompt(new StoryText(text.textID, text.text, text.characters, text.scenery, text.weapons, new TextSettings(1f, false, 0.5f, false)), null); for (int i = 0; i < buttons.Length; i++) { if (i < choices.Count) { GenericTextView b = buttons[i]; b.gameObject.SetActive(true); int j = i; Vector2 dir = b.transform.position.normalized; if (buttonInitialPos == null) { buttonInitialPos = buttons.Select(x => (Vector2)x.transform.position).ToArray(); buttonInitScale = buttons.Select(x => (Vector2)x.transform.localScale).ToArray(); } b.transform.position = buttonInitialPos[i]; b.transform.localScale = buttonInitScale[i]; buttons[i].button.interactable = true; b.transform.DOMove(buttonInitialPos[i] + dir * 200, UnityEngine.Random.Range(1f, 2f)).SetEase(Ease.InOutQuad).From(); b.UpdatePrompt(choices[i].optionText, _ => buttonSelected(j, callback), choices[i].optionID); } else { buttons[i].gameObject.SetActive(false); } } }