using Assets.Scripts.Actions; using System.Collections.Generic; using System.Linq; using TMPro; using UnityEngine; using UnityEngine.UI; public class ConversationController : MonoBehaviour { [SerializeField] public TextMeshProUGUI _title; [SerializeField] public Button _choiceButton; [SerializeField] private Button _closeBtn; [SerializeField] PlayerManager _playerManager; public ConversationChangeEvent conversationChangeEvent; private List choiceControllers = new(); private void Awake() { Hide(); } public void Change(string title, Dictionary options) { _closeBtn.onClick.AddListener(() => { Hide(); }); _playerManager.allowMovement = false; RemoveChoices(); _title.text = title; gameObject.SetActive(true); for (var count = 0; count < options.Count; count++) { ChoiceController c = ChoiceController.AddChoiceButton(_choiceButton, options.ElementAt(count), count); c.conversationChangeEvent.AddListener(ApplyActionOnPlayer); choiceControllers.Add(c); } StopAllCoroutines(); Time.timeScale = 0; _choiceButton.gameObject.SetActive(false); } private void ApplyActionOnPlayer(BaseAction action) { if (!_playerManager.TryBuyAction(action)) { YesNoDialogUI.Instance.ShowQuestion("not enouth money", () => { }, () => { //do nothing }); } } private void RemoveChoices() { foreach (ChoiceController c in choiceControllers) { c.conversationChangeEvent.RemoveAllListeners(); Destroy(c.gameObject); } choiceControllers.Clear(); } public void Hide() { RemoveChoices(); gameObject.SetActive(false); Time.timeScale = 1; _playerManager.allowMovement = true; } }