using UnityEngine; using CodeJay.Enum; public class ScorePanelScaler : MonoBehaviour { private const float BASIC_SPACING = -40; [SerializeField] private GameObject SlotPrefab; [SerializeField] private GameObject NumberPrefab; [SerializeField] private ECardScoreType ScoreType; [SerializeField] private float MaxWidth; [SerializeField] private bool IsPlayer; private ScoreCardNumber _number; private UnityEngine.UI.HorizontalLayoutGroup _layoutGroup; private RectTransform _rectTransform; private System.Collections.Generic.List _lstRTs; private void Awake() { _rectTransform = this.GetComponent(); _layoutGroup = this.GetComponent(); _lstRTs = new System.Collections.Generic.List(); if (GameManager.Instance != null) GameManager.Event.RegistEvent(EEventType.OnDistributeCardCompletedToCenter, this.OnDistributeCardCompletedToCenter); if (_number == null) { _number = Instantiate(NumberPrefab, this.transform).GetComponent(); _number.Initialize(this.transform); } } private void OnDestroy() { if (GameManager.Instance != null) GameManager.Event.RemoveEvent(EEventType.OnDistributeCardCompletedToCenter, this.OnDistributeCardCompletedToCenter); } public void OnDistributeCardCompletedToCenter() { Initialize(); } private void Initialize() { if (_number == null) _number = Instantiate(NumberPrefab, this.transform).GetComponent(); _number.Initialize(this.transform); for (int i = 0; i < _lstRTs.Count; i++) { if (_lstRTs[i] != null) Destroy(_lstRTs[i].gameObject); } _lstRTs.Clear(); } public RectTransform AddCard(ECardType cardType) { RectTransform rt = null; for (int i = 0; i < _lstRTs.Count; i++) { if (_lstRTs[i].childCount == 0) { rt = _lstRTs[i]; break; } else if (_lstRTs[i].childCount == 1) { if (_number != null && _number.transform.parent != null && _number.transform.parent == _lstRTs[i]) { rt = _lstRTs[i]; break; } } } if (rt == null) rt = Instantiate(SlotPrefab, this.transform).GetComponent(); _lstRTs.Add(rt); StartCoroutine(coroSetScaleAndChangeNumberParent()); return rt; } public void RemoveEmptyRT() { for (int i = 0; i < _lstRTs.Count; i++) { if (_lstRTs[i].childCount == 0) { Destroy(_lstRTs[i].gameObject); _lstRTs.RemoveAt(i); break; } else if (_lstRTs[i].childCount == 1) { if (_number.transform.parent == _lstRTs[i]) { Destroy(_lstRTs[i].gameObject); _lstRTs.RemoveAt(i); break; } } } StartCoroutine(coroSetScaleAndChangeNumberParent()); } private System.Collections.IEnumerator coroSetScaleAndChangeNumberParent() { yield return new WaitForEndOfFrame(); yield return new WaitForEndOfFrame(); if (_layoutGroup != null && _lstRTs.Count >= 9) { float delta = (_rectTransform.rect.width - MaxWidth) / (_lstRTs.Count - 1); _layoutGroup.spacing = BASIC_SPACING - delta; } if (_lstRTs.Count > 0) { if (_number == null) _number = Instantiate(NumberPrefab, this.transform).GetComponent(); if (_number.Enabled == false) _number.Enabled = true; if (_number.transform.parent != _lstRTs[_lstRTs.Count - 1]) { _number.SetParent(_lstRTs[_lstRTs.Count - 1]); } _number.Number = GamePanel.Instance.GetScoreBoardTypeNumber(IsPlayer, ScoreType); } } }