//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Thursday, November 23, 2017 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TableConfig; using System.Linq; namespace Snxxz.UI { public class TreasureNewGotWin : Window { [SerializeField] Transform m_ContainerMask; [SerializeField] RawImage m_GaussianMask; [SerializeField] RectTransform m_TreasureExhibitionPoint; [SerializeField] RectTransform m_ContainerFinishShow; [SerializeField] Button m_FinishShow; [SerializeField] UIAlphaTween m_FadeOut; [SerializeField] RectTransform m_FlyObjectPoint1; [SerializeField] RectTransform m_FlyObjectPoint2; [SerializeField] RectTransform m_FlyObjectPoint3; [SerializeField] UIEffect m_GotTreasureSfx; [SerializeField] Transform m_ContainerDescription; [SerializeField] RectTransform m_ContainerTreasureName; [SerializeField] UIAlphaTween m_FadeInTreasureName; [SerializeField] Slider m_TreasureNameSlider; [SerializeField] Text m_Category; [SerializeField] Text m_TreasureName; [SerializeField] RectTransform m_ContainerFuncUnLock; [SerializeField] Slider m_FuncUnLockSlider; [SerializeField] Text m_UnlockTip; [SerializeField] TreasureNewGotBehaviour[] m_TreasureNewGots; [SerializeField] RectTransform m_ContianerStory; [SerializeField] UIAlphaTween m_FadeInStory; [SerializeField] Text m_Story; [SerializeField] RectTransform m_ContainerFightPower; [SerializeField] Text m_FightPower; TreasureModel model { get { return ModelCenter.Instance.GetModel(); } } PlayerTaskDatas taskmodel { get { return ModelCenter.Instance.GetModel(); } } SkillModel skillModel { get { return ModelCenter.Instance.GetModel(); } } FunctionUnlockFlyObject flyObject; FunctionUnlockFlyObject unlockFlyObject1; FunctionUnlockFlyObject unlockFlyObject2; Treasure treasure; TreasureStage treasureStage; int displayStageCount = 0; float stageTime = 0.7f; public static event Action CloseTreasureNewGotWinEvent; ShowStep m_ShowStep = ShowStep.None; ShowStep showStep { get { return m_ShowStep; } set { if (m_ShowStep != value) { m_ShowStep = value; switch (m_ShowStep) { case ShowStep.None: break; case ShowStep.ShowModel: OnEnterShowModel(); break; case ShowStep.ShowSfx: OnEnterShowSfx(); break; case ShowStep.SliderName: OnEnterSliderName(); break; case ShowStep.ShowNameAndSliderUnlock: OnEnterShowNameAndSliderUnlock(); break; case ShowStep.ShowUnlock: OnEnterShowFuncUnlock(); break; case ShowStep.ShowStory: OnEnterShowStory(); break; case ShowStep.ShowComplete: OnEnterShowComplete(); break; case ShowStep.FadeOut: OnEnterFadeOut(); break; case ShowStep.FlyTo: OnEnterFlyto(); break; } } } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_FinishShow.AddListener(FinishShow); } protected override void OnPreOpen() { PlayerDatas.Instance.hero.Behaviour.StopHandupAI(); MapTransferUtility.Instance.Clear(); PlayerDatas.Instance.hero.StopPathFind(); m_ContainerMask.gameObject.SetActive(false); m_ContainerDescription.gameObject.SetActive(false); m_ContainerTreasureName.gameObject.SetActive(false); m_ContianerStory.gameObject.SetActive(false); m_ContainerFuncUnLock.gameObject.SetActive(false); m_UnlockTip.gameObject.SetActive(false); m_ContainerFinishShow.gameObject.SetActive(false); m_ContainerFightPower.gameObject.SetActive(false); for (int i = 0; i < m_TreasureNewGots.Length; i++) { m_TreasureNewGots[i].gameObject.SetActive(false); } model.TryGetTreasure(model.newGotTreasureId, out treasure); treasureStage = treasure.treasureStages.Find((x) => { return x.stage == treasure.stage; }); showStep = ShowStep.None; } protected override void OnAfterOpen() { } protected override void OnPreClose() { } protected override void OnAfterClose() { if (unlockFlyObject1 != null) { DestroyObject(unlockFlyObject1.gameObject); unlockFlyObject1 = null; } if (unlockFlyObject2 != null) { DestroyObject(unlockFlyObject2.gameObject); unlockFlyObject2 = null; } var config = ConfigManager.Instance.GetTemplate(model.newGotTreasureId); if (config != null && config.Category == (int)TreasureCategory.Human) { if (PreFightMission.Instance.IsFinished()) { taskmodel.AutomaticTripToTask(taskmodel.currentMission); } } model.newGotTreasureId = 0; if (CloseTreasureNewGotWinEvent != null) { CloseTreasureNewGotWinEvent(); } } protected override void OnActived() { base.OnActived(); CameraUtility.ScreenShotCut(m_GaussianMask, DoPrepare, true); } #endregion float timer = 0f; protected override void LateUpdate() { base.LateUpdate(); if (showStep != ShowStep.None) { timer += Time.deltaTime; } switch (showStep) { case ShowStep.None: break; case ShowStep.ShowModel: if (timer > 0.75f) { timer = 0f; showStep = ShowStep.ShowSfx; } break; case ShowStep.ShowSfx: if (timer > 0.3f) { timer = 0.0f; showStep = ShowStep.SliderName; } break; case ShowStep.SliderName: m_TreasureNameSlider.value = timer / 0.7f; if (timer > 0.7f) { timer = 0f; showStep = ShowStep.ShowNameAndSliderUnlock; } break; case ShowStep.ShowNameAndSliderUnlock: m_FuncUnLockSlider.value = 0; if (timer > 0.7f) { timer = 0f; showStep = ShowStep.ShowUnlock; } break; case ShowStep.ShowUnlock: m_FuncUnLockSlider.value = timer / (3 * stageTime); if (timer > 3 * stageTime) { timer = 0f; showStep = ShowStep.ShowComplete; } var index = (int)(timer / stageTime); if (index < displayStageCount && index < m_TreasureNewGots.Length && !m_TreasureNewGots[index].gameObject.activeSelf) { m_TreasureNewGots[index].Show(); } break; case ShowStep.ShowStory: if (timer > 0.7f) { timer = 0f; showStep = ShowStep.ShowComplete; } break; case ShowStep.ShowComplete: if (timer > 10f) { timer = 0f; showStep = ShowStep.FadeOut; } break; case ShowStep.FadeOut: if (timer > 1.5f) { timer = 0f; showStep = ShowStep.FlyTo; } break; case ShowStep.FlyTo: break; } } private void DoPrepare() { showStep = ShowStep.ShowModel; timer = 0f; var config = ConfigManager.Instance.GetTemplate(treasure.id); m_TreasureName.text = config.Name; m_Category.text = Language.Get(string.Concat("GetTreasure_", config.Category)); if ((TreasureCategory)config.Category == TreasureCategory.Human) { m_FightPower.text = model.GetTreasureFightPower(treasure.id, false).ToString(); } var instance = UIUtility.CreateWidget("TreasureUnlockFlyObject_1", "TreasureUnlockFlyObject_1"); unlockFlyObject1 = instance.GetComponent(); Transform parent = (treasureStage != null && treasureStage.unlockType == TreasureStageUnlock.Skill) && treasure.id != 101 && (TreasureCategory)config.Category != TreasureCategory.Fairy ? m_TreasureExhibitionPoint : m_FlyObjectPoint1; unlockFlyObject1.transform.SetParentEx(parent, Vector3.zero, Vector3.zero, Vector3.one); unlockFlyObject1.SetContent(FunctionUnlockType.Treasure, treasure.id); unlockFlyObject1.SetSpeed(treasure.id == 101 ? 3f : 5f); unlockFlyObject1.gameObject.SetActive(false); var _flyObjectPoint = m_FlyObjectPoint2; var index = 0; displayStageCount = 0; for (int i = 0; i < m_TreasureNewGots.Length; i++) { TreasureStage _stage = null; for (int k = index; k < treasure.treasureStages.Count; k++) { index++; if (treasure.treasureStages[k].unlockType == TreasureStageUnlock.Func || treasure.treasureStages[k].unlockType == TreasureStageUnlock.Skill || treasure.treasureStages[k].unlockType == TreasureStageUnlock.Treasure) { _stage = treasure.treasureStages[k]; displayStageCount++; break; } } if (_stage != null) { m_TreasureNewGots[i].Display(treasure.id, _stage.stage); } } if (treasureStage != null && (TreasureCategory)config.Category != TreasureCategory.Fairy && treasureStage.unlockType == TreasureStageUnlock.Skill && treasure.id != 101) { var instance2 = UIUtility.CreateWidget("TreasureUnlockFlyObject_2", "TreasureUnlockFlyObject_2"); unlockFlyObject2 = instance2.GetComponent(); unlockFlyObject2.transform.SetParentEx(_flyObjectPoint, Vector3.zero, Vector3.zero, Vector3.one); unlockFlyObject2.SetContent(FunctionUnlockType.TreasureSkill, treasure.id); unlockFlyObject2.gameObject.SetActive(false); flyObject = unlockFlyObject2; if ((TreasureCategory)config.Category == TreasureCategory.Demon && treasure.id != 203) { ModelCenter.Instance.GetModel().jumpToPass = true; } else { ModelCenter.Instance.GetModel().jumpToPass = false; } } else { switch (config.ID) { case 302: case 305: case 306: case 307: m_Story.text = config.Verse.Length == 0 ? string.Empty : config.Verse[0]; break; case 303: { var killNpcConfig = ConfigManager.Instance.GetTemplate(1); m_Story.text = string.Format(config.Verse[0], killNpcConfig.MaxAtk); } break; //case 304://签到相关配置移到功能配置表 // var _specialData = treasure.specialData; // if (_specialData != null) // { // var _keyValue = _specialData.propertyDict.First(); // var _propertyConfig = ConfigManager.Instance.GetTemplate(_keyValue.Key); // m_Story.text = string.Format(config.Verse[0], _keyValue.Value, _propertyConfig.Name); // } // break; } flyObject = unlockFlyObject1; } } private void FinishShow() { if (showStep == ShowStep.ShowComplete) { timer = 0f; showStep = ShowStep.FadeOut; } } private void FlyTo() { m_ContainerMask.gameObject.SetActive(false); m_ContainerDescription.gameObject.SetActive(false); flyObject.Begin(CloseClick); } public override void CloseClick() { if (treasure.id == TreasureModel.TREASURE_GUIDE_ID) { NewBieCenter.Instance.StartNewBieGuide(14); } else if (treasure.id == 203 && skillModel.PassOpenHoleCount() == 2) { NewBieCenter.Instance.StartNewBieGuide(45); } base.CloseClick(); } private void OnEnterShowModel() { m_FadeOut.SetStartState(); m_ContainerMask.gameObject.SetActive(true); } private void OnEnterShowSfx() { m_GotTreasureSfx.Play(); } private void OnEnterSliderName() { unlockFlyObject1.gameObject.SetActive(true); m_ContainerDescription.gameObject.SetActive(true); m_TreasureNameSlider.value = 0f; } private void OnEnterShowFuncUnlock() { m_ContainerFuncUnLock.gameObject.SetActive(true); var config = ConfigManager.Instance.GetTemplate(treasure.id); if ((TreasureCategory)config.Category == TreasureCategory.Human) { m_ContainerFightPower.gameObject.SetActive(false); } else if (config.Category == (int)TreasureCategory.Fairy && config.ID != 301) { m_ContainerFuncUnLock.gameObject.SetActive(false); showStep = ShowStep.ShowStory; return; } if (displayStageCount == 0) { showStep = ShowStep.ShowComplete; } } private void OnEnterShowNameAndSliderUnlock() { m_ContainerTreasureName.gameObject.SetActive(true); m_FadeInTreasureName.SetStartState(); m_FadeInTreasureName.Play(); m_UnlockTip.gameObject.SetActive(true); } private void OnEnterShowStory() { m_ContianerStory.gameObject.SetActive(true); m_FadeInStory.SetStartState(); m_FadeInStory.Play(); } private void OnEnterShowComplete() { m_ContainerFinishShow.gameObject.SetActive(true); } private void OnEnterFadeOut() { if (unlockFlyObject2 != null) { unlockFlyObject2.gameObject.SetActive(true); } m_FadeOut.SetStartState(); m_FadeOut.Play(); } private void OnEnterFlyto() { FlyTo(); } enum ShowStep { None, ShowSfx, ShowModel, SliderName, ShowNameAndSliderUnlock, ShowUnlock, ShowStory, ShowComplete, FadeOut, FlyTo, } } }