//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Tuesday, November 13, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace vnxbqy.UI { // 升级unity2019碰到的问题 // 法宝界面 TreasureSelectWin和TreasureBaseWin开启需立即加载预制体 // 不然返回主界面任务RectMask2D有问题,会全部遮罩不显示,具体原因不确定暂且这么解决 public class TreasureBaseWin : Window { [SerializeField] RectTransform m_DisplayContainer; [SerializeField] Image m_TreasureTitle; [SerializeField] DragSelectComponent m_DragSelect; [SerializeField] Button m_Left; [SerializeField] Button m_Right; [SerializeField] Button m_Back; public static event Func allowSelectTreasure; public static event Func allowBack; public static event Action prepareSelectTreasure; public static event Action prepareBack; bool backToSelectWindow = false; TreasureModel model { get { return ModelCenter.Instance.GetModel(); } } KingTreasureModel kingTreasureModel { get { return ModelCenter.Instance.GetModel(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_Left.onClick.AddListener(Left); m_Right.onClick.AddListener(Right); m_Back.onClick.AddListener(Back); } protected override void OnPreOpen() { backToSelectWindow = false; m_DisplayContainer.SetActive(false); if (UI3DTreasureSelectStage.Instance.IsOpen) { if (UI3DTreasureSelectStage.Instance.jumpTreasure != 0) { model.selectedTreasure = UI3DTreasureSelectStage.Instance.jumpTreasure; } else { model.selectedTreasure = UI3DTreasureSelectStage.Instance.selectTreasure; } } } protected override void OnAfterOpen() { UI3DTreasureSelectStage.Instance.OnCameraCloserComplete += OnCameraCloserComplete; UI3DTreasureSelectStage.Instance.OnCameraBackComplete += OnCameraBackComplete; m_DragSelect.onDragComplete += OnDragComplete; model.treasureSelectedEvent += TreasureSelectedEvent; CameraManager.uiCamera.enabled = true; if (!UI3DTreasureSelectStage.Instance.IsOpen) { UI3DTreasureSelectStage.Instance.Open(true, model.currentCategory); var _list = model.GetTreasureCategory(model.currentCategory); var _index = _list.FindIndex((x) => { return x == model.selectedTreasure; }); UI3DTreasureSelectStage.Instance.GotoImmediatly(_index); OnCameraCloserComplete(); } else if (UI3DTreasureSelectStage.Instance.CloserComplete) { OnCameraCloserComplete(); } } protected override void OnPreClose() { CloseSubWindows(); UI3DTreasureSelectStage.Instance.OnCameraCloserComplete -= OnCameraCloserComplete; UI3DTreasureSelectStage.Instance.OnCameraBackComplete -= OnCameraBackComplete; m_DragSelect.onDragComplete -= OnDragComplete; model.treasureSelectedEvent -= TreasureSelectedEvent; if (!backToSelectWindow) { UI3DTreasureSelectStage.Instance.Close(); } } protected override void OnAfterClose() { } #endregion private void TreasureSelectedEvent(int treasureId) { DisplaySelects(); var list = model.GetTreasureCategory(model.currentCategory); var index = list.FindIndex((x) => { return x == treasureId; }); if (index != -1) { UI3DTreasureSelectStage.Instance.GotoImmediatly(index); } } private void OnCameraCloserComplete() { if (WindowCenter.Instance.IsOpen()) { WindowCenter.Instance.Close(); } CloseSubWindows(); m_DisplayContainer.SetActive(true); UI3DTreasureSelectStage.Instance.SetStartState(); switch (model.currentCategory) { case TreasureCategory.Human: m_TreasureTitle.SetSprite("XT_FB_45"); m_Left.image.SetSprite("XT_FB_33"); m_Right.image.SetSprite("XT_FB_34"); WindowCenter.Instance.Open(); break; case TreasureCategory.Demon: m_TreasureTitle.SetSprite("XT_FB_46"); m_Left.image.SetSprite("XT_FB_35"); m_Right.image.SetSprite("XT_FB_36"); WindowCenter.Instance.Open(); break; case TreasureCategory.Fairy: m_TreasureTitle.SetSprite("XT_FB_47"); m_Left.image.SetSprite("XT_FB_33"); m_Right.image.SetSprite("XT_FB_34"); WindowCenter.Instance.Open(); break; case TreasureCategory.King: m_TreasureTitle.SetSprite("KingTreasureTitle"); m_Left.image.SetSprite("KingTreasureLeftSelect"); m_Right.image.SetSprite("KingTreasureRightSelect"); WindowCenter.Instance.Open(); break; } DisplaySelects(); } private void DisplaySelects() { switch (model.currentCategory) { case TreasureCategory.King: { var list = kingTreasureModel.GetDisplayList(); var leftRifht = list.Contains(model.GetNextTreasureID(model.selectedTreasure, model.currentCategory)); m_Right.SetActive(leftRifht); leftRifht = list.Contains(model.GetPreTreasureID(model.selectedTreasure, model.currentCategory)); m_Left.SetActive(leftRifht); } break; default: { var leftRifht = TreasureConfig.Get(model.GetNextTreasureID(model.selectedTreasure, model.currentCategory)); m_Right.SetActive(leftRifht != null); leftRifht = TreasureConfig.Get(model.GetPreTreasureID(model.selectedTreasure, model.currentCategory)); m_Left.SetActive(leftRifht != null); } break; } } private void OnCameraBackComplete() { backToSelectWindow = true; CloseImmediately(); } private void OnDragComplete(int result) { if (NewBieCenter.Instance.inGuiding || WindowCenter.Instance.IsOpen() || WindowCenter.Instance.IsOpen() || WindowCenter.Instance.IsOpen() || WindowCenter.Instance.IsOpen() || WindowCenter.Instance.IsOpen()) { return; } if (result > 0) { Right(); } else if (result < 0) { Left(); } } private void Left() { var selectTreasure = model.GetPreTreasureID(model.selectedTreasure, model.currentCategory); if (!AllowSelectTreasure(selectTreasure)) { return; } if (prepareSelectTreasure != null) { prepareSelectTreasure(selectTreasure); } model.selectedTreasure = selectTreasure; } private void Right() { var selectTreasure = model.GetNextTreasureID(model.selectedTreasure, model.currentCategory); if (!AllowSelectTreasure(selectTreasure)) { return; } if (prepareSelectTreasure != null) { prepareSelectTreasure(selectTreasure); } model.selectedTreasure = selectTreasure; } private void Back() { var childrens = WindowConfig.GetChildWindows("TreasureBaseWin"); bool existAnyChildWindow = false; foreach (var window in childrens) { if (WindowCenter.Instance.IsOpen(window)) { existAnyChildWindow = true; break; } } if (!existAnyChildWindow) { return; } var returnCode = 0; if (allowBack != null) { returnCode = allowBack(); } if (returnCode != 0) { return; } if (PlayerDatas.Instance.baseData.LV < model.treasureBackLvLimit && !WindowJumpMgr.Instance.IsJumpState) { StartBack(); return; } if (!WindowJumpMgr.Instance.IsJumpState && model.openFromTreasureList) { StartBack(); return; } if (!WindowJumpMgr.Instance.IsJumpState && model.exitRecord >= 4) { StartBack(); model.exitRecord = 0; return; } model.openFromTreasureList = false; CloseImmediately(); if (!WindowJumpMgr.Instance.IsJumpState) { model.exitRecord++; WindowCenter.Instance.Open(); } } void StartBack() { if (prepareBack != null) { prepareBack(); } model.openFromTreasureList = false; CloseSubWindows(); m_DisplayContainer.SetActive(false); WindowCenter.Instance.Open(true); UI3DTreasureSelectStage.Instance.StartBack(); } private bool AllowSelectTreasure(int treasureId) { Treasure treasure; if (!model.TryGetTreasure(treasureId, out treasure)) { return false; } if (allowSelectTreasure != null && !allowSelectTreasure(treasureId)) { return false; } return true; } private void CloseSubWindows() { var childrens = WindowConfig.GetChildWindows("TreasureBaseWin"); foreach (var window in childrens) { WindowCenter.Instance.Close(window); } } } }