//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Friday, April 27, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class TreasureSelectWin : Window { [SerializeField] TreasureModelDrag m_TreasureDrag; [SerializeField] FunctionButtonGroup m_ButtonGroup; [SerializeField] FunctionButton m_HumanBtn; [SerializeField] FunctionButton m_DemonBtn; [SerializeField] FunctionButton m_FairyBtn; [SerializeField] FunctionButton m_KingBtn; [SerializeField] Button m_BackBtn; [SerializeField] RectTransform m_ContainerNewGuide; TreasureModel m_Model; TreasureModel model { get { return m_Model ?? (m_Model = ModelCenter.Instance.GetModel()); } } bool m_CorrectClose = false; bool rightSelect = true; #region Built-in protected override void BindController() { } protected override void AddListeners() { m_HumanBtn.onClick.AddListener(() => { if (UI3DTreasureSelectStage.Instance.currentCategory == TreasureCategory.Human || UI3DTreasureSelectStage.Instance.UnlockShowing || UI3DTreasureSelectStage.Instance.IsCloser) { return; } rightSelect = true; UI3DTreasureSelectStage.Instance.SelectTreasureCategory(TreasureCategory.Human); UpdateButtonState(); }); m_DemonBtn.onClick.AddListener(() => { if (UI3DTreasureSelectStage.Instance.currentCategory == TreasureCategory.Demon || UI3DTreasureSelectStage.Instance.UnlockShowing || UI3DTreasureSelectStage.Instance.IsCloser) { return; } rightSelect = true; UI3DTreasureSelectStage.Instance.SelectTreasureCategory(TreasureCategory.Demon); UpdateButtonState(); }); m_FairyBtn.onClick.AddListener(() => { if (UI3DTreasureSelectStage.Instance.currentCategory == TreasureCategory.Fairy || UI3DTreasureSelectStage.Instance.UnlockShowing || UI3DTreasureSelectStage.Instance.IsCloser) { return; } UI3DTreasureSelectStage.Instance.SelectTreasureCategory(TreasureCategory.Fairy); }); m_KingBtn.onClick.AddListener(() => { if (UI3DTreasureSelectStage.Instance.currentCategory == TreasureCategory.King || UI3DTreasureSelectStage.Instance.UnlockShowing || UI3DTreasureSelectStage.Instance.IsCloser) { return; } UI3DTreasureSelectStage.Instance.SelectTreasureCategory(TreasureCategory.King); }); m_BackBtn.onClick.AddListener(() => { if (UI3DTreasureSelectStage.Instance.UnlockShowing) { return; } CloseImmediately(); UI3DTreasureSelectStage.Instance.Close(); }); m_HumanBtn.repeatClickFunc += () => { ReclickSelect(TreasureCategory.Human); }; m_DemonBtn.repeatClickFunc += () => { ReclickSelect(TreasureCategory.Demon); }; m_FairyBtn.repeatClickFunc += () => { ReclickSelect(TreasureCategory.Fairy); }; m_KingBtn.repeatClickFunc += () => { ReclickSelect(TreasureCategory.King); }; } protected override void OnPreOpen() { UI3DTreasureSelectStage.Instance.UnlockShowing = false; if (!UI3DTreasureSelectStage.Instance.IsOpen) { UI3DTreasureSelectStage.Instance.Open(false, model.currentCategory); } UI3DTreasureSelectStage.Instance.OnCameraStartEvent += OnCameraStartEvent; UI3DTreasureSelectStage.Instance.OnCameraBackComplete += OnCameraBackComplete; UI3DTreasureSelectStage.Instance.OnUnlockComplete += OnUnlockComplete; UI3DTreasureSelectStage.Instance.startAnimation += StartAnimation; m_TreasureDrag.OnValueChange += OnValueChange; m_TreasureDrag.OnDragComplete += OnDragComplete; m_TreasureDrag.OnDragBegine += OnDragBegine; m_BackBtn.gameObject.SetActive(true); m_ContainerNewGuide.gameObject.SetActive(false); UpdateButtonSelect(); UpdateButtonState(); m_CorrectClose = false; rightSelect = true; } protected override void OnActived() { base.OnActived(); //m_ButtonGroup.TriggerByOrder(functionOrder); } protected override void OnAfterOpen() { } protected override void OnPreClose() { UI3DTreasureSelectStage.Instance.OnCameraStartEvent -= OnCameraStartEvent; UI3DTreasureSelectStage.Instance.OnCameraBackComplete -= OnCameraBackComplete; UI3DTreasureSelectStage.Instance.OnUnlockComplete -= OnUnlockComplete; UI3DTreasureSelectStage.Instance.startAnimation -= StartAnimation; m_TreasureDrag.OnValueChange -= OnValueChange; m_TreasureDrag.OnDragComplete -= OnDragComplete; m_TreasureDrag.OnDragBegine -= OnDragBegine; if (!m_CorrectClose && UI3DTreasureSelectStage.Instance.IsOpen) { UI3DTreasureSelectStage.Instance.Close(); } } protected override void OnAfterClose() { if (!WindowJumpMgr.Instance.IsJumpState && !m_CorrectClose) { WindowCenter.Instance.Open(); } } #endregion #region Scroll private void OnCameraBackComplete() { UpdateButtonState(); } private void OnValueChange(float _delta) { UI3DTreasureSelectStage.Instance.Drag(_delta); } private void OnDragComplete() { UI3DTreasureSelectStage.Instance.DragEnd(); } private void OnDragBegine() { UI3DTreasureSelectStage.Instance.BegineDrag(); } #endregion private void OnCameraStartEvent() { WindowJumpMgr.Instance.ClearJumpData(); m_CorrectClose = true; CameraManager.uiCamera.enabled = false; WindowCenter.Instance.Open(); CloseImmediately(); } private void UpdateButtonSelect() { if (m_HumanBtn.state != TitleBtnState.Locked) { m_HumanBtn.state = model.currentCategory == TreasureCategory.Human ? TitleBtnState.Click : TitleBtnState.Normal; } if (m_DemonBtn.state != TitleBtnState.Locked) { m_DemonBtn.state = model.currentCategory == TreasureCategory.Demon ? TitleBtnState.Click : TitleBtnState.Normal; } if (m_FairyBtn.state != TitleBtnState.Locked) { m_FairyBtn.state = model.currentCategory == TreasureCategory.Fairy ? TitleBtnState.Click : TitleBtnState.Normal; } if (m_KingBtn.state != TitleBtnState.Locked) { m_KingBtn.state = model.currentCategory == TreasureCategory.King ? TitleBtnState.Click : TitleBtnState.Normal; } } private void UpdateButtonState() { var _closer = UI3DTreasureSelectStage.Instance.IsCloser || UI3DTreasureSelectStage.Instance.UnlockShowing; if (UI3DTreasureSelectStage.Instance.UnlockShowing) { m_BackBtn.gameObject.SetActive(false); } else { m_BackBtn.gameObject.SetActive(true); } m_ButtonGroup.transform.localScale = Vector3.one; m_HumanBtn.gameObject.SetActive(!_closer); m_DemonBtn.gameObject.SetActive(!_closer); m_FairyBtn.gameObject.SetActive(!_closer); m_KingBtn.gameObject.SetActive(!_closer); } private void StartAnimation() { UpdateButtonState(); } private void OnHighestComplete() { UpdateButtonState(); } private void OnUnlockComplete() { UpdateButtonState(); if (UI3DTreasureSelectStage.Instance.selectTreasure == 101) { m_ContainerNewGuide.gameObject.SetActive(true); TimeMgr.Instance.Register(m_ContainerNewGuide, (Component _comp) => { m_ContainerNewGuide.gameObject.SetActive(false); }, 1.5f); } } private void ReclickSelect(TreasureCategory category) { if (UI3DTreasureSelectStage.Instance.jumping || UI3DTreasureSelectStage.Instance.UnlockShowing || UI3DTreasureSelectStage.Instance.IsCloser) { return; } var list = model.GetTreasureCategory(category); var gotoId = 0; switch (category) { case TreasureCategory.Demon: for (int i = 0; i < list.Count; i++) { TreasureDungeon treasureDungeon; if (model.TryGetTreasureDungeon(list[i], out treasureDungeon)) { if (treasureDungeon.challengeRedpoint.state == RedPointState.Simple) { if (list[i] > UI3DTreasureSelectStage.Instance.selectTreasure) { if (rightSelect || gotoId == 0) { gotoId = list[i]; break; } } else if (list[i] < UI3DTreasureSelectStage.Instance.selectTreasure) { gotoId = list[i]; } } } } break; } if (gotoId != 0) { rightSelect = gotoId > UI3DTreasureSelectStage.Instance.selectTreasure; UI3DTreasureSelectStage.Instance.Goto(list.IndexOf(gotoId)); } } } }