using System; using System.Collections.Generic; using System.Linq; using Cute; using UnityEngine; namespace Wizard.DeckCardEdit; public abstract class CardSelectListUIBase : MecanimSceneBase { private enum SlideType { None, Next, Prev } public const int CARD_PER_PAGE_IN_SELECTION_AREA = 10; public const int CARD_PER_PAGE = 8; public const float CARD_WIDTH = 120f; private const float DRAG_DEGREE = 70f; public const float SELECTION_AREA_CARD_SCALE = 0.5f; public const float PAGE_CARD_SCALE = 0.6f; [SerializeField] protected MecanimStateBase _stateDefaultView; [SerializeField] protected CardSelectListUI_State_Edit _stateEdit; [SerializeField] protected CardSelectListUI_State_CardDrag _stateCardDrag; [SerializeField] private UIButton m_nextPageBtn; [SerializeField] private UIButton m_prevPageBtn; [SerializeField] private UISprite m_nextPageBtnGrayout; [SerializeField] private UISprite m_prevPageBtnGrayout; private SlideType _slideType; private bool _isSlideEnd = true; public Action OnChangeSlideEnd; protected CardBundleControllerBase _cardBundle; [SerializeField] protected Transform _parentSelectionObj; [SerializeField] protected Transform m_parentPagingObj; [SerializeField] protected SimpleCardDetail m_simpleDetailPrefab; protected SimpleCardDetail _simpleDetail; [SerializeField] private UILabel m_labelPageInfo; [SerializeField] protected UITexture m_sleeveOriginal; [SerializeField] protected GameObject m_cardInfoOriginal; [SerializeField] private GameObject _hideFilter; [SerializeField] private FilterController _prefabFilter; protected FilterController _selectCardFilter; protected FilterController _pagingFilter; [SerializeField] protected UIInputWizard m_searchInput; [SerializeField] protected UIButton m_searchCancelButton; [SerializeField] private UILabel m_noEditCardLabel; [SerializeField] protected GameObject m_PagingDragPanel; [SerializeField] protected UILabel _redetherNum; [SerializeField] private UIScrollView _scrollView; private bool _isLoading; protected bool _isDisableTouchWhileLoading; protected List _resourcePathList; protected bool _enableSelectSameKindCardNum = true; protected bool _isSelectableSpotCard; private GameObject _detailTargetObj; private MyRotationInfo _myRotationInfoBeforeInitialize; private FilterController.MyRotationFilterType _filterType = FilterController.MyRotationFilterType.CARD_POOL_SELECT_ONLY; private MyRotationInfo _myRotationInfo; protected bool IsSlideEnd { get { return _isSlideEnd; } set { if (value != _isSlideEnd) { _isSlideEnd = value; OnChangeSlideEnd.Call(value); } } } public FilteringCardBundle SelectionAreaList => _cardBundle.SelectionAreaList; public CardBundle PagingList => _cardBundle.PagingList; public bool IsSetup { get; protected set; } public Format Format { get; protected set; } public bool IsLoading { get { return _isLoading; } protected set { if (_isLoading = value && !IsSetup) { UIManager.GetInstance().createInSceneCenterLoading(notBlack: true, !_isDisableTouchWhileLoading); } else { UIManager.GetInstance().closeInSceneCenterLoading(); } } } public bool IsSliding => _slideType != SlideType.None; protected bool IsShowCardDetailCraftPanel { get; set; } = true; public IFormatBehavior FormatBehavior { get; private set; } protected FilterController.MyRotationFilterType MyRotationFilterTypeCardPool { get { return _filterType; } set { _filterType = value; _stateCardDrag.SetMyRotationInfo(_myRotationInfo, MyRotationFilterTypeCardPool); } } public abstract bool IsEnableSwipeAutoSameBasicCardAdd(); protected void InitializeBase(Format format, ConventionDeckList conventionDeckList) { FormatBehavior = FormatBehaviorManager.Create(format, conventionDeckList); } protected void SetMyRotationData(MyRotationInfo myRotationInfo) { _myRotationInfo = myRotationInfo; _stateCardDrag.SetMyRotationInfo(myRotationInfo, MyRotationFilterTypeCardPool); if (_selectCardFilter != null && _pagingFilter != null && _cardBundle != null) { _selectCardFilter.SetMyRotationData(myRotationInfo, FilterController.MyRotationFilterType.DECK, MyRotationFilterTypeCardPool == FilterController.MyRotationFilterType.CARD_POOL_ALL_PACK); _pagingFilter.SetMyRotationData(myRotationInfo, MyRotationFilterTypeCardPool, isAllBackVisible: false); _isDisableTouchWhileLoading = true; FetchPagingCard(); _cardBundle.UpdateMyRotationInfo(myRotationInfo, MyRotationFilterTypeCardPool); _myRotationInfoBeforeInitialize = null; } else { _myRotationInfoBeforeInitialize = myRotationInfo; } } public override void onFirstStart() { base.IsShowFooterMenu = false; UIEventListener.Get(m_PagingDragPanel).onDrag = OnDragPagingCard; UIEventListener.Get(m_PagingDragPanel).onDragOver = OnDragOverPagingCard; UIEventListener.Get(m_PagingDragPanel).onScroll = OnScrollPagingCard; UIEventListener.Get(m_nextPageBtn.gameObject).onPress = delegate(GameObject g, bool b) { if (b) { NextPage(); } }; UIEventListener.Get(m_prevPageBtn.gameObject).onPress = delegate(GameObject g, bool b) { if (b) { PrevPage(); } }; UIEventListener uIEventListener = UIEventListener.Get(m_nextPageBtn.gameObject); uIEventListener.onDrag = (UIEventListener.VectorDelegate)Delegate.Combine(uIEventListener.onDrag, (UIEventListener.VectorDelegate)delegate { if (IsSlideEnd) { m_nextPageBtn.state = UIButtonColor.State.Normal; } }); UIEventListener uIEventListener2 = UIEventListener.Get(m_prevPageBtn.gameObject); uIEventListener2.onDrag = (UIEventListener.VectorDelegate)Delegate.Combine(uIEventListener2.onDrag, (UIEventListener.VectorDelegate)delegate { if (IsSlideEnd) { m_prevPageBtn.state = UIButtonColor.State.Normal; } }); _simpleDetail = UnityEngine.Object.Instantiate(m_simpleDetailPrefab); _simpleDetail.transform.parent = base.transform; _simpleDetail.transform.localPosition = Vector3.zero; _simpleDetail.transform.localScale = Vector3.one; _simpleDetail.OnClickCloseButton += HideDetail; _simpleDetail.OnClickCreateButton += OnCreate; _simpleDetail.OnClickLiquefyButton += OnLiquefy; _cardBundle.OnClickSelectionAreaCard += OnClickSelectionAreaCard; _cardBundle.OnClickPagingCard += OnClickPagingCard; _cardBundle.OnDragPagingCard += OnDragPagingCard; _cardBundle.OnScrollPagingCard += OnScrollPagingCard; _cardBundle.OnDragOverPagingCard += OnDragOverPagingCard; _cardBundle.OnCreatePagingSleeve += OnCreatePagingSleeve; _cardBundle.OnCreatePagingCard += OnCreatePagingCard; Action onInputSearchText = delegate { if (!_isDisableTouchWhileLoading) { SearchApplyOwn(m_searchInput.value); GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_COMMON_BUTTON); } }; m_searchInput.onSubmit.Add(new EventDelegate(delegate { if (onInputSearchText != null) { onInputSearchText(); } })); m_searchInput.onDeselect.Add(new EventDelegate(delegate { onInputSearchText(); })); base.onFirstStart(); } protected override void onOpen() { base.onOpen(); UIManager.GetInstance().ShowFooterMenu(isShow: false); _selectCardFilter = UnityEngine.Object.Instantiate(_prefabFilter); _pagingFilter = UnityEngine.Object.Instantiate(_prefabFilter); _selectCardFilter.Initialize(FormatBehavior); _pagingFilter.Initialize(FormatBehavior); if (_myRotationInfoBeforeInitialize != null) { _selectCardFilter.SetMyRotationData(_myRotationInfoBeforeInitialize, FilterController.MyRotationFilterType.DECK, isAllBackVisible: false); _pagingFilter.SetMyRotationData(_myRotationInfoBeforeInitialize, MyRotationFilterTypeCardPool, isAllBackVisible: false); _cardBundle.UpdateMyRotationInfo(_myRotationInfoBeforeInitialize, MyRotationFilterTypeCardPool); } _selectCardFilter.Hide(); _pagingFilter.Hide(); RegistFilterEvent(); GameMgr.GetIns().GetGameObjMgr().GetUIContainer() .SetActive(value: false); _stateEdit.ResetScroll(); m_searchInput.value = ""; m_searchCancelButton.gameObject.SetActive(value: false); } private void RegistFilterEvent() { _selectCardFilter.OnValidate += OnValidateSelectionAreaFilter; _pagingFilter.OnValidate += OnValidatePagingFilter; } private void ClearFilterEvent() { _selectCardFilter.OnValidate -= OnValidateSelectionAreaFilter; _pagingFilter.OnValidate -= OnValidatePagingFilter; } protected List GetEffectAssetPathList() { return new List { Toolbox.ResourcesManager.GetAssetTypePath("cmn_frame_card_1", ResourcesManager.AssetLoadPathType.Effect2D), Toolbox.ResourcesManager.GetAssetTypePath("cmn_frame_card_3", ResourcesManager.AssetLoadPathType.Effect2D), Toolbox.ResourcesManager.GetAssetTypePath("cmn_frame_card_2", ResourcesManager.AssetLoadPathType.Effect2D) }; } protected void SetupEffect(Action callback) { List effectObjList = new List { Toolbox.ResourcesManager.LoadObject(Toolbox.ResourcesManager.GetAssetTypePath("cmn_frame_card_3", ResourcesManager.AssetLoadPathType.Effect2D, isfetch: true)), Toolbox.ResourcesManager.LoadObject(Toolbox.ResourcesManager.GetAssetTypePath("cmn_frame_card_2", ResourcesManager.AssetLoadPathType.Effect2D, isfetch: true)), Toolbox.ResourcesManager.LoadObject(Toolbox.ResourcesManager.GetAssetTypePath("cmn_frame_card_1", ResourcesManager.AssetLoadPathType.Effect2D, isfetch: true)) }; GameMgr.GetIns().GetEffectMgr().SetUIParticleShader(effectObjList, callback); } protected void SetupState() { _stateEdit.RefreshSelectionArea(isImmediate: true); _stateEdit.RefreshPage(isImmediate: true); } protected void SetupSimpleDetail() { if (FormatBehavior.IsConventionMode) { _simpleDetail.ActiveCraftPanel(isActive: false); } } protected override void onClose() { _cardBundle.DisableNewFlagDisplayedCards(); _cardBundle.Destroy(); _stateCardDrag.DestroyDragCard(); UnityEngine.Object.Destroy(_selectCardFilter.gameObject); UnityEngine.Object.Destroy(_pagingFilter.gameObject); Toolbox.ResourcesManager.RemoveAssetGroup(Toolbox.ResourcesManager.Card2DAssetPathList); Toolbox.ResourcesManager.RemoveAssetGroup(_resourcePathList); Toolbox.ResourcesManager.CardListAssetPathList.Clear(); _stateEdit.RefreshSelectionArea(isImmediate: true); _stateEdit.RefreshPage(isImmediate: true); MyPageMenu.SetEnableReloadCard(); UIDrawCall.ReleaseInactive(); base.onClose(); } public override void onMove() { if (_cardBundle != null) { _cardBundle.Tick(); base.onMove(); } } protected virtual void OnFinishFadeIn() { ChangeState(_stateDefaultView, skipCloseAnim: true); ClearFilterEvent(); _selectCardFilter.Reset(); _pagingFilter.Reset(); RegistFilterEvent(); IsSetup = false; } public bool LoadPagingCard(int page) { IsLoading = true; HideDetail(); return _cardBundle.LoadPagingCard(page, isDestroyImmediate: true); } public void FetchPagingCard() { IsLoading = true; HideDetail(); _cardBundle.FetchPagingCard(); } public void NextPage() { if (!IsLoading && m_state != _stateCardDrag && !m_searchInput.isSelected && _cardBundle.CurrentPage + 1 <= _cardBundle.MaxPage) { if (m_searchInput.ClearIMEOnlyOSX()) { SearchApplyOwn(m_searchInput.value); return; } IsSlideEnd = false; _slideType = SlideType.Next; IsLoading = true; PagingBase(_stateEdit.NextPage, _cardBundle.CurrentPage + 1, NextPage); } else if (IsLoading) { if (_slideType == SlideType.Prev) { IsSlideEnd = true; m_nextPageBtn.state = UIButtonColor.State.Normal; } } else if (m_searchInput.isSelected) { if (m_searchInput.ClearIMEOnlyOSX()) { SearchApplyOwn(m_searchInput.value); } m_searchInput.ClearFocusOnlyOSX(); } } public void PrevPage() { if (!IsLoading && m_state != _stateCardDrag && !m_searchInput.isSelected && _cardBundle.CurrentPage - 1 >= 0) { if (m_searchInput.ClearIMEOnlyOSX()) { SearchApplyOwn(m_searchInput.value); return; } IsSlideEnd = false; _slideType = SlideType.Prev; IsLoading = true; PagingBase(_stateEdit.PrevPage, _cardBundle.CurrentPage - 1, PrevPage); } else if (IsLoading) { if (_slideType == SlideType.Next) { IsSlideEnd = true; m_prevPageBtn.state = UIButtonColor.State.Normal; } } else if (m_searchInput.isSelected) { if (m_searchInput.ClearIMEOnlyOSX()) { SearchApplyOwn(m_searchInput.value); } m_searchInput.ClearFocusOnlyOSX(); } } public void OnBtnPushSeachCancelOwn() { if (!IsLoading) { SearchApplyOwn(""); GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_BTN_CANCEL); } } private void PagingBase(Action anim, int page, Action next) { GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_SLIDE_BTN); GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_DECK_CARD_MOVE_OUT); GameMgr.GetIns().GetSoundMgr().StopSe(Se.TYPE.SYS_CARDLIST_REVERSE); anim.Call(delegate { if (LoadPagingCard(page)) { Action replay = null; replay = delegate { _cardBundle.OnCreatePagingCard -= replay; if (Input.GetMouseButton(0) && !IsSlideEnd && (m_nextPageBtn.state == UIButtonColor.State.Pressed || m_prevPageBtn.state == UIButtonColor.State.Pressed)) { next(); } else { _slideType = SlideType.None; IsSlideEnd = true; } }; _cardBundle.OnCreatePagingCard += replay; } }); } public virtual int InsertToSelectionArea(CardObject card) { int num = _cardBundle.InsertToSelectionArea(card); CardObject cardObject = SelectionAreaList.FindWithIndex(num); if (cardObject != null && SelectionAreaList.CountKind > 10) { int num2 = Mathf.Clamp(num, 5, SelectionAreaList.CountKind - 5); if (cardObject.TotalCardNum == 1 && num > 0) { num2++; } _stateEdit.CenterOn(num2); } if (_scrollView != null) { _scrollView.customMovement = ((SelectionAreaList.CountKind > 10) ? Vector2.right : Vector2.zero); } return num; } public virtual int RemoveFromSelectionArea(CardObject card) { int result = _cardBundle.RemoveFromSelectionArea(card); _stateEdit.Fit(); if (_scrollView != null) { _scrollView.customMovement = ((SelectionAreaList.CountKind > 10) ? Vector2.right : Vector2.zero); } return result; } private bool IsMaxCardNumInSelectionArea(int cardId) { if (!_enableSelectSameKindCardNum) { return false; } int num = GetSameKindNumMaxInFormat(cardId); if (_myRotationInfo != null) { num = _myRotationInfo.GetSameCardCount(CardMaster.GetInstance(FormatBehavior.CardMasterId).GetCardParameterFromId(cardId).BaseCardId); } if (_cardBundle.CountCardNumInSelectionArea(cardId, isStrictSameCard: false) >= num) { return true; } return false; } protected virtual int GetSameKindNumMaxInFormat(int cardId) { return FormatBehavior.DeckSameKindCardNumMax; } public bool IsExistCardCardPool(int cardId) { if (IsMaxCardNumInSelectionArea(cardId)) { return false; } int num = SelectionAreaList.CardList.Where((CardObject c) => c.CardId == cardId).Sum((CardObject c) => c.TotalCardNum); return FormatBehavior.GetPossessionCardNum(cardId, _isSelectableSpotCard) > num; } public bool IsAddableByBaseCardId(int cardId, out int addCardId) { if (IsMaxCardNumInSelectionArea(cardId)) { addCardId = 0; return false; } CardMaster instance = CardMaster.GetInstance(FormatBehavior.CardMasterId); List list = new List(); foreach (int item in instance.GetSameCardListByBaseCardId(instance.GetCardParameterFromId(cardId).BaseCardId)) { if (FormatBehavior.SortedDeckUsableCardList.Contains(item)) { list.Add(item); } } IOrderedEnumerable orderedEnumerable = list.OrderBy((int id) => -id); CardParameter cardParameterFromId = instance.GetCardParameterFromId(cardId); foreach (int item2 in list) { if (instance.GetCardParameterFromId(item2).NormalCardId == cardParameterFromId.NormalCardId && IsExistCardCardPool(item2)) { addCardId = item2; return true; } } foreach (int item3 in orderedEnumerable) { if (instance.GetCardParameterFromId(item3).IsFoil == cardParameterFromId.IsFoil && IsExistCardCardPool(item3)) { addCardId = item3; return true; } } foreach (int item4 in orderedEnumerable) { if (IsExistCardCardPool(item4)) { addCardId = item4; return true; } } if (_cardBundle.CanUseNonPossessionCard) { if (instance.GetCardParameterFromId(cardId).CanCraft) { addCardId = cardId; return true; } foreach (int item5 in list) { if (instance.GetCardParameterFromId(item5).CanCraft) { addCardId = item5; return true; } } } addCardId = 0; return false; } public bool IsRemainingAddableCardToSelectionArea(int cardId) { if (IsMaxCardNumInSelectionArea(cardId)) { return false; } CardParameter cardParameterFromId = CardMaster.GetInstance(FormatBehavior.CardMasterId).GetCardParameterFromId(cardId); if (_cardBundle.CanUseNonPossessionCard && DeckCardEditUI.IsSelectableNonPossessionCard(cardParameterFromId)) { return true; } int num = SelectionAreaList.CardList.Where((CardObject c) => c.CardId == cardId).Sum((CardObject c) => c.TotalCardNum); return FormatBehavior.GetPossessionCardNum(cardId, _isSelectableSpotCard) > num; } private void ShowDetail(GameObject obj, int id, bool isSelectionArea) { if (!IsLoading && !UIManager.GetInstance().isOpenDialog()) { SelectCard(obj, isSelectionArea); _simpleDetail.ChangeDetail(id, FormatBehavior.CardMasterId, _myRotationInfo); _simpleDetail.ActiveCraftPanel(!isSelectionArea && IsShowCardDetailCraftPanel); } } public void HideDetail() { SelectCard(null, isSelectionArea: false); _simpleDetail.HideDetail(); } private void SelectCard(GameObject obj, bool isSelectionArea) { Se.TYPE setype = Se.TYPE.NONE; CardObject cardObject = SelectionAreaList.FindWithObject(_detailTargetObj); if (cardObject == null) { cardObject = PagingList.FindWithObject(_detailTargetObj); } if (cardObject != null && cardObject.IsVisibleCursorEffect) { cardObject.ChangeSelectingState(isSelect: false); setype = Se.TYPE.SYS_CARD_INFO_CANCEL; } CardObject cardObject2 = (isSelectionArea ? SelectionAreaList.FindWithObject(obj) : PagingList.FindWithObject(obj)); if (cardObject2 != null) { cardObject2.ChangeSelectingState(isSelect: true); setype = Se.TYPE.SYS_CARD_INFO_SMALL; } _detailTargetObj = obj; GameMgr.GetIns().GetSoundMgr().PlaySe(setype); } protected virtual void AccordCardInfo() { _cardBundle.AccordCardInfo(); _stateEdit.RefreshSelectionArea(isImmediate: false); } private void SearchApplyOwn(string word) { SetSearchKeyword(word); _isDisableTouchWhileLoading = true; FetchPagingCard(); } private void SetSearchKeyword(string word) { if (!(_cardBundle.FilterParameter.Word == word)) { m_searchInput.RemoveFocus(); m_searchCancelButton.gameObject.SetActive(word.Length > 0); UIBase_CardManager.FilterParameter filterParameter = _cardBundle.FilterParameter; string word2 = (m_searchInput.value = word); filterParameter.Word = word2; _cardBundle.FilterParameter = filterParameter; } } protected void ShowFilterMenu(FilterController filter, string title) { HideDetail(); DialogBase dialogBase = UIManager.GetInstance().CreateDialogClose(); dialogBase.SetSize(DialogBase.Size.XL); dialogBase.SetTitleLabel(title); dialogBase.SetButtonLayout(DialogBase.ButtonLayout.OkBtn); dialogBase.SetObj(filter.gameObject); dialogBase.CloseOnOff(flag: false); filter.Show(); dialogBase.OnClose = delegate { filter.Hide(); filter.transform.parent = _hideFilter.transform; }; } protected virtual void OnValidateSelectionAreaFilter() { _stateCardDrag.OnChangeSelectionAreaFilter(); UIBase_CardManager.FilterParameter filterParameter = _selectCardFilter.GetFilterParameter(new UIBase_CardManager.FilterParameter()); SelectionAreaList.ApplyFilter(filterParameter); _stateEdit.RefreshSelectionArea(isImmediate: false); _stateEdit.Fit(); } protected virtual void OnValidatePagingFilter() { if (!_isDisableTouchWhileLoading) { SetSearchKeyword(m_searchInput.value); _cardBundle.FilterParameter = _pagingFilter.GetFilterParameter(_cardBundle.FilterParameter); _isDisableTouchWhileLoading = true; FetchPagingCard(); } } protected virtual void OnCreatePagingSleeve() { m_labelPageInfo.text = Data.SystemText.Get("Card_0053", (_cardBundle.CurrentPage + 1).ToString(), (_cardBundle.MaxPage + 1).ToString()); bool flag = _cardBundle.CurrentPage + 1 <= _cardBundle.MaxPage; bool flag2 = _cardBundle.CurrentPage - 1 >= 0; m_nextPageBtn.gameObject.SetActive(flag); m_prevPageBtn.gameObject.SetActive(flag2); m_nextPageBtnGrayout.gameObject.SetActive(!flag); m_prevPageBtnGrayout.gameObject.SetActive(!flag2); _stateEdit.RefreshPage(isImmediate: false); } private void OnCreatePagingCard() { IsLoading = false; _isDisableTouchWhileLoading = false; _stateEdit.RefreshSelectionArea(isImmediate: true); _stateEdit.RefreshPage(isImmediate: true); m_noEditCardLabel.gameObject.SetActive(_cardBundle.PagingList.CountKind <= 0); } private void OnCreate() { _cardBundle.OnCreateCard(_simpleDetail.CardID); AccordCardInfo(); DataMgr dataMgr = GameMgr.GetIns().GetDataMgr(); if (dataMgr.GetPossessionCardNum(_simpleDetail.CardID, _isSelectableSpotCard) == 1) { if (!_cardBundle.IsCraftMode) { _cardBundle.FetchPagingCard(); } dataMgr.SetIsNewCard(_simpleDetail.CardID, isNew: false); } } protected virtual void OnLiquefy(int cardId) { AccordCardInfo(); } private void OnClickSelectionAreaCard(GameObject obj) { OnClickCard(obj, isSelectionArea: true, isIdCheck: true); } private void OnClickPagingCard(GameObject obj) { OnClickCard(obj, isSelectionArea: false, isIdCheck: true); } private void OnClickCard(GameObject obj, bool isSelectionArea, bool isIdCheck) { if (!_stateEdit.IsClick && !(m_state == _stateDefaultView)) { return; } CharIdx component = obj.GetComponent(); if (component != null) { if (isIdCheck && _simpleDetail.IsVisible && _simpleDetail.CardID == component.GetCardId()) { HideDetail(); } else { ShowDetail(obj, component.GetCardId(), isSelectionArea); } } } private void OnDragPagingCard(GameObject obj, Vector2 dir) { if (Mathf.Abs(dir.x) >= 70f) { RequestChangePage(dir.x); } } private void OnScrollPagingCard(GameObject o, float factor) { RequestChangePage(factor); } private void RequestChangePage(float dir) { if (!(m_state == _stateEdit) || _simpleDetail.IsVisible || IsLoading) { return; } if (dir > 0f) { if (_cardBundle.CurrentPage > 0) { PrevPage(); } } else if (_cardBundle.CurrentPage < _cardBundle.MaxPage) { NextPage(); } } private void OnDragOverPagingCard(GameObject obj) { if (_simpleDetail.IsVisible && !_simpleDetail.IsDetailPanelDragging) { OnClickCard(obj, isSelectionArea: false, isIdCheck: false); } } public override bool IsGetOutOfScene(Action backupExec) { if (IsLoading) { return false; } if (_selectCardFilter.IsShow) { _selectCardFilter.Hide(); return false; } if (_pagingFilter.IsShow) { _pagingFilter.Hide(); return false; } if (_simpleDetail.IsVisible) { HideDetail(); return false; } if (m_state == _stateCardDrag) { return false; } return true; } }