using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace vnxbqy.UI { public class RuneHoleBehaviour : MonoBehaviour { [SerializeField] Image m_Icon; [SerializeField] Text m_Level; [SerializeField] Transform m_ContainerRune; [SerializeField] Transform m_ContainerLock; [SerializeField] Transform m_ContainerSelect; [SerializeField] Button m_ContainerAddSign; [SerializeField] UIEffect m_MultiPropertyEffect; [SerializeField] Button m_Select; [SerializeField] RedpointBehaviour m_Redpoint; int hole = 0; Coroutine coroutine = null; RuneModel model { get { return ModelCenter.Instance.GetModel(); } } private void Awake() { m_Select.AddListener(OnSelect); } public void Display(int hole) { this.hole = hole; model.onSelectHoleRefresh += OnSelectHoleRefresh; model.onOpenNewHole += OnOpenNewHole; model.onRuneHoleRefresh += OnRuneHoleRefresh; DisplayBase(); DisplaySelect(); RuneModel.RuneHoleRedpoint redpoint; if (model.TryGetRedpoint(hole, out redpoint)) { m_Redpoint.redpointId = redpoint.redpoint.id; } } public void Dispose() { model.onSelectHoleRefresh -= OnSelectHoleRefresh; model.onOpenNewHole -= OnOpenNewHole; model.onRuneHoleRefresh -= OnRuneHoleRefresh; if (coroutine != null) { StopCoroutine(coroutine); } } void DisplayBase() { var isHoleOpne = model.IsRuneHoleOpen(hole, model.holeState); m_ContainerLock.SetActive(!isHoleOpne); RuneItem runeItem; var existRune = model.TryGetRuneHoleItem(hole, out runeItem); m_ContainerAddSign.RemoveAllListeners(); m_ContainerAddSign.SetActive(isHoleOpne && !existRune); if (isHoleOpne && !existRune) m_ContainerAddSign.AddListener(OpenRunePack); m_ContainerRune.SetActive(isHoleOpne && existRune); m_MultiPropertyEffect.StopImediatly(); if (existRune) { var config = ItemConfig.Get(runeItem.id); m_Icon.SetSprite(config.IconKey); m_Level.text = Language.Get("Z1024", runeItem.level); m_Level.color = UIHelper.GetUIColor(config.ItemColor); if (model.IsMultiPropertyRune(runeItem.id)) { m_MultiPropertyEffect.Play(); } } } private void OpenRunePack() { OnSelect(); RunePackWin.selectHole = model.selectHole; WindowCenter.Instance.Open(); } void DisplaySelect() { m_ContainerSelect.SetActive(model.selectHole == hole); } private void OnOpenNewHole(int _hole) { if (hole == _hole && hole == model.specialHole) { coroutine = StartCoroutine(Co_DisplayHole()); } } private void OnRuneHoleRefresh() { if (hole == model.specialHole && model.unlockingSpecialHole) { return; } DisplayBase(); } IEnumerator Co_DisplayHole() { yield return WaitingForSecondConst.WaitMS800; DisplayBase(); coroutine = null; } private void OnSelectHoleRefresh() { DisplaySelect(); } private void OnSelect() { if (model.IsRuneHoleOpen(hole, model.holeState) || hole == model.specialHole) { model.selectHole = hole; } else { RuneHoleCondition condition; if (model.TryGetRuneHoleCondition(hole, out condition)) { var config = RuneTowerFloorConfig.Get(condition.runeTowerFloor); var tower = RuneTowerConfig.Get(config.TowerId); SysNotifyMgr.Instance.ShowTip("RuneUnlock", StringUtility.Contact(tower.TowerName, config.FloorName)); } } } } }