RandomGFGoStop/Assets/Scripts/UI/GamePanel/ScorePanelScaler.cs

143 lines
4.2 KiB
C#

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<RectTransform> _lstRTs;
private void Awake()
{
_rectTransform = this.GetComponent<RectTransform>();
_layoutGroup = this.GetComponent<UnityEngine.UI.HorizontalLayoutGroup>();
_lstRTs = new System.Collections.Generic.List<RectTransform>();
if (GameManager.Instance != null)
GameManager.Event.RegistEvent(EEventType.OnDistributeCardCompletedToCenter, this.OnDistributeCardCompletedToCenter);
if (_number == null)
{
_number = Instantiate(NumberPrefab, this.transform).GetComponent<ScoreCardNumber>();
_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<ScoreCardNumber>();
_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<RectTransform>();
_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<ScoreCardNumber>();
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);
}
}
}