143 lines
4.2 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|