using System; using System.Collections; using UnityEngine; using Wizard; public abstract class ArenaEntryBase : MonoBehaviour { [SerializeField] protected GameObject ArenaEntryDialog; [SerializeField] protected GameObject CompetitionEntryDialog; [SerializeField] protected UIButton ButtonEntry; [SerializeField] protected UIButton ButtonResume; [SerializeField] protected GameObject HeadLineObject; private UIWidget[] _headlineWidgetArray; private Color[] _headlineWidgetDefaultColorArray; private Coroutine _initCoroutine; protected bool _isFreeEntry; protected bool _isCompetition; protected string[] _labelsText; protected string _entryDialogTitleText; protected Action _initFunc; protected Action _resumeFunc; protected Func _isJoinFunc; protected Action _freeEntryFunc; protected Action _freeBattleFunc; protected Func _isFreeBattleCompetition; protected Action _entryFunc; private const float GLAY_SCALE = 0.33f; protected abstract void EntryDialogCreate(GameObject inDialog); protected virtual void EntryBaseInit(GameObject costRootObject) { _headlineWidgetArray = costRootObject.transform.GetComponentsInChildren(); _headlineWidgetDefaultColorArray = new Color[_headlineWidgetArray.Length]; for (int i = 0; i < _headlineWidgetArray.Length; i++) { _headlineWidgetDefaultColorArray[i] = _headlineWidgetArray[i].color; } } private void OnEnable() { UpdateMenu(); } private void OnDestroy() { if (_initCoroutine != null) { StopCoroutine(_initCoroutine); } } public void UpdateMenu() { _initCoroutine = UIManager.GetInstance().StartCoroutine(_InitCoroutine()); } protected virtual IEnumerator _InitCoroutine() { while (!MyPageMenu.IsMyPageRequestEnd) { yield return null; } if (_initFunc != null) { _initFunc(); } ButtonEntry.onClick.Clear(); ButtonEntry.onClick.Add(new EventDelegate(delegate { GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_BTN_DECIDE); if (_entryFunc != null) { _entryFunc(); } else if (_isFreeEntry) { _freeEntryFunc(); } else { DialogBase.Size size = ((Data.ArenaData.CompetitionData.CostType != ArenaCompetition.EntryCostType.EntryWithCost) ? DialogBase.Size.M : DialogBase.Size.XL); DialogBase dialogBase = UIManager.GetInstance().CreateDialogClose(); dialogBase.SetSize(size); dialogBase.SetTitleLabel(_entryDialogTitleText); GameObject gameObject = UnityEngine.Object.Instantiate(_isCompetition ? CompetitionEntryDialog : ArenaEntryDialog); EntryDialogCreate(gameObject); if (_isCompetition && Data.ArenaData.CompetitionData.CostType == ArenaCompetition.EntryCostType.EntryWithCost) { PlayerPrefsWrapper.SetValue(PlayerPrefsWrapper.COMPETITION_JOIN_BUTTON_LATEST_ID, Data.ArenaData.CompetitionData.CompetitionId); Data.MyPageNotifications.data.IsCompetitionBadge = false; UIManager.GetInstance()._Footer.UpdateArenaBadgeIcon(); UpdateCompetitionEntryBadge(); } gameObject.GetComponent().ParentDialog = dialogBase; dialogBase.SetObj(gameObject.gameObject); DialogBase.ButtonLayout buttonLayout = DialogBase.ButtonLayout.CloseBtn; dialogBase.SetButtonLayout(buttonLayout); } })); ButtonResume.onClick.Clear(); ButtonResume.onClick.Add(new EventDelegate(delegate { _resumeFunc(); })); UpdateEntryResumeButton(); } protected virtual void UpdateCompetitionEntryBadge() { } protected virtual void UpdateEntryResumeButton() { bool flag = _isJoinFunc(); ButtonEntry.gameObject.SetActive(!flag); ButtonResume.gameObject.SetActive(flag); if (flag) { for (int i = 0; i < _headlineWidgetArray.Length; i++) { _headlineWidgetArray[i].color = new Color(_headlineWidgetDefaultColorArray[i].r * 0.33f, _headlineWidgetDefaultColorArray[i].g * 0.33f, _headlineWidgetDefaultColorArray[i].b * 0.33f, 255f); } } else { for (int j = 0; j < _headlineWidgetArray.Length; j++) { _headlineWidgetArray[j].color = _headlineWidgetDefaultColorArray[j]; } } } }