using CSNetwork.Protocols.RPCData; using System; using System.Collections.Generic; using BrewMonster.Scripts; using UnityEngine; using UnityEngine.UI; using BrewMonster; using System.Collections; namespace BrewMonster.UI { // Select Character Screen //TODO: Change the name to SelectCharacterScreen public class SelecScreenCharacter : MonoBehaviour { [SerializeField] private GameObject characterItemPrefab; [SerializeField] private GameObject addCharacterItemPrefab; [SerializeField] private RectTransform parentItems; [SerializeField] private Button createCharacterButton; [SerializeField] private Button _btnEnterGame; [SerializeField] private Button _btnExit; [SerializeField] private CreateCharacterScreen createCharacterScreen; private CharacterItemUI _selectingCharacterItemUI; private Action _onClickItemChar; private Action _onCreateCharacterComplete; private Action _onExit; private List _roleInfos; private Coroutine _showModelReadyCoroutine; private int _pendingShowModelRoleId = -1; private void OnEnable() { _btnEnterGame.onClick.AddListener(OnClickedEnterGame); _btnEnterGame.gameObject.SetActive(false); if(_btnExit != null) { _btnExit.onClick.AddListener(OnClickedExit); } if (_roleInfos != null && _roleInfos.Count > 0) { PlayerModelPreview.Instance?.ShowAllPlayerModels(_roleInfos); } else { PlayerModelPreview.Instance?.ClearModels(); } } private void OnDisable() { _btnEnterGame.onClick.RemoveListener(OnClickedEnterGame); if (_showModelReadyCoroutine != null) { StopCoroutine(_showModelReadyCoroutine); _showModelReadyCoroutine = null; } _pendingShowModelRoleId = -1; HostPlayerPortraitCapture.Instance?.ClearPortrait(); _selectingCharacterItemUI = null; } private void Start() { if (createCharacterButton != null) { createCharacterButton.onClick.AddListener(OnCreateCharacterClicked); } } public void InitScreen(List roleInfos, Action OnClickItemChar, Action onCreateCharacterComplete = null, Action onExit = null) { _onClickItemChar = OnClickItemChar; _onCreateCharacterComplete = onCreateCharacterComplete; _onExit = onExit; // Clear existing items if (parentItems != null) { foreach (Transform child in parentItems) { Destroy(child.gameObject); } } _roleInfos = roleInfos; // Create character items if (roleInfos != null) { foreach (RoleInfo info in roleInfos) { if (characterItemPrefab != null && parentItems != null) { CharacterItemUI item = Instantiate(characterItemPrefab, parentItems).GetComponent(); item.InitItem(info, OnSelectCharacter); } } // If number of roles < 8, spawn addCharacterItemPrefab and hide createCharacterButton if (roleInfos.Count < 8) { // Hide the createCharacterButton if (createCharacterButton != null) { createCharacterButton.gameObject.SetActive(false); } // Spawn addCharacterItemPrefab if (addCharacterItemPrefab != null && parentItems != null) { GameObject addCharacterItem = Instantiate(addCharacterItemPrefab, parentItems); // Set up click handler for the add character item Button addButton = addCharacterItem.GetComponent