//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Thursday, May 03, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { [XLua.Hotfix] public class HumanTreasureWin : Window { [SerializeField] Transform m_Container; [SerializeField] Image m_TreasureName; [SerializeField] Text m_Remind; [SerializeField] Text m_TaskTitle; [SerializeField] Text m_TreasureStory; [SerializeField] Image m_SkillIcon; [SerializeField] Text m_SkillName; [SerializeField] Text m_SkillCoolDown; [SerializeField] Text m_SkillDescription; [SerializeField] Transform m_ContainerCollect; [SerializeField] Button m_Challenge; [SerializeField] Button m_Goto; [SerializeField] Slider m_TaskSlider; [SerializeField] Text m_TaskProgress; [SerializeField] Transform m_ContainerCollected; [SerializeField] Transform m_ContainerUnknown; bool animationStep = false; TreasureModel model { get { return ModelCenter.Instance.GetModel(); } } TaskModel taskModel { get { return ModelCenter.Instance.GetModel(); } } protected override void BindController() { } protected override void AddListeners() { m_Challenge.AddListener(Challenge); m_Goto.AddListener(GotoTask); } protected override void OnPreOpen() { Display(); TreasureBaseWin.allowSelectTreasure += AllowSelectTreasure; model.treasureSelectedEvent += TreasureSelectedEvent; } protected override void OnActived() { base.OnActived(); DisplayAnimation(); } protected override void OnAfterOpen() { } protected override void OnPreClose() { TreasureBaseWin.allowSelectTreasure -= AllowSelectTreasure; model.treasureSelectedEvent -= TreasureSelectedEvent; animationStep = false; } protected override void OnAfterClose() { } void Display() { DisplayBase(); DisplayProgress(); } void DisplayBase() { var config = TreasureConfig.Get(model.selectedTreasure); m_TreasureName.SetSprite(config.TreasureNameIcon); m_TreasureStory.text = config.Story; m_Remind.text = string.Format("通关本征途可激活{0}", config.Name); List tasks = null; if (model.TryGetTreasureTasks(model.selectedTreasure, out tasks)) { var taskConfig = TaskListConfig.Get(tasks[0]); m_TaskTitle.text = taskConfig.ChapterName; } Treasure treasure; if (model.TryGetTreasure(model.selectedTreasure, out treasure)) { var skillId = treasure.skillId; var skillConfig = SkillConfig.Get(skillId); m_SkillIcon.SetSprite(skillConfig.IconName); m_SkillName.text = skillConfig.SkillName; m_SkillDescription.text = skillConfig.Description; m_SkillCoolDown.text = skillConfig.CoolDownTime == 0 ? string.Empty : Language.Get("L1065", skillConfig.CoolDownTime / 1000); } } void DisplayProgress() { Treasure treasure; if (model.TryGetTreasure(model.selectedTreasure, out treasure)) { m_ContainerCollect.gameObject.SetActive(treasure.state == TreasureState.Collecting); m_ContainerCollected.gameObject.SetActive(treasure.state == TreasureState.Collected); m_ContainerUnknown.gameObject.SetActive(treasure.state == TreasureState.Locked); if (treasure.state == TreasureState.Collecting) { var satisfyChallenge = model.SatisfyChallenge(model.selectedTreasure); m_Goto.gameObject.SetActive(!satisfyChallenge); m_Challenge.gameObject.SetActive(satisfyChallenge); var progress = 1f; List tasks = null; if (model.TryGetTreasureTasks(model.selectedTreasure, out tasks)) { var count = model.GetCompleteTaskCount(model.selectedTreasure); progress = Mathf.Clamp01((float)count / tasks.Count); m_TaskProgress.text = StringUtility.Contact((int)(progress * 100), "%"); } m_TaskSlider.value = progress; } } } void DisplayAnimation() { m_Container.gameObject.SetActive(false); animationStep = true; UI3DTreasureSelectStage.Instance.Tween(OnTreasureTweenComplete); } private void OnTreasureTweenComplete() { animationStep = false; m_Container.gameObject.SetActive(true); } private void TreasureSelectedEvent(int obj) { Display(); UI3DTreasureSelectStage.Instance.SetEndState(); } private void Challenge() { var config = TreasureConfig.Get(model.selectedTreasure); if (config != null) { if (PlayerDatas.Instance.baseData.LV >= config.ChallengeLevel) { model.collectingHuman = model.selectedTreasure; ModelCenter.Instance.GetModel().SingleChallenge(TreasureModel.TREASURE_DATAMAPID, config.LineId); } } } private void GotoTask() { WindowJumpMgr.Instance.ClearJumpData(); WindowCenter.Instance.Close(); WindowCenter.Instance.Open(); var taskId = taskModel.GetLatestMainTaskId(); taskModel.TaskMove(taskId); } private bool AllowSelectTreasure(int treasureId) { if (NewBieCenter.Instance.inGuiding || animationStep) { return false; } return true; } } }