//--------------------------------------------------------
|
// [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<int, bool> allowSelectTreasure;
|
public static event Func<int> allowBack;
|
public static event Action<int> prepareSelectTreasure;
|
public static event Action prepareBack;
|
|
bool backToSelectWindow = false;
|
|
TreasureModel model
|
{
|
get { return ModelCenter.Instance.GetModel<TreasureModel>(); }
|
}
|
|
KingTreasureModel kingTreasureModel
|
{
|
get { return ModelCenter.Instance.GetModel<KingTreasureModel>(); }
|
}
|
#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<EffectToFaBaoWin>())
|
{
|
WindowCenter.Instance.Close<EffectToFaBaoWin>();
|
}
|
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<HumanTreasureWin>();
|
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<DemonTreasureWin>();
|
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<FairyTreasureWin>();
|
break;
|
case TreasureCategory.King:
|
m_TreasureTitle.SetSprite("KingTreasureTitle");
|
m_Left.image.SetSprite("KingTreasureLeftSelect");
|
m_Right.image.SetSprite("KingTreasureRightSelect");
|
WindowCenter.Instance.Open<KingTreasureWin>();
|
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<TreasureSoulActiveWin>()
|
|| WindowCenter.Instance.IsOpen<DemonTreasurePropertyWin>()
|
|| WindowCenter.Instance.IsOpen<ItemTipWin>()
|
|| WindowCenter.Instance.IsOpen<HumanTreasureSkillDetailWin>()
|
|| WindowCenter.Instance.IsOpen<ExpertSkillSelectWin>())
|
{
|
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<MainInterfaceWin>();
|
}
|
}
|
|
void StartBack()
|
{
|
if (prepareBack != null)
|
{
|
prepareBack();
|
}
|
model.openFromTreasureList = false;
|
CloseSubWindows();
|
m_DisplayContainer.SetActive(false);
|
WindowCenter.Instance.Open<TreasureSelectWin>(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);
|
}
|
}
|
}
|
|
}
|
|
|
|
|