using System; using System.Collections; using System.Collections.Generic; using TableConfig; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class AchieveTargetBehaviour : MonoBehaviour { [SerializeField] List m_Achievements; private int currentDungeonId; AchievementModel m_AchievementModel; AchievementModel achievementModel { get { return m_AchievementModel ?? (m_AchievementModel = ModelCenter.Instance.GetModel()); } } DungeonModel m_DungeonModel; DungeonModel dungeonModel { get { return m_DungeonModel ?? (m_DungeonModel = ModelCenter.Instance.GetModel()); } } public void Init(int mapId) { currentDungeonId = mapId; ShowAncientAchieve(); } private void OnEnable() { achievementModel.achievementCompletedEvent += UpdateAchieveEvent; achievementModel.achievementProgressUpdateEvent += UpdateAchieveEvent; } private void UpdateAchieveEvent(int achieveId) { switch (currentDungeonId) { case 31160: if (GeneralConfig.Instance.ancientGrandTotalAchievements.Contains(achieveId) || GeneralConfig.Instance.ancientContinueKillAchievements.Contains(achieveId)) { ShowAncientAchieve(); } break; } } private void ShowAncientAchieve() { ParseAchieve(GeneralConfig.Instance.ancientGrandTotalAchievements, m_Achievements[0]); ParseAchieve(GeneralConfig.Instance.ancientContinueKillAchievements, m_Achievements[1]); } private void ParseAchieve(List _achieveList, AchievementDesc _achievement) { Achievement presentAchieve = null; int _index = 0; if (_achieveList != null) { Achievement achievement; for (int i = 0; i < _achieveList.Count; i++) { if (achievementModel.TryGetAchievement(_achieveList[i], out achievement)) { if (!Achievement.IsReach(_achieveList[i], achievement.progress) && !achievement.completed) { presentAchieve = achievement; _index = i; break; } } } } if (presentAchieve != null) { SuccessConfig _tagSuccessModel = Config.Instance.Get(presentAchieve.id); _achievement.m_ContainerUnComplete.gameObject.SetActive(true); _achievement.m_ContainerComplete.gameObject.SetActive(false); _achievement.m_AwardDesc.text = _tagSuccessModel.Describe.Replace("@NeedCnt@", string.Empty); _achievement.m_AchieveTarget.text = StringUtility.Contact(presentAchieve.progress, "/", _tagSuccessModel.NeedCnt); if (_achievement.m_AchieveProgressDesc != null) { _achievement.m_AchieveProgressDesc.text = Language.Get("SGZC_Text_2", _tagSuccessModel.Condition.Length > 0 ? _tagSuccessModel.Condition[0] : 0); } if (presentAchieve.rewardItem != null && presentAchieve.rewardItem.Length > 0) { _achievement.m_ItemCell.gameObject.SetActive(true); ItemCellModel _itemCellModel = new ItemCellModel(presentAchieve.rewardItem[0].id, false, (ulong)presentAchieve.rewardItem[0].count, presentAchieve.rewardItem[0].bind); _achievement.m_ItemCell.Init(_itemCellModel); _achievement.m_ItemCell.cellBtn.RemoveAllListeners(); _achievement.m_ItemCell.cellBtn.onClick.AddListener(() => { if (presentAchieve.rewardItem != null && presentAchieve.rewardItem.Length > 0) { var _item = presentAchieve.rewardItem[0]; ItemAttrData _itemAttr = new ItemAttrData(_item.id, false, (ulong)_item.count, -1, _item.bind); ModelCenter.Instance.GetModel().SetItemTipsModel(_itemAttr); } }); } else { _achievement.m_ItemCell.gameObject.SetActive(false); } } else { _achievement.m_ContainerUnComplete.gameObject.SetActive(false); _achievement.m_ContainerComplete.gameObject.SetActive(true); _achievement.m_ItemCell.cellBtn.RemoveAllListeners(); } } private void OnDisable() { achievementModel.achievementCompletedEvent -= UpdateAchieveEvent; achievementModel.achievementProgressUpdateEvent -= UpdateAchieveEvent; } [Serializable] public class AchievementDesc { public ItemCell m_ItemCell; public Text m_AwardDesc; public Text m_AchieveTarget; public Text m_AchieveProgressDesc; public RectTransform m_ContainerUnComplete; public RectTransform m_ContainerComplete; } } }