using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TableConfig; namespace Snxxz.UI { public class DungeonInspireBehaviour : MonoBehaviour { [SerializeField] Button m_InspireBtn; [SerializeField] RotationTween m_RotTween; [SerializeField] Text m_InspireProgress; [SerializeField] Image m_Icon; [SerializeField, Header("晃动次数")] int m_WaggleCnt = 6; [SerializeField, Header("间隔时间")] float m_IntervalTime = 3.0f; float m_Time; DungeonModel m_Model; DungeonModel model { get { return m_Model ?? (m_Model = ModelCenter.Instance.GetModel()); } } bool m_Waggle = false; DungeonInspireConfig m_CoinConfig; private void Awake() { m_InspireBtn.onClick.AddListener(OnInspireBtn); } private void OnEnable() { ResetTween(); model.dungeonInspireLvEvent += UpdateDugeonInspireLv; UpdateDugeonInspireLv(); var mapId = PlayerDatas.Instance.baseData.MapID; var _list = model.GetDungeonInspire(mapId); m_CoinConfig = null; if (_list == null) { return; } for (int i = 0; i < _list.Count; i++) { if (_list[i].InspireType == 3) { m_CoinConfig = _list[i]; break; } } switch (mapId) { case 52010: m_Icon.SetSprite("W_XYGuwu_a2"); break; default: m_Icon.SetSprite("W_Guwu_a"); break; } m_Icon.SetNativeSize(); } private void UpdateDugeonInspireLv() { var mapId = model.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID); var level = model.GetDungeonInspireLevel(); m_Waggle = m_CoinConfig != null && model.GetDungeonInspireLevel(3) < m_CoinConfig.InspireCount && level < model.GetInspireMaxCount(mapId); if (m_InspireProgress != null) { m_InspireProgress.gameObject.SetActive(PlayerDatas.Instance.baseData.MapID == DemonJarModel.DEMONJAR_MAPID); m_InspireProgress.text = StringUtility.Contact(level * 10, "%"); } if (!m_Waggle) { ResetTween(); } } private void LateUpdate() { if (m_Waggle) { m_Time += Time.deltaTime; if (m_RotTween.isActiveAndEnabled) { if (m_Time > m_RotTween.duration * m_WaggleCnt) { ResetTween(); } } else { if (m_Time > m_IntervalTime) { m_Time = 0; m_RotTween.enabled = true; } } } } private void ResetTween() { m_Time = 0; m_RotTween.enabled = false; m_InspireBtn.transform.localEulerAngles = Vector3.zero; } private void OnInspireBtn() { if ((model.GetDungeonInspireLevel()) >= model.GetInspireMaxCount(PlayerDatas.Instance.baseData.MapID)) { SysNotifyMgr.Instance.ShowTip("Xjmj_InspireMaxLevel"); return; } WindowCenter.Instance.Open(); } private void OnDisable() { model.dungeonInspireLvEvent -= UpdateDugeonInspireLv; } } }