using System; using System.Collections; using System.Collections.Generic; using TableConfig; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class FurnacesAchievement : MonoBehaviour { [SerializeField] Image m_Icon; [SerializeField] Text m_TaskName; [SerializeField] Text m_Description; [SerializeField] Text m_Progress; [SerializeField] RectTransform m_Complete; [SerializeField] RectTransform m_Processing; [SerializeField] RectTransform m_UnStart; [SerializeField] CanvasGroup m_CanvaGroup; private int achievementId = 0; Achievement achievement; AchievementModel achievementModel { get { return ModelCenter.Instance.GetModel(); } } TreasureModel model { get { return ModelCenter.Instance.GetModel(); } } PlayerTaskDatas task { get { return ModelCenter.Instance.GetModel(); } } public void Display(int _id) { achievementId = _id; achievementModel.TryGetAchievement(_id, out achievement); if (achievement != null) { Display(); achievementModel.achievementCompletedEvent -= AchievementCompletedEvent; achievementModel.achievementCompletedEvent += AchievementCompletedEvent; achievementModel.achievementProgressUpdateEvent -= AchievementProgressUpdateEvent; achievementModel.achievementProgressUpdateEvent += AchievementProgressUpdateEvent; } } private void Display() { var config = Config.Instance.Get(achievementId); var taskId = config.Condition[0]; var taskConfig = Config.Instance.Get(taskId); var taskInfo = Config.Instance.Get(taskConfig.name); m_TaskName.text = taskInfo.show_writing; var taskDescKey = StringUtility.Contact("m_info_", taskId, "_0_1_0_msg"); taskInfo = Config.Instance.Get(taskDescKey); m_Description.text = WordAnalysis.Space_Regex.Replace(taskInfo.show_writing, string.Empty); m_Complete.gameObject.SetActive(achievement.completed); var _beforeId = GetBeforeAchievement(); Achievement _beforeAchievement; bool _beforeComplete = true; if (achievementModel.TryGetAchievement(_beforeId, out _beforeAchievement)) { _beforeComplete = _beforeAchievement.completed; } var _taskState = task.GetQuestState(taskId); var _processing = !achievement.completed && _beforeComplete; m_Processing.gameObject.SetActive(_processing); m_CanvaGroup.alpha = (achievement.completed || _processing) ? 1 : 0.6f; m_UnStart.gameObject.SetActive(m_CanvaGroup.alpha < 1f); m_Progress.text = StringUtility.Contact(achievement.completed ? config.NeedCnt : Mathf.Clamp(achievement.progress, 0, config.NeedCnt), "/", config.NeedCnt); } public void Dispose() { achievementModel.achievementProgressUpdateEvent -= AchievementProgressUpdateEvent; achievementModel.achievementCompletedEvent -= AchievementCompletedEvent; } private void AchievementCompletedEvent(int _id) { if (model.GetFurnacesAchievements().Contains(_id)) { Display(); } } public int GetBeforeAchievement() { var _list = model.GetFurnacesAchievements(); var _id = 0; for (int i = 0; i < _list.Count; i++) { if (_list[i] == achievementId) { return _id; } _id = _list[i]; } return 0; } private void AchievementProgressUpdateEvent(int _id) { if (achievementId == _id) { var config = Config.Instance.Get(achievementId); m_Progress.text = StringUtility.Contact(achievement.completed ? config.NeedCnt : Mathf.Clamp(achievement.progress, 0, config.NeedCnt), "/", config.NeedCnt); } } } }