using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TableConfig; using System; namespace Snxxz.UI { public class TreasureSoulBehaviour : MonoBehaviour { [SerializeField] Text m_SoulName; [SerializeField] Text m_SoulState; [SerializeField] Image m_Lock; [SerializeField] Image m_SelectImg; [SerializeField] Button m_SelectBtn; [SerializeField] RedpointBehaviour m_Redpoint; int treasureSoulId = 0; TreasureSpecialData special; TreasureSoulModel model { get { return ModelCenter.Instance.GetModel(); } } AchievementModel achievementModel { get { return ModelCenter.Instance.GetModel(); } } private void Awake() { m_SelectBtn.onClick.AddListener(OnSelect); } private void OnEnable() { model.treasureSelectSoulChangeEvent += TreasureSelectSoulChangeEvent; model.treasureSoulEvent += TreasureSoulEvent; achievementModel.achievementCompletedEvent += AchievementCompletedEvent; } private void OnDisable() { model.treasureSelectSoulChangeEvent -= TreasureSelectSoulChangeEvent; model.treasureSoulEvent -= TreasureSoulEvent; achievementModel.achievementCompletedEvent -= AchievementCompletedEvent; } private void AchievementCompletedEvent(int _id) { int achievementId = 0; if (model.TryGetRealmAchievement(treasureSoulId, out achievementId)) { if (achievementId == _id) { DisplayState(); } } } public void Display(int _id) { treasureSoulId = _id; m_Redpoint.redpointId = 0; if (model.TryGetTreasureSoul(_id, out special)) { var config = ConfigManager.Instance.GetTemplate(_id); if (config == null) { return; } m_Redpoint.redpointId = special.redpoint.id; m_SoulName.text = config.Name; m_SelectImg.SetSprite(model.selectSoul == treasureSoulId ? "ListBtn_Select" : "ListBtn_UnSelect"); DisplayState(); } } void DisplayState() { if (special != null) { if (special.active) { m_Lock.gameObject.SetActive(false); m_SoulState.text = Language.Get("TreasureSoul_Awoke"); } else { int achievementId = 0; bool unlock = true; if (model.TryGetRealmAchievement(treasureSoulId, out achievementId)) { Achievement achievement; if (achievementModel.TryGetAchievement(achievementId, out achievement)) { unlock = achievement.completed; } } m_Lock.gameObject.SetActive(!unlock); if (unlock) { m_SoulState.text = Language.Get("TreasureSoul_Awaking"); } else { var successConfig = ConfigManager.Instance.GetTemplate(achievementId); var realmConfig = ConfigManager.Instance.GetTemplate(successConfig.NeedCnt); m_SoulState.text = Language.Get("TreasureSoulRealm", realmConfig.Img); } } } } private void TreasureSelectSoulChangeEvent(int _id) { if (special != null) { m_SelectImg.SetSprite(model.selectSoul == treasureSoulId ? "ListBtn_Select" : "ListBtn_UnSelect"); } } private void TreasureSoulEvent(int _id) { if (_id == treasureSoulId) { DisplayState(); } } private void OnSelect() { model.selectSoul = treasureSoulId; } } }