Files
SVSimServer/SVSim.BattleEngine/Engine/Wizard.DeckCardEdit/DeckCardEditUI.cs
gamer147 957af3d1ec feat(battle-engine): full Unity/VFX/god-object shims + expanded copy closure (2570 files)
Authored Unity primitive/object-model shim, VFX layer (control-flow-preserving, InstantVfx never invokes its action -- headless suppression), god-object stubs (GameMgr/EffectMgr/UIManager with faithfully-extracted nested enums), View/UI/Touch tree, LitJson+BetterList+Tuple copied, third-party stubs. Discovered Roslyn header-error masking: fixing class-header type errors unmasks body references, so the true copy closure is ~2570 files (was 782 under masking). Errors: masked-25720 -> 268; our shim files compile clean. Remaining: ~50 residual shim/external types, 24 NGUI UI-base overrides, static-type fixes, plus likely 1-2 more unmask waves.
2026-06-05 17:22:20 -04:00

1962 lines
69 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Cute;
using UnityEngine;
using Wizard.Dialog.Setting;
namespace Wizard.DeckCardEdit;
public class DeckCardEditUI : CardSelectListUIBase
{
private class CopyDeckFormation
{
private enum CardType
{
Original,
OriginalNormal,
OriginalPremium,
BaseNormal,
BasePremium,
SameBaseNormal,
SameBasePremium,
PrizeNormal,
PrizePremium
}
private List<int> _sourceDeckCardList;
private List<int> _afterDeckCardList;
private Dictionary<int, int> _userOwnCardData;
private IFormatBehavior _formatBehavior;
public CopyDeckFormation(List<int> sourceDeckCardList, IFormatBehavior formatBehavior)
{
_sourceDeckCardList = sourceDeckCardList;
_afterDeckCardList = new List<int>(40);
_userOwnCardData = formatBehavior.ClonePossessionCardDictionary(isIncludingSpotCard: true);
_formatBehavior = formatBehavior;
}
public List<int> EditNormal()
{
for (int i = 0; i < _sourceDeckCardList.Count; i++)
{
int num = _sourceDeckCardList[i];
if (!ConvertCardTypeAndAddCardToDeck(CardType.Original, num) && !ConvertCardTypeAndAddCardToDeck(CardType.OriginalNormal, num) && !ConvertCardTypeAndAddCardToDeck(CardType.OriginalPremium, num) && !ConvertCardTypeAndAddCardToDeck(CardType.SameBaseNormal, num) && !ConvertCardTypeAndAddCardToDeck(CardType.SameBasePremium, num) && !ConvertCardTypeAndAddCardToDeck(CardType.BaseNormal, num) && !ConvertCardTypeAndAddCardToDeck(CardType.BasePremium, num) && !ConvertCardTypeAndAddCardToDeck(CardType.PrizeNormal, num) && !ConvertCardTypeAndAddCardToDeck(CardType.PrizePremium, num) && CanUseNonPossessionCard)
{
AddNewestCraftableCardToDeck(num);
}
}
return _afterDeckCardList;
}
public List<int> EditPremium()
{
for (int i = 0; i < _sourceDeckCardList.Count; i++)
{
int num = _sourceDeckCardList[i];
if (!ConvertCardTypeAndAddCardToDeck(CardType.OriginalPremium, num) && !ConvertCardTypeAndAddCardToDeck(CardType.SameBasePremium, num) && !ConvertCardTypeAndAddCardToDeck(CardType.BasePremium, num) && !ConvertCardTypeAndAddCardToDeck(CardType.PrizePremium, num) && !ConvertCardTypeAndAddCardToDeck(CardType.OriginalNormal, num) && !ConvertCardTypeAndAddCardToDeck(CardType.SameBaseNormal, num) && !ConvertCardTypeAndAddCardToDeck(CardType.BaseNormal, num) && !ConvertCardTypeAndAddCardToDeck(CardType.PrizeNormal, num) && CanUseNonPossessionCard)
{
AddNewestCraftableCardToDeck(num);
}
}
return _afterDeckCardList;
}
public List<int> EditPrize()
{
for (int i = 0; i < _sourceDeckCardList.Count; i++)
{
int num = _sourceDeckCardList[i];
if (!ConvertCardTypeAndAddCardToDeck(CardType.PrizeNormal, num) && !ConvertCardTypeAndAddCardToDeck(CardType.PrizePremium, num) && !ConvertCardTypeAndAddCardToDeck(CardType.OriginalNormal, num) && !ConvertCardTypeAndAddCardToDeck(CardType.SameBaseNormal, num) && !ConvertCardTypeAndAddCardToDeck(CardType.BaseNormal, num) && !ConvertCardTypeAndAddCardToDeck(CardType.OriginalPremium, num) && !ConvertCardTypeAndAddCardToDeck(CardType.BasePremium, num) && !ConvertCardTypeAndAddCardToDeck(CardType.SameBasePremium, num) && CanUseNonPossessionCard)
{
AddNewestCraftableCardToDeck(num);
}
}
return _afterDeckCardList;
}
public List<int> EditPremiumAndPrize()
{
for (int i = 0; i < _sourceDeckCardList.Count; i++)
{
int num = _sourceDeckCardList[i];
if (!ConvertCardTypeAndAddCardToDeck(CardType.PrizePremium, num) && !ConvertCardTypeAndAddCardToDeck(CardType.PrizeNormal, num) && !ConvertCardTypeAndAddCardToDeck(CardType.OriginalPremium, num) && !ConvertCardTypeAndAddCardToDeck(CardType.BasePremium, num) && !ConvertCardTypeAndAddCardToDeck(CardType.SameBasePremium, num) && !ConvertCardTypeAndAddCardToDeck(CardType.OriginalNormal, num) && !ConvertCardTypeAndAddCardToDeck(CardType.SameBaseNormal, num) && !ConvertCardTypeAndAddCardToDeck(CardType.BaseNormal, num) && CanUseNonPossessionCard)
{
AddNewestCraftableCardToDeck(num);
}
}
return _afterDeckCardList;
}
private bool ConvertCardTypeAndAddCardToDeck(CardType cardType, int originalCardId)
{
CardMaster _cardMaster = CardMaster.GetInstance(_formatBehavior.CardMasterId);
CardParameter cardParameterFromId = _cardMaster.GetCardParameterFromId(originalCardId);
return cardType switch
{
CardType.Original => AddCardToDeck(cardParameterFromId.CardId),
CardType.OriginalNormal => AddCardToDeck(cardParameterFromId.NormalCardId),
CardType.OriginalPremium => AddCardToDeck(cardParameterFromId.FoilCardId),
CardType.BaseNormal => AddCardToDeck(_cardMaster.GetCardParameterFromId(cardParameterFromId.BaseCardId).NormalCardId),
CardType.BasePremium => AddCardToDeck(_cardMaster.GetCardParameterFromId(cardParameterFromId.BaseCardId).FoilCardId),
CardType.SameBaseNormal => (from id in GetSameBaseIdListInUserCard(cardParameterFromId.BaseCardId).Where(delegate(int id)
{
CardParameter cardParameterFromId2 = _cardMaster.GetCardParameterFromId(id);
return !cardParameterFromId2.IsFoil && !cardParameterFromId2.IsPrizeCard;
})
orderby id descending
select id).ToList().Find(AddCardToDeck) > 0,
CardType.SameBasePremium => (from id in GetSameBaseIdListInUserCard(cardParameterFromId.BaseCardId).Where(delegate(int id)
{
CardParameter cardParameterFromId2 = _cardMaster.GetCardParameterFromId(id);
return cardParameterFromId2.IsFoil && !cardParameterFromId2.IsPrizeCard;
})
orderby id descending
select id).ToList().Find(AddCardToDeck) > 0,
CardType.PrizeNormal => (from id in GetSameBaseIdListInUserCard(cardParameterFromId.BaseCardId).Where(delegate(int id)
{
CardParameter cardParameterFromId2 = _cardMaster.GetCardParameterFromId(id);
return cardParameterFromId2.IsReprintedCard && !cardParameterFromId2.IsFoil;
})
orderby id descending
select id).ToList().Find(AddCardToDeck) > 0,
CardType.PrizePremium => (from id in GetSameBaseIdListInUserCard(cardParameterFromId.BaseCardId).Where(delegate(int id)
{
CardParameter cardParameterFromId2 = _cardMaster.GetCardParameterFromId(id);
return cardParameterFromId2.IsReprintedCard && cardParameterFromId2.IsFoil;
})
orderby id descending
select id).ToList().Find(AddCardToDeck) > 0,
_ => false,
};
}
private List<int> GetSameBaseIdListInUserCard(int baseCardId)
{
return _userOwnCardData.Keys.ToList().FindAll(delegate(int id)
{
CardParameter cardParameterFromId = CardMaster.GetInstance(_formatBehavior.CardMasterId).GetCardParameterFromId(id);
return cardParameterFromId.BaseCardId == baseCardId && cardParameterFromId.NormalCardId != baseCardId;
});
}
private bool AddCardToDeck(int cardId)
{
if (IsHaveCard(cardId))
{
_afterDeckCardList.Add(cardId);
_userOwnCardData[cardId]--;
return true;
}
return false;
}
private void AddNewestCraftableCardToDeck(int cardId)
{
int newestCraftableCardId = GetNewestCraftableCardId(CardMaster.GetInstance(_formatBehavior.CardMasterId).GetCardParameterFromId(cardId).BaseCardId, _formatBehavior);
_afterDeckCardList.Add(newestCraftableCardId);
if (_userOwnCardData.ContainsKey(newestCraftableCardId))
{
_userOwnCardData[newestCraftableCardId]--;
}
}
private bool IsHaveCard(int cardId)
{
int value = 0;
_userOwnCardData.TryGetValue(cardId, out value);
return value > 0;
}
}
private const int DEPTH_RESULT_DIALOG = 100;
public static string CurrentDeckName = null;
private static Format EditDeckFormat = Format.Max;
private static int CurrentDeckId = 1;
public static DeckData CurrentDeckData = null;
public static ClassSet ClassSet = null;
public static MyRotationInfo MyRotationInfo = null;
private static DeckData CopySrcDeckData = null;
private static bool IsCopySkinAndSleeve = false;
private static bool IsCopySubClass = false;
private static bool IsCreatedByBuilder = false;
private static bool IsCreateAuto = false;
private static ConventionDeckList _conventionDeckList = null;
private static bool CanUseNonPossessionCard = false;
private DeckGroupListData _deckGroupListData;
private const string CRAFT_BTN_LEFT_ON = "pilltab_02_left_on";
private const string CRAFT_BTN_LEFT_OFF = "pilltab_02_left_off";
private const string CRAFT_BTN_RIGHT_ON = "pilltab_02_right_on";
private const string CRAFT_BTN_RIGHT_OFF = "pilltab_02_right_off";
private const string MY_ROTATION_ALL_PACK_SPRITE = "btn_check_";
private const string BUTTON_SPRITE_FOOTER_OFF = "off";
private const string BUTTON_SPRITE_FOOTER_ON = "on";
private readonly Vector3 MY_ROTATION_FORMAT_ICON_POSITION = new Vector3(45f, -47f, 0f);
private readonly Vector3 MY_ROTATION_CARD_NUMBER_ICON_POSITION = new Vector3(68f, -62f, -1f);
private readonly Vector3 MY_ROTATION_CARD_NUMBER_POSITION = new Vector3(24f, 0f, 0f);
private readonly Vector3 MY_ROTATION_CARD_NUMBER_MAX_POSITION = new Vector3(58f, 0f, 0f);
private const int MY_ROTATION_CLASS_NAME_WIDTH = 107;
private const int MY_ROTATION_CLASS_UNDER_LINE_WIDTH = 184;
private const float BACK_BUTTON_POS_Y = -40.7f;
[SerializeField]
private DeckBuildShortageCardView _prefabShortageCardView;
[SerializeField]
private UISprite _formatIcon;
[SerializeField]
private CostCurveUI m_costCurve;
[SerializeField]
private UICardList m_deckViewerPrefab;
private UICardList _deckViewer;
[SerializeField]
private CardDetailUI m_cardDetailPrefab;
private CardDetailUI _cardDetail;
[SerializeField]
private UILabel m_labelDeckName;
[SerializeField]
private UILabel m_labelClassName;
[SerializeField]
private UILabel m_labelDeckCardNum;
private int _deckCardNum;
[SerializeField]
private UILabel _labelDeckCardMaxNum;
[SerializeField]
private UILabel m_labelCharCardNum;
[SerializeField]
private UILabel m_labelSpellCardNum;
[SerializeField]
private UILabel m_labelFieldCardNum;
[SerializeField]
private UIButton m_craftOnBtn;
[SerializeField]
private UIButton m_craftOffBtn;
[SerializeField]
private UIButton m_saveButton;
[SerializeField]
private UIButton m_autoCreateButton;
[SerializeField]
private UIButton m_deckViewerButton;
[SerializeField]
private RewardBase _rewardBase;
[SerializeField]
private UIButton _craftShortageCardButton;
[SerializeField]
private UIButton _swapClassButton;
[SerializeField]
private GameObject _useSubClassRoot;
[SerializeField]
private UILabel _useSubClassDeckCardNumLabel;
[SerializeField]
private UILabel _useSubClassDeckCardNumMaxLabel;
[SerializeField]
private UISprite _useSubClassMainClassIconSprite;
[SerializeField]
private UILabel _useSubClassMainClassCardNumLabel;
[SerializeField]
private UILabel _useSubClassMainClassCardNumMinLabel;
[SerializeField]
private UISprite _useSubClassSubClassIconSprite;
[SerializeField]
private UILabel _useSubClassSubClassCardNumLabel;
[SerializeField]
private UILabel _useSubClassSubClassCardNumMinLabel;
[SerializeField]
private UISprite _useSubClassFormatIconSprite;
[SerializeField]
private UIButton _myRotationChangeButton;
[SerializeField]
private GameObject _myRotationRoot;
[SerializeField]
private GameObject _myRotationRoot2;
[SerializeField]
private UIGrid _myRotationAbilityGrid;
[SerializeField]
private GameObject _myRotationIconOriginal;
[SerializeField]
private UISprite _myRotationClassIcon;
[SerializeField]
private ItemToggle _myRotationAllPackVisibleToggle;
private bool _myRotationAllPackVisible;
[SerializeField]
private GameObject _cardNumberIcon;
[SerializeField]
private UISprite _classNameUnderLine;
[SerializeField]
private UILabel _myRotationPackShortName;
[SerializeField]
private BoxCollider _allPackVisibleCollider;
private MyRotationInfo _myRotationInfo;
private bool _hasChanged;
private bool _fadeInFinish;
private IFormatBehavior _formatBehavior;
private List<int> _shortageIdList = new List<int>();
private bool _isEnableSpotCard;
private bool _enableFitOnChangeDeckCardNumChange = true;
private List<string> _otherDeckNames = new List<string>();
private bool _needsClearSkin;
private bool _isDefaultDeckName;
private ConventionInfo ConventionInfo
{
get
{
if (_conventionDeckList != null)
{
return _conventionDeckList.Conventioninfo;
}
return null;
}
}
private CardBundleController _deckCardBundle
{
get
{
return (CardBundleController)_cardBundle;
}
set
{
_cardBundle = value;
}
}
private int DeckCardNum
{
get
{
return _deckCardNum;
}
set
{
_deckCardNum = value;
UIManager.SetObjectToGrey(m_saveButton.gameObject, _deckCardNum <= 0);
_deckCardBundle.SelectionAreaList.CountEachType(out var charNum, out var spellNum, out var fieldNum);
m_labelCharCardNum.text = charNum.ToString();
m_labelSpellCardNum.text = spellNum.ToString();
m_labelFieldCardNum.text = fieldNum.ToString();
if (_enableFitOnChangeDeckCardNumChange)
{
_stateEdit.Fit();
}
this.OnChangeDeckCardNum.Call(value);
}
}
public bool IsCraftMode => _deckCardBundle.IsCraftMode;
public bool IsBattleRetry { get; set; }
public bool IsEditState => m_state == _stateEdit;
public event Action<int> OnChangeDeckCardNum;
private DeckData GetDeck(Format format, int deckId)
{
if (_conventionDeckList != null)
{
return _conventionDeckList.DeckList[deckId];
}
return _deckGroupListData.GetDeckByAttribute(DeckAttributeType.CustomDeck, deckId, format);
}
public static void SetDeckEditParameter(DeckData deck, ConventionDeckList conventionDeckList, bool canUseNonPossessionCard = true)
{
CurrentDeckName = deck.GetDeckName();
CurrentDeckId = deck.GetDeckID();
CurrentDeckData = deck;
EditDeckFormat = deck.Format;
ClassSet = new ClassSet(deck.GetDeckClassID(), deck.GetDeckSubClassID());
CopySrcDeckData = null;
IsCopySkinAndSleeve = false;
IsCopySubClass = false;
IsCreatedByBuilder = false;
IsCreateAuto = false;
_conventionDeckList = conventionDeckList;
CanUseNonPossessionCard = conventionDeckList == null && canUseNonPossessionCard;
MyRotationInfo = Data.MyRotationAllInfo.Get(deck.MyRotationId);
UIManager.GetInstance().OverrideSceneParam(UIManager.ViewScene.DeckList, new DeckListUIParam(deck.Format, conventionDeckList?.Conventioninfo));
}
public static void SetDeckCopyParameter(DeckData deck, bool isCreatedByBuilder, bool isCopySubClass, ConventionDeckList conventionDeckList, MyRotationInfo myRotationInfo = null)
{
CopySrcDeckData = deck;
ClassSet = new ClassSet(deck.GetDeckClassID(), deck.GetDeckSubClassID());
IsCopySkinAndSleeve = PlayerPrefsWrapper.GetBool(PlayerPrefsWrapper.IS_COPY_SLEEVE_AND_SKIN);
IsCopySubClass = isCopySubClass;
IsCreatedByBuilder = isCreatedByBuilder;
_conventionDeckList = conventionDeckList;
CanUseNonPossessionCard = conventionDeckList == null;
if (deck.DeckAttributeType == DeckAttributeType.TrialDeck || deck.DeckAttributeType == DeckAttributeType.SampleDeck)
{
IsCreatedByBuilder = true;
}
if (myRotationInfo == null)
{
MyRotationInfo = Data.MyRotationAllInfo.Get(deck.MyRotationId);
}
else
{
MyRotationInfo = myRotationInfo;
}
}
public static void SetCreateAutoParameter(Format format, bool canUseNonPossessionCard)
{
IsCreateAuto = true;
CanUseNonPossessionCard = canUseNonPossessionCard;
}
public static void SetDeckCopyParameterForDeckIntroduction(DeckData emptyDeck, DeckData srcDeck, MyRotationInfo myRotationInfo = null)
{
CurrentDeckName = null;
CurrentDeckId = emptyDeck.GetDeckID();
CurrentDeckData = emptyDeck;
EditDeckFormat = emptyDeck.Format;
ClassSet = new ClassSet(srcDeck.GetDeckClassID(), srcDeck.GetDeckSubClassID());
CopySrcDeckData = srcDeck;
IsCopySkinAndSleeve = false;
IsCopySubClass = FormatBehaviorManager.GetDefaultBehaviour(srcDeck.Format).UseSubClass && PlayerPrefsWrapper.GetBool(PlayerPrefsWrapper.IS_COPY_SUBCLASS_CARDS);
IsCreatedByBuilder = true;
IsCreateAuto = false;
_conventionDeckList = null;
CanUseNonPossessionCard = true;
if (EditDeckFormat == Format.MyRotation)
{
if (myRotationInfo == null)
{
MyRotationInfo = Data.MyRotationAllInfo.Get(srcDeck.MyRotationId);
}
else
{
MyRotationInfo = myRotationInfo;
}
}
UIManager.GetInstance().OverrideSceneParam(UIManager.ViewScene.DeckList, new DeckListUIParam(emptyDeck.Format, null));
}
public static void SetBuildDeckEditParameter(DeckData buildDeck, string deckName, DeckData emptyDeck)
{
CurrentDeckName = deckName;
CurrentDeckId = emptyDeck.GetDeckID();
CurrentDeckData = emptyDeck;
ClassSet = new ClassSet(buildDeck.GetDeckClassID(), buildDeck.GetDeckSubClassID());
EditDeckFormat = emptyDeck.Format;
CopySrcDeckData = buildDeck;
IsCopySkinAndSleeve = false;
IsCopySubClass = FormatBehaviorManager.GetDefaultBehaviour(buildDeck.Format).UseSubClass && PlayerPrefsWrapper.GetBool(PlayerPrefsWrapper.IS_COPY_SUBCLASS_CARDS);
IsCreatedByBuilder = true;
IsCreateAuto = false;
_conventionDeckList = null;
CanUseNonPossessionCard = true;
MyRotationInfo = null;
UIManager.GetInstance().OverrideSceneParam(UIManager.ViewScene.DeckList, new DeckListUIParam(emptyDeck.Format, null));
}
public override bool IsEnableSwipeAutoSameBasicCardAdd()
{
return true;
}
private static MyRotationInfo GetDefaultMyRotationData()
{
return Data.MyRotationAllInfo.MyRotationInfoList[Data.MyRotationAllInfo.MyRotationInfoList.Count - 1];
}
public override void onFirstStart()
{
if (!DeckListUI.IsSpecialFormatPeriodError(EditDeckFormat))
{
if (EditDeckFormat == Format.MyRotation && MyRotationInfo == null)
{
MyRotationInfo = GetDefaultMyRotationData();
}
if (MyRotationInfo != null)
{
_myRotationInfo = MyRotationInfo;
MyRotationInfo = null;
SetMyRotationData(_myRotationInfo);
}
_deckViewer = UnityEngine.Object.Instantiate(m_deckViewerPrefab);
_deckViewer.transform.parent = base.transform;
_deckViewer.transform.localPosition = Vector3.zero;
_deckViewer.transform.localScale = Vector3.one;
_deckViewer.SetCamera(null);
_deckViewer.SetShareButtonUse(isUse: true);
_deckViewer.gameObject.SetActive(value: false);
TopBar topBar = UIManager.GetInstance().CreateTopBar(base.gameObject, null, UIManager.ViewScene.DeckList, MoneyDraw: false);
InitFormatDependency();
m_costCurve.Initialize(base.FormatBehavior.CardMasterId);
Transform obj = topBar.BackButton.transform;
Vector3 localPosition = obj.localPosition;
localPosition.y = -40.7f;
obj.localPosition = localPosition;
base.Format = EditDeckFormat;
UIEventListener.Get(m_autoCreateButton.gameObject).onClick = OnClickAutoDeckBtn;
UIEventListener.Get(m_saveButton.gameObject).onClick = OnClickSaveBtn;
UIEventListener.Get(m_craftOnBtn.gameObject).onClick = delegate
{
ChangeCraftMode(isCraft: true);
};
UIEventListener.Get(m_craftOffBtn.gameObject).onClick = delegate
{
ChangeCraftMode(isCraft: false);
};
UIEventListener.Get(m_deckViewerButton.gameObject).onClick = delegate
{
ShowDeckViewer();
};
UIEventListener.Get(_craftShortageCardButton.gameObject).onClick = OnClickCraftShortageCardButton;
UIEventListener.Get(_swapClassButton.gameObject).onClick = OnClickSwapClassButton;
UIEventListener.Get(_myRotationChangeButton.gameObject).onClick = OnClickMyRotationChangeButton;
_craftShortageCardButton.gameObject.SetActive(CanUseNonPossessionCard);
_swapClassButton.gameObject.SetActive(base.FormatBehavior.UseSubClass);
_isSelectableSpotCard = true;
_isEnableSpotCard = !base.FormatBehavior.IsConventionMode;
_deckCardBundle = new CardBundleController(_parentSelectionObj, m_parentPagingObj, m_sleeveOriginal, m_cardInfoOriginal, _formatBehavior, _isEnableSpotCard, _isEnableSpotCard, _isEnableSpotCard, CanUseNonPossessionCard);
_deckCardBundle.OnCreateDeckSleeve += OnCreateDeckSleeve;
_deckCardBundle.OnCreateDeckCard += OnCreateDeckCard;
_deckCardBundle.OnCreateAutoDeck += OnCreateAutoDeck;
_deckCardBundle.OnInsertDeckCard += OnInsertDeckCard;
_deckCardBundle.OnRemoveDeckCard += OnRemoveDeckCard;
_enableSelectSameKindCardNum = true;
base.onFirstStart();
DeckListUtility.SaveLastSelectDeck(CurrentDeckId, isDefaultDeck: false, isTrialDeck: false, EditDeckFormat);
if (ConventionInfo == null)
{
UIManager.GetInstance().UpdateFooterMenuTexture(UIManager.ViewScene.DeckCardEdit);
}
CardMaster.CardMasterId cardMasterId = base.FormatBehavior.CardMasterId;
List<int> cardPool = UIManager.GetInstance().getUIBase_CardManager().SortIDList(CardMaster.GetInstance(cardMasterId).GetAllCardIds(), cardMasterId);
FilterController.MyRotationFilterType myRotationFilterType = FilterController.MyRotationFilterType.None;
if (_myRotationInfo != null)
{
myRotationFilterType = base.MyRotationFilterTypeCardPool;
}
_selectCardFilter.InitializeFilterForDeckEdit(cardPool, ClassSet, EditDeckFormat, _myRotationInfo, myRotationFilterType);
_pagingFilter.InitializeFilterForDeckEdit(cardPool, ClassSet, EditDeckFormat, _myRotationInfo, myRotationFilterType);
_stateCardDrag.AddCardForSameCardSwipe = AddCardForSwipe;
_myRotationRoot.SetActive(EditDeckFormat == Format.MyRotation);
_myRotationRoot2.SetActive(EditDeckFormat == Format.MyRotation);
_myRotationIconOriginal.SetActive(value: false);
if (EditDeckFormat == Format.MyRotation)
{
InitializeMyRotation();
UpdateMyRotationAbilityIcon();
SetMyRotationRayout();
}
StartCoroutine(Setup_Coroutine());
}
}
private void SetMyRotationRayout()
{
_formatIcon.transform.localPosition = MY_ROTATION_FORMAT_ICON_POSITION;
_cardNumberIcon.transform.localPosition = MY_ROTATION_CARD_NUMBER_ICON_POSITION;
m_labelClassName.width = 107;
m_labelDeckCardNum.transform.localPosition = MY_ROTATION_CARD_NUMBER_POSITION;
_labelDeckCardMaxNum.transform.localPosition = MY_ROTATION_CARD_NUMBER_MAX_POSITION;
_classNameUnderLine.width = 184;
}
private void InitializeMyRotation()
{
_myRotationClassIcon.spriteName = ClassCharaPrm.GetIconSpriteName(ClassSet.MainClass);
m_labelClassName.enabled = false;
_myRotationPackShortName.text = _myRotationInfo.LastPackText;
}
private void AddCardForSwipe(int cardNo)
{
_enableFitOnChangeDeckCardNumChange = false;
List<int> list = new List<int>();
list.Add(cardNo);
_deckCardBundle.CreateDeckAddCard(list);
}
private IEnumerator Setup_Coroutine()
{
base.IsSetup = true;
yield return null;
_hasChanged = false;
OnChangeSlideEnd = delegate(bool slideEnd)
{
_allPackVisibleCollider.enabled = slideEnd;
};
_myRotationAllPackVisibleToggle.AddChangeCallback(delegate
{
OnChangeMyRotationAllPackVisible();
});
_myRotationAllPackVisibleToggle.SetValidator(ChangeMyRotationAllPackVisibleValidator);
SetupDeckProperty(out var rawSkinId, out var isRandomLeaderSkin, out var leaderSkinIdList, out var sleeveId, out var isNotAvailableCard);
if (EditDeckFormat != Format.Sealed)
{
DeckInfoTask task = new DeckInfoTask();
task.SetParameter(Format.All);
UIManager.GetInstance().StartCoroutine(Toolbox.NetworkManager.Connect(task, delegate
{
_deckGroupListData = task.DeckGroupListData;
List<DeckData> source = ((_conventionDeckList != null) ? new List<DeckData>(_conventionDeckList.DeckIdList.Select((int deckId) => _conventionDeckList.DeckList[deckId])) : _deckGroupListData.GetDeckListByFormat(base.Format));
_otherDeckNames = (from deck in source
where deck != null
select deck.GetDeckName() into name
where name != CurrentDeckName
select name).ToList();
}));
while (!task.IsResultSuccess)
{
yield return null;
}
}
SetupConventionView();
m_craftOnBtn.normalSprite = "pilltab_02_right_off";
m_craftOffBtn.normalSprite = "pilltab_02_left_on";
_selectCardFilter.FormatState = EditDeckFormat;
_selectCardFilter.IsAbleFormatFilter = false;
_pagingFilter.FormatState = EditDeckFormat;
UIBase_CardManager.FilterParameter param = new UIBase_CardManager.FilterParameter
{
FixedClassSet = ClassSet
};
_deckCardBundle.FilterParameter = _pagingFilter.GetFilterParameter(param);
string text = CurrentDeckName;
if (CurrentDeckName == null && CurrentDeckData.IsNoCard())
{
text = DeckUtil.CreateDefaultDeckName(ClassSet, base.FormatBehavior.UseSubClass, _otherDeckNames, EditDeckFormat, _myRotationInfo);
_isDefaultDeckName = true;
}
_deckCardBundle.Setup(text, CurrentDeckData, ClassSet, rawSkinId, isRandomLeaderSkin, leaderSkinIdList, sleeveId, CopySrcDeckData, EditDeckFormat, _conventionDeckList, _deckGroupListData);
while (!_deckCardBundle.IsReady)
{
yield return null;
}
string sleevePath = sleeveId.ToString();
Sleeve sleeveData = Data.Master.SleeveMgr.Get(sleeveId);
_resourcePathList = GetResourcePathList(sleevePath, sleeveData);
yield return StartCoroutine(Toolbox.ResourcesManager.LoadAssetGroupAsync(_resourcePathList, null));
m_sleeveOriginal.mainTexture = Toolbox.ResourcesManager.LoadObject<Texture>(Toolbox.ResourcesManager.GetAssetTypePath(sleevePath, ResourcesManager.AssetLoadPathType.SleeveTexture, isfetch: true));
if (sleeveData.IsPremiumSleeve)
{
UIManager.GetInstance().getUIBase_CardManager().SetSleeveTexture(m_sleeveOriginal, sleeveData.sleeve_id);
}
if (base.Format == Format.MyRotation)
{
SetMyRotationData(_myRotationInfo);
}
bool isEffectSetupEnd = false;
SetupEffect(delegate
{
isEffectSetupEnd = true;
});
while (!isEffectSetupEnd)
{
yield return null;
}
SetupDeckViewerAndText();
if (_formatBehavior.IsShowFirstTipsAtDeckEdit)
{
UIManager.GetInstance().CheckFirstTips(FirstTips.TipsType.Deck);
}
CountDeckCardNum();
SetupState();
SetupSimpleDetail();
HideDetail();
HideDeckViewer();
if (IsCreateAuto)
{
CreateAutoDeck(forceClear: false);
while (IsCreateAuto)
{
yield return null;
}
}
if (IsCreatedByBuilder && _shortageIdList.Count > 0)
{
ShowShortageCardViewer(delegate
{
UIManager.GetInstance().OnReadyViewScene(isFadein: true, OnFinishFadeIn);
});
}
else
{
UIManager.GetInstance().OnReadyViewScene(isFadein: true, OnFinishFadeIn);
}
while (!_fadeInFinish)
{
yield return null;
}
if (_formatBehavior.IsShowFirstTipsAtDeckEdit)
{
while (FirstTips.IsFirstTipsOpen(FirstTips.TipsType.Deck))
{
yield return null;
}
}
if (isNotAvailableCard)
{
DialogBase dialogBase = UIManager.GetInstance().CreateDialogClose();
dialogBase.SetText(Data.SystemText.Get("Card_0188"));
dialogBase.SetButtonLayout(DialogBase.ButtonLayout.OkBtn);
}
}
private void SetupDeckViewerAndText()
{
m_labelDeckName.text = _deckCardBundle.DeckName;
m_labelClassName.text = GameMgr.GetIns().GetDataMgr().GetClanNameByKey((int)ClassSet.MainClass);
_deckViewer.RemoveData();
_deckViewer.SetDeckName(_deckCardBundle.DeckName);
_deckViewer.SetClassSet(ClassSet);
_deckViewer.SetFormat(EditDeckFormat, _conventionDeckList);
_redetherNum.text = PlayerStaticData.UserRedEtherCount.ToString();
}
private List<string> GetResourcePathList(string sleevePath, Sleeve sleeveData)
{
_resourcePathList = new List<string>();
_resourcePathList.Add(Toolbox.ResourcesManager.GetAssetTypePath(sleevePath, ResourcesManager.AssetLoadPathType.SleeveTexture));
if (sleeveData.IsPremiumSleeve)
{
UIManager.GetInstance().getUIBase_CardManager().AddPremireSleevePath(ref _resourcePathList, sleeveData);
}
_resourcePathList.AddRange(GetEffectAssetPathList());
return _resourcePathList;
}
private void SetupDeckProperty(out int rawSkinId, out bool isRandomLeaderSkin, out List<int> leaderSkinIdList, out long sleeveId, out bool isNotAvailableCard)
{
if (CopySrcDeckData != null)
{
_hasChanged = true;
ClassSet = new ClassSet(CopySrcDeckData.GetDeckClassID(), CopySrcDeckData.GetDeckSubClassID());
if (EditDeckFormat == Format.Crossover && !IsCopySubClass)
{
CopySrcDeckData.ExtractMainClassAndNeutralCards();
}
List<int> cardIdList = CopySrcDeckData.GetCardIdList();
if (ConventionInfo != null)
{
CopySrcDeckData.SetCardIdList(AccordDeck(cardIdList));
}
else if (IsCreatedByBuilder)
{
bool isFoilPreferred = Data.Load.data._userConfig.IsFoilPreferred;
bool isPrizePreferred = Data.Load.data._userConfig.IsPrizePreferred;
if (isFoilPreferred && isPrizePreferred)
{
CopySrcDeckData.SetCardIdList(AccordDeckPremiumAndPrize(cardIdList));
}
else if (isPrizePreferred)
{
CopySrcDeckData.SetCardIdList(AccordDeckPrize(cardIdList));
}
else if (isFoilPreferred)
{
CopySrcDeckData.SetCardIdList(AccordDeckPremium(cardIdList));
}
else
{
CopySrcDeckData.SetCardIdList(AccordDeck(cardIdList));
}
}
isNotAvailableCard = IsNotAvailableCardInIds(cardIdList, EditDeckFormat, base.FormatBehavior, _myRotationInfo);
rawSkinId = (IsCopySkinAndSleeve ? CopySrcDeckData.GetRawSkinId() : 0);
isRandomLeaderSkin = IsCopySkinAndSleeve && CopySrcDeckData.IsSkinRandom;
bool flag = IsCopySkinAndSleeve && CopySrcDeckData.SelectRandomSkinIdList != null && CopySrcDeckData.SelectRandomSkinIdList.Count > 0;
leaderSkinIdList = (flag ? CopySrcDeckData.SelectRandomSkinIdList : new List<int> { 0 });
sleeveId = (IsCopySkinAndSleeve ? Toolbox.ResourcesManager.GetExistingSleeveId(CopySrcDeckData.GetDeckSleeveID()) : 3000011);
}
else
{
isNotAvailableCard = false;
rawSkinId = CurrentDeckData.GetRawSkinId();
isRandomLeaderSkin = CurrentDeckData.IsSkinRandom;
bool flag2 = CurrentDeckData.SelectRandomSkinIdList != null && CurrentDeckData.SelectRandomSkinIdList.Count > 0;
leaderSkinIdList = (flag2 ? CurrentDeckData.SelectRandomSkinIdList : new List<int> { 0 });
sleeveId = Toolbox.ResourcesManager.GetExistingSleeveId(CurrentDeckData.GetDeckSleeveID());
}
}
private void SetupConventionView()
{
if (ConventionInfo != null)
{
m_craftOnBtn.gameObject.SetActive(value: false);
m_craftOffBtn.gameObject.SetActive(value: false);
_redetherNum.transform.parent.gameObject.SetActive(value: false);
}
}
private void InitFormatDependency()
{
InitializeBase(EditDeckFormat, _conventionDeckList);
_formatBehavior = base.FormatBehavior;
bool isCraftableCardAtDeckEdit = _formatBehavior.IsCraftableCardAtDeckEdit;
UIManager.GetInstance().setBackScene(base.gameObject, _formatBehavior.DeckEditBackScene);
_formatIcon.spriteName = _formatBehavior.SmallIconSpriteName;
m_labelDeckName.gameObject.SetActive(_formatBehavior.IsShowDeckName);
if (!_formatBehavior.IsShowDeckName)
{
UIUtil.AddPositionY(m_labelClassName.transform, 21f);
UIUtil.AddPositionY(_formatIcon.transform, 21f);
UIUtil.AddPositionY(m_labelDeckCardNum.transform.parent, 21f);
UIUtil.AddPositionY(m_labelCharCardNum.transform.parent.parent, 18f);
}
m_autoCreateButton.gameObject.SetActive(_formatBehavior.IsShowAutoDeckCreateButtonAtDeckEdit);
m_craftOnBtn.gameObject.SetActive(isCraftableCardAtDeckEdit);
m_craftOffBtn.gameObject.SetActive(isCraftableCardAtDeckEdit);
_redetherNum.transform.parent.gameObject.SetActive(isCraftableCardAtDeckEdit);
base.IsShowCardDetailCraftPanel = isCraftableCardAtDeckEdit;
_cardDetail = UnityEngine.Object.Instantiate(m_cardDetailPrefab);
_cardDetail.transform.parent = base.transform;
_cardDetail.transform.localPosition = Vector3.zero;
_cardDetail.transform.localScale = Vector3.one;
_cardDetail.gameObject.SetActive(value: false);
_cardDetail.Initialize(_cardDetail.gameObject.layer, base.FormatBehavior.CardMasterId);
_cardDetail.IsShowFlavorTextButton = true;
_cardDetail.IsShowVoiceButton = true;
_cardDetail.IsShowEvolutionButton = true;
_deckViewer.Init(_deckViewer.gameObject, _cardDetail, "", HideDeckViewer, "Detail", in_DetailCameraUse: false, null, _formatBehavior.DeckCardNumMax);
_deckViewer.SubmitDeckType = _formatBehavior.DeckCodeType;
bool flag = _formatBehavior.DeckCardNumMin == _formatBehavior.DeckCardNumMax;
_labelDeckCardMaxNum.gameObject.SetActive(flag);
if (flag)
{
_labelDeckCardMaxNum.text = "/" + _formatBehavior.DeckCardNumMax;
}
InitUseSubClassDisplay();
}
public void OnBtnPushSelectCardFilter()
{
GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_COMMON_BUTTON);
ShowFilterMenu(_selectCardFilter, Data.SystemText.Get("Card_0126"));
}
public void OnBtnPushOwnFilter()
{
GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_COMMON_BUTTON);
ShowFilterMenu(_pagingFilter, Data.SystemText.Get("Card_0021"));
}
protected override void OnFinishFadeIn()
{
_fadeInFinish = true;
base.OnFinishFadeIn();
IsCreatedByBuilder = false;
}
public static bool IsNotAvailableCardInIds(List<int> cardIds, Format format, IFormatBehavior formatBehavior, MyRotationInfo myRotationInfo)
{
CardMaster master = CardMaster.GetInstance(formatBehavior.CardMasterId);
List<int> source = cardIds.ConvertAll((int id) => master.GetCardParameterFromId(id).BaseCardId);
List<int> list = source.Distinct().ToList();
for (int num = 0; num < list.Count; num++)
{
CardParameter param = master.GetCardParameterFromId(list[num]);
ClassType classType = ClassUtil.GetClassType(param, format, ClassSet);
if (!param.IsAvailableFormat(format, classType, myRotationInfo))
{
return true;
}
if (source.Count((int entry) => entry == param.BaseCardId) > param.GetSameKindNumMaxInFormat(format, formatBehavior, classType, myRotationInfo))
{
return true;
}
}
return false;
}
public bool LoadDeckCard(List<int> idList)
{
base.IsLoading = true;
HideDetail();
return _deckCardBundle.LoadDeckCard(idList);
}
public void ChangeCraftMode(bool isCraft)
{
if (!base.IsLoading && base.CurrentState == _stateEdit)
{
base.IsLoading = true;
m_craftOnBtn.normalSprite = (isCraft ? "pilltab_02_right_on" : "pilltab_02_right_off");
m_craftOffBtn.normalSprite = (isCraft ? "pilltab_02_left_off" : "pilltab_02_left_on");
GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_TOGGLE_ON);
_deckCardBundle.ChangeCraftMode(isCraft);
}
}
public void CreateAutoDeck(bool forceClear)
{
_isDisableTouchWhileLoading = true;
base.IsLoading = true;
m_costCurve.Refresh();
DeckCardNum = 0;
_hasChanged = true;
int tournamentId = 0;
if (ConventionInfo != null && base.FormatBehavior.IsConventionMode)
{
tournamentId = int.Parse(ConventionInfo.Id);
}
_deckCardBundle.CreateAutoDeck(forceClear, tournamentId, _myRotationInfo);
}
private void RecreateDeckAddCard(List<int> addIdList)
{
_isDisableTouchWhileLoading = true;
base.IsLoading = true;
m_costCurve.Refresh();
DeckCardNum = 0;
if (CanUseNonPossessionCard)
{
addIdList = new List<int>();
}
_hasChanged = true;
_deckCardBundle.CreateDeckAddCard(addIdList);
}
private void RecreateDeckRemoveCard(int removeId)
{
_isDisableTouchWhileLoading = true;
base.IsLoading = true;
m_costCurve.Refresh();
DeckCardNum = 0;
if (CanUseNonPossessionCard)
{
removeId = -1;
}
_hasChanged = true;
_deckCardBundle.CreateDeckRemoveCard(removeId);
}
private void SaveDeck()
{
Action<CardBundleController> deckSaveFunc = _formatBehavior.DeckSaveFunc;
if (deckSaveFunc != null)
{
deckSaveFunc(_deckCardBundle);
return;
}
Action<bool> saveCompleteDialogAction = delegate(bool isUsable)
{
Action changeSceneToDeckList = delegate
{
DeckListUI.ChangeSceneToDeckList(EditDeckFormat, null, ConventionInfo);
};
Action<Action> closeAction = delegate(Action changeSceneAction)
{
DeckUpdateTask deckUpdateTask = null;
bool flag = false;
if (ConventionInfo == null)
{
deckUpdateTask = GameMgr.GetIns().GetDeckUpdateTask();
flag = deckUpdateTask.AchievedInfo._rewards.Count > 0;
}
if (flag)
{
UIManager.GetInstance().createInSceneCenterLoading();
DialogBase dialogBase = UIManager.GetInstance().CreateDialogClose();
dialogBase.SetSize(DialogBase.Size.M);
dialogBase.SetTitleLabel(Data.SystemText.Get("Story_0029"));
dialogBase.SetButtonLayout(DialogBase.ButtonLayout.OkBtn);
dialogBase.OnClose = changeSceneAction;
RewardBase component = NGUITools.AddChild(dialogBase.gameObject, _rewardBase.gameObject).GetComponent<RewardBase>();
for (int i = 0; i < deckUpdateTask.AchievedInfo._rewards.Count; i++)
{
component.AddReward(deckUpdateTask.AchievedInfo._rewards[i]);
}
component.EndCreate();
}
else
{
changeSceneAction();
}
};
DialogBase saveCompleteDialog = UIManager.GetInstance().CreateDialogClose();
saveCompleteDialog.OnClose = delegate
{
closeAction(changeSceneToDeckList);
};
if (IsBattleRetry && isUsable)
{
SystemText systemText = Data.SystemText;
saveCompleteDialog.SetTitleLabel(Data.SystemText.Get("Card_0246"));
saveCompleteDialog.SetText(GetSaveAndRetryDialogText());
saveCompleteDialog.SetButtonLayout(DialogBase.ButtonLayout.BlueBtn_CancelBtn);
saveCompleteDialog.SetButtonText(systemText.Get("Card_0247"), systemText.Get("Card_0248"));
saveCompleteDialog.onPushButton1 = delegate
{
saveCompleteDialog.OnClose = delegate
{
closeAction(ChangeSceneToBattle);
};
};
}
else
{
saveCompleteDialog.SetTitleLabel(Data.SystemText.Get("Dia_DeckEdit_007_Title"));
saveCompleteDialog.SetText(Data.SystemText.Get("Card_0019"));
saveCompleteDialog.SetButtonLayout(DialogBase.ButtonLayout.OkBtn);
}
};
_deckCardBundle.SaveDeck(null, saveCompleteDialogAction, _needsClearSkin);
}
private void ChangeSceneToBattle()
{
DataMgr dataManager = GameMgr.GetIns().GetDataMgr();
DeckInfoTask task = new DeckInfoTask();
task.SetParameter(Format.All);
UIManager.GetInstance().StartCoroutine(Toolbox.NetworkManager.Connect(task, delegate
{
DeckData deckByAttribute = task.DeckGroupListData.GetDeckByAttribute(DeckAttributeType.CustomDeck, _deckCardBundle.DeckId, base.Format);
switch (dataManager.m_BattleType)
{
case DataMgr.BattleType.FreeBattle:
case DataMgr.BattleType.RankBattle:
FreeAndRankMatchDeckSelectConfirmDialog.DecideDeck(deckByAttribute, isBattleEnd: false, notBlack: true, notCollider: true);
break;
case DataMgr.BattleType.Quest:
QuestDeckSelectConfirmDialog.DecideDeck(deckByAttribute, isBattleAgain: false);
break;
}
}));
}
private string GetSaveAndRetryDialogText()
{
DataMgr dataMgr = GameMgr.GetIns().GetDataMgr();
switch (dataMgr.m_BattleType)
{
case DataMgr.BattleType.FreeBattle:
return Data.SystemText.Get("Card_0242");
case DataMgr.BattleType.RankBattle:
return Data.SystemText.Get("Card_0243");
case DataMgr.BattleType.Story:
return Data.SystemText.Get("Card_0240");
case DataMgr.BattleType.Practice:
return Data.SystemText.Get("Card_0241");
case DataMgr.BattleType.Quest:
if (dataMgr.QuestBattleData.IsMockBattle)
{
return Data.SystemText.Get("Quest_0027");
}
return Data.SystemText.Get("Card_0249");
case DataMgr.BattleType.BossRushQuest:
if (!dataMgr.BossRushBattleData.IsMockBattle)
{
return Data.SystemText.Get("Card_0249");
}
return Data.SystemText.Get("Quest_0027");
default:
return string.Empty;
}
}
private string GetRetryDialogText()
{
DataMgr dataMgr = GameMgr.GetIns().GetDataMgr();
switch (dataMgr.m_BattleType)
{
case DataMgr.BattleType.FreeBattle:
return Data.SystemText.Get("Card_0238");
case DataMgr.BattleType.RankBattle:
return Data.SystemText.Get("Card_0239");
case DataMgr.BattleType.Story:
return Data.SystemText.Get("Card_0236");
case DataMgr.BattleType.Practice:
return Data.SystemText.Get("Card_0237");
case DataMgr.BattleType.Quest:
if (dataMgr.QuestBattleData.IsMockBattle)
{
return Data.SystemText.Get("Quest_0028");
}
return Data.SystemText.Get("Card_0250");
default:
return string.Empty;
}
}
public int CountDeckCardNum()
{
DeckCardNum = _deckCardBundle.SelectionAreaList.CountSum;
if (_formatBehavior.UseSubClass)
{
int num = _deckCardBundle.SelectionAreaList.CountClassCard(ClassSet.MainClass);
int num2 = _deckCardBundle.SelectionAreaList.CountClassCard(ClassSet.SubClass);
SetDeckCardNumLabel(_useSubClassDeckCardNumLabel, DeckCardNum, IsDeckCardNumToRed(DeckCardNum));
SetDeckCardNumLabel(_useSubClassMainClassCardNumLabel, num, isRed: false);
SetDeckCardNumLabel(_useSubClassSubClassCardNumLabel, num2, isRed: false);
}
else
{
SetDeckCardNumLabel(m_labelDeckCardNum, DeckCardNum, IsDeckCardNumToRed(DeckCardNum));
}
m_costCurve.Refresh(_deckCardBundle.SelectionAreaList.IdList.ToArray());
return DeckCardNum;
}
protected override void AccordCardInfo()
{
base.AccordCardInfo();
CountDeckCardNum();
_redetherNum.text = PlayerStaticData.UserRedEtherCount.ToString();
UpdateCraftShortageButton();
}
private int GetDeckCardCount()
{
return _deckCardBundle.SelectionAreaList.CountSum;
}
private int GetMainClassCardCount()
{
return _deckCardBundle.SelectionAreaList.CountClassCard(ClassSet.MainClass);
}
private int GetSubClassCardCount()
{
return _deckCardBundle.SelectionAreaList.CountClassCard(ClassSet.SubClass);
}
private void DeckCardNumAnim()
{
DeckCardNum = _deckCardBundle.SelectionAreaList.CountSum;
if (_formatBehavior.UseSubClass)
{
PlayCardNumAnimation(_useSubClassDeckCardNumLabel, IsDeckCardNumToRed(DeckCardNum), GetDeckCardCount);
if (int.TryParse(_useSubClassMainClassCardNumLabel.text, out var result) && _deckCardBundle.SelectionAreaList.CountClassCard(ClassSet.MainClass) != result)
{
PlayCardNumAnimation(_useSubClassMainClassCardNumLabel, isRed: false, GetMainClassCardCount);
}
if (int.TryParse(_useSubClassSubClassCardNumLabel.text, out var result2) && _deckCardBundle.SelectionAreaList.CountClassCard(ClassSet.SubClass) != result2)
{
PlayCardNumAnimation(_useSubClassSubClassCardNumLabel, isRed: false, GetSubClassCardCount);
}
}
else
{
PlayCardNumAnimation(m_labelDeckCardNum, IsDeckCardNumToRed(DeckCardNum), GetDeckCardCount);
}
}
private void PlayCardNumAnimation(UILabel originLabel, bool isRed, Func<int> latestCardCount)
{
Transform transform = originLabel.transform;
UILabel cloneLabel = UnityEngine.Object.Instantiate(originLabel, transform.position, transform.rotation, transform.parent);
cloneLabel.transform.localScale = transform.localScale;
cloneLabel.depth = originLabel.depth + 1;
cloneLabel.alpha = 0f;
TweenAlpha anim = TweenAlpha.Begin(originLabel.gameObject, 0.2f, 0f);
TweenAlpha.Begin(cloneLabel.gameObject, 0.3f, 1f).onFinished.Add(new EventDelegate(delegate
{
UnityEngine.Object.Destroy(anim);
originLabel.alpha = 1f;
SetDeckCardNumLabel(originLabel, latestCardCount.Call(), isRed);
UnityEngine.Object.Destroy(cloneLabel.gameObject);
}));
SetDeckCardNumLabel(cloneLabel, latestCardCount.Call(), isRed);
}
private bool IsDeckCardNumToRed(int num)
{
if (!_formatBehavior.IsEmphasizeDeckCardShortage || num >= _formatBehavior.DeckCardNumMin)
{
if (_formatBehavior.IsEmphasizeDeckCardOverage)
{
return num > _formatBehavior.DeckCardNumMax;
}
return false;
}
return true;
}
private void SetDeckCardNumLabel(UILabel label, int num, bool isRed)
{
label.text = num.ToString();
label.color = (isRed ? LabelDefine.TEXT_COLOR_RED : LabelDefine.TEXT_COLOR_NORMAL);
}
private void OnCreateDeckSleeve()
{
_stateEdit.RefreshSelectionArea(isImmediate: false);
}
private void OnCreateDeckCard()
{
CountDeckCardNum();
base.IsLoading = false;
_isDisableTouchWhileLoading = false;
_stateEdit.RefreshSelectionArea(isImmediate: true);
UpdateCraftShortageButton();
_enableFitOnChangeDeckCardNumChange = true;
}
protected override void OnCreatePagingSleeve()
{
CountDeckCardNum();
base.OnCreatePagingSleeve();
}
private void OnInsertDeckCard(int id)
{
m_costCurve.Add(id, withAnim: true);
_hasChanged = true;
DeckCardNumAnim();
UpdateCraftShortageButton();
}
private void OnRemoveDeckCard(int id)
{
m_costCurve.Sub(id, withAnim: true);
_hasChanged = true;
DeckCardNumAnim();
UpdateCraftShortageButton();
}
private void OnChangeManyDeckCards()
{
_hasChanged = true;
m_costCurve.Refresh(_deckCardBundle.SelectionAreaList.IdList.ToArray());
DeckCardNumAnim();
UpdateCraftShortageButton();
}
public void SetAllDeckCards(List<int> cardIdList, Action onFirstAnimationFinish = null, float cardRotateDelayTimeMax = float.MaxValue)
{
_deckCardBundle.SetSelectionArea(cardIdList, onFirstAnimationFinish, cardRotateDelayTimeMax);
OnChangeManyDeckCards();
}
public void RemoveAllDeckCards()
{
_deckCardBundle.ClearSelectionArea();
OnChangeManyDeckCards();
}
public CardBundle GetDeckCardBundle()
{
return _deckCardBundle.SelectionAreaList;
}
private void OnClickAutoDeckBtn(GameObject obj)
{
GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_COMMON_BUTTON);
if (Data.MaintenanceCodeList.Contains(NetworkDefine.MAINTENANCE_TYPE.AUTO_DECK_CREATE))
{
DialogBase dialogBase = UIManager.GetInstance().CreateConfirmationDialog(Data.SystemText.Get("Card_0266"));
dialogBase.SetPanelDepth(2000);
dialogBase.SetSize(DialogBase.Size.M);
return;
}
bool forceClear = false;
if (EditDeckFormat == Format.Crossover)
{
forceClear = !CanAutoCreateCrossoverDeck();
}
if (EditDeckFormat == Format.MyRotation)
{
forceClear = NeedMyRotationAutoCreateDeckClear();
}
bool flag = base.SelectionAreaList.IdList.Count <= _formatBehavior.DeckCardNumMax;
SystemText systemText = Data.SystemText;
DialogBase dialogBase2 = UIManager.GetInstance().CreateDialogClose();
dialogBase2.SetTitleLabel(systemText.Get("Dia_DeckEdit_010_Title"));
string text = systemText.Get("Card_0294");
if (EditDeckFormat == Format.MyRotation)
{
text = systemText.Get("MyRotation_ID_07");
}
dialogBase2.SetText((flag && forceClear) ? text : systemText.Get("Card_0092"));
dialogBase2.SetButtonLayout(DialogBase.ButtonLayout.BlueBtn_CancelBtn);
dialogBase2.SetButtonText(systemText.Get("Dia_DeckEdit_010_Button"));
dialogBase2.onPushButton1 = delegate
{
HideDetail();
_stateEdit.RemoveSelectionArea();
CreateAutoDeck(forceClear);
};
}
private void OnCreateAutoDeck()
{
SystemText systemText = Data.SystemText;
_stateEdit.RefreshSelectionArea(isImmediate: true);
DialogBase dialogBase = UIManager.GetInstance().CreateDialogClose();
dialogBase.SetTitleLabel(systemText.Get("Dia_DeckEdit_011_Title"));
dialogBase.SetText(systemText.Get("Card_0082"));
dialogBase.SetButtonLayout(DialogBase.ButtonLayout.OkBtn);
base.IsLoading = false;
IsCreateAuto = false;
}
private void OnClickSaveBtn(GameObject obj)
{
SaveDeck();
GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_COMMON_BUTTON);
}
private DeckData CreateDeckData()
{
DeckData deckData = new DeckData(EditDeckFormat);
deckData.SetDeckClassID((int)ClassSet.MainClass);
deckData.SetDeckSubClassID((int)ClassSet.SubClass);
if (base.SelectionAreaList.IdList.Count > 0)
{
deckData.SetCardIdList(base.SelectionAreaList.IdList);
}
else
{
deckData.SetEmptyCardIdList();
}
deckData.SetDeckName(_deckCardBundle.DeckName);
if (_myRotationInfo != null)
{
deckData.MyRotationId = _myRotationInfo.Id;
}
return deckData;
}
private void ShowDeckViewer()
{
HideDetail();
_deckViewer.gameObject.SetActive(value: true);
_deckViewer.SetDeck(CreateDeckData(), _conventionDeckList);
if (QRCodeUtility.IsShowQRCode(_deckViewer, _formatBehavior, base.Format))
{
_deckViewer.SetQRSmallTexture();
}
else if (_formatBehavior.CanShowQRCode)
{
_deckViewer.SetQRCodeButtonToGray();
}
GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_COMMON_BUTTON);
}
private void HideDeckViewer()
{
_deckViewer.RemoveData();
_deckViewer.gameObject.SetActive(value: false);
}
private void OnClickCraftShortageCardButton(GameObject obj)
{
GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_COMMON_BUTTON);
if (!CanUseNonPossessionCard || base.IsLoading)
{
return;
}
_shortageIdList = new List<int>();
CardMaster instance = CardMaster.GetInstance(base.FormatBehavior.CardMasterId);
foreach (CardObject card in base.SelectionAreaList.CardList)
{
if (card.IsNonPossessionCard)
{
CardParameter cardParameterFromId = instance.GetCardParameterFromId(card.CardId);
if (cardParameterFromId.IsAvailableFormat(classType: ClassUtil.GetClassType(cardParameterFromId, base.Format, ClassSet), inFormat: base.Format, myRotationInfo: _myRotationInfo))
{
_shortageIdList.AddRange(Enumerable.Repeat(card.CardId, card.MainCardNum));
}
}
}
if (_shortageIdList.Count != 0)
{
HideDetail();
ShowShortageCardViewer(null);
}
}
private void UpdateCraftShortageButton()
{
CardMaster cardMaster = CardMaster.GetInstance(base.FormatBehavior.CardMasterId);
UIManager.SetObjectToGrey(_craftShortageCardButton.gameObject, !base.SelectionAreaList.CardList.Any(delegate(CardObject c)
{
if (c.IsNonPossessionCard)
{
CardParameter cardParameterFromId = cardMaster.GetCardParameterFromId(c.CardId);
return cardParameterFromId.IsAvailableFormat(classType: ClassUtil.GetClassType(cardParameterFromId, base.Format, ClassSet), inFormat: base.Format, myRotationInfo: _myRotationInfo);
}
return false;
}));
}
private void ShowShortageCardViewer(Action callback)
{
UIManager.GetInstance().MyPageUICameraObj.SetActive(value: true);
DialogBase dialogBase = UIManager.GetInstance().CreateDialogClose();
dialogBase.gameObject.layer = LayerMask.NameToLayer("MyPage");
dialogBase.SetBackViewLayer(LayerMask.NameToLayer("MyPage"));
dialogBase.SetSize(DialogBase.Size.XL);
dialogBase.SetTitleLabel(Data.SystemText.Get("Dia_DeckEdit_014_Title"));
dialogBase.SetPanelDepth(100);
dialogBase.OpenSe = Se.TYPE.NONE;
DeckBuildShortageCardView _shortageCardView = UnityEngine.Object.Instantiate(_prefabShortageCardView);
dialogBase.SetObj(_shortageCardView.gameObject);
dialogBase.OnCloseStart = CloseShortageCardViewer;
UIManager.GetInstance().AttachAtlas(_shortageCardView.gameObject);
_cardDetail.IsShortageUI = true;
_cardDetail.IsOwnCardNum = true;
_cardDetail.IsShowCraftButtons = true;
_cardDetail.OnCardBuy = delegate
{
int cardId = _cardDetail.CardData.CardId;
if (_shortageIdList.Contains(cardId))
{
RecreateDeckAddCard(new List<int> { cardId });
_shortageCardView.RemoveCardNum(cardId, 1);
_shortageIdList.Remove(cardId);
}
AccordCardInfo();
_deckCardBundle.InvalidateFilteredIdListCache();
FetchPagingCard();
_shortageCardView.UpdateExplainText();
};
_cardDetail.OnCardSellId = delegate(int id)
{
RecreateDeckRemoveCard(id);
_shortageCardView.AddCardNum(id, 1);
_shortageIdList.Add(id);
AccordCardInfo();
_deckCardBundle.InvalidateFilteredIdListCache();
FetchPagingCard();
_shortageCardView.UpdateExplainText();
};
_shortageCardView.Init(_shortageIdList, _cardDetail, dialogBase, callback, OnCraftShortageCard, base.FormatBehavior.CardMasterId, DeactivateMyPageCamera);
}
private void OnCraftShortageCard()
{
DialogBase dialogBase = UIManager.GetInstance().CreateDialogClose();
SystemText systemText = Data.SystemText;
dialogBase.SetTitleLabel(systemText.Get("Dia_DeckEdit_015_Title"));
dialogBase.SetText(systemText.Get("Dia_DeckEdit_015_Body"));
dialogBase.SetButtonLayout(DialogBase.ButtonLayout.OkBtn);
List<int> addIdList = _shortageIdList.FindAll(delegate(int id)
{
if (GameMgr.GetIns().GetDataMgr().IsMaintenanceCard(id))
{
return false;
}
return !CardMaster.GetInstance(base.FormatBehavior.CardMasterId).GetCardParameterFromId(id).IsNotCraftDestruct;
});
RecreateDeckAddCard(addIdList);
_deckCardBundle.InvalidateFilteredIdListCache();
FetchPagingCard();
_redetherNum.text = PlayerStaticData.UserRedEtherCount.ToString();
}
private void CloseShortageCardViewer()
{
_cardDetail.IsShortageUI = false;
_cardDetail.IsOwnCardNum = false;
_cardDetail.IsShowCraftButtons = false;
_cardDetail.OnCardBuy = null;
_cardDetail.OnCardSellId = null;
}
protected override void OnLiquefy(int cardId)
{
ReplaceLiquefiedCardInSelectionArea(cardId);
base.OnLiquefy(cardId);
}
private void ReplaceLiquefiedCardInSelectionArea(int cardId)
{
List<int> idList = base.SelectionAreaList.IdList;
if (!idList.Contains(cardId) || idList.Count((int id) => id == cardId) <= base.FormatBehavior.GetPossessionCardNum(cardId, _isEnableSpotCard))
{
return;
}
CardMaster instance = CardMaster.GetInstance(base.FormatBehavior.CardMasterId);
CardParameter cardParameterFromId = instance.GetCardParameterFromId(cardId);
int normalCardId = cardParameterFromId.NormalCardId;
int baseCardId = cardParameterFromId.BaseCardId;
IEnumerable<CardParameter> enumerable = from c in instance.GetAllParameters()
where c.BaseCardId == baseCardId && !c.IsFoil && c.CardId != normalCardId && c.CardId != baseCardId
select c;
IOrderedEnumerable<CardParameter> orderedEnumerable = from c in enumerable
where c.IsPrizeCard
orderby c.CardId descending
select c;
IOrderedEnumerable<CardParameter> source = from c in enumerable.Except(orderedEnumerable)
orderby cardId descending
select c;
CardParameter cardParameterFromId2 = instance.GetCardParameterFromId(baseCardId);
List<int> list = new List<int>();
if (Data.Load.data._userConfig.IsFoilPreferred)
{
list.Add(cardParameterFromId.FoilCardId);
list.AddRange(source.Select((CardParameter c) => c.FoilCardId));
list.Add(cardParameterFromId2.FoilCardId);
list.AddRange(orderedEnumerable.Select((CardParameter c) => c.FoilCardId));
list.Add(cardParameterFromId.NormalCardId);
list.AddRange(source.Select((CardParameter c) => c.NormalCardId));
list.Add(cardParameterFromId2.NormalCardId);
list.AddRange(orderedEnumerable.Select((CardParameter c) => c.NormalCardId));
}
else
{
list.Add(cardParameterFromId.NormalCardId);
list.Add(cardParameterFromId.FoilCardId);
list.AddRange(source.Select((CardParameter c) => c.NormalCardId));
list.AddRange(source.Select((CardParameter c) => c.FoilCardId));
list.Add(cardParameterFromId2.NormalCardId);
list.Add(cardParameterFromId2.FoilCardId);
list.AddRange(orderedEnumerable.Select((CardParameter c) => c.NormalCardId));
list.AddRange(orderedEnumerable.Select((CardParameter c) => c.FoilCardId));
}
int num = -1;
foreach (int replaceCardIdChoice in list)
{
CardParameter cardParameterFromId3 = instance.GetCardParameterFromId(replaceCardIdChoice);
if (cardParameterFromId3.IsAvailableFormat(classType: ClassUtil.GetClassType(cardParameterFromId3, base.Format, ClassSet), inFormat: base.Format, myRotationInfo: _myRotationInfo) && idList.Count((int id) => id == replaceCardIdChoice) < base.FormatBehavior.GetPossessionCardNum(replaceCardIdChoice, _isEnableSpotCard))
{
num = replaceCardIdChoice;
break;
}
}
if (CanUseNonPossessionCard && num == -1)
{
num = GetNewestCraftableCardId(cardParameterFromId.BaseCardId, _formatBehavior);
}
idList.Remove(cardId);
if (num != -1)
{
idList.Add(num);
}
_deckCardBundle.ReloadDeckCard(idList);
}
private void DeactivateMyPageCamera()
{
UIManager.GetInstance().MyPageUICameraObj.SetActive(value: false);
}
public override bool IsGetOutOfScene(Action backupExec)
{
if (_deckViewer.isActiveAndEnabled)
{
HideDeckViewer();
GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_BTN_CANCEL);
return false;
}
if (_hasChanged && DeckCardNum > 0)
{
AskForSave(backupExec);
return false;
}
if (IsBattleRetry && !_hasChanged && GetDeck(base.Format, _deckCardBundle.DeckId).IsUsable())
{
AskForBattleRetry(backupExec);
return false;
}
return base.IsGetOutOfScene(backupExec);
}
private void AskForBattleRetry(Action onCloseDialog)
{
SystemText systemText = Data.SystemText;
DialogBase dialogBase = UIManager.GetInstance().CreateDialogClose();
dialogBase.SetTitleLabel(systemText.Get("Card_0246"));
dialogBase.SetText(GetRetryDialogText());
dialogBase.SetButtonLayout(DialogBase.ButtonLayout.BlueBtn_CancelBtn);
dialogBase.SetButtonText(systemText.Get("Card_0247"), systemText.Get("Card_0248"));
dialogBase.onPushButton1 = ChangeSceneToBattle;
dialogBase.onPushButton2 = onCloseDialog;
dialogBase.onCloseWithoutSelect = onCloseDialog;
}
public void AskForSave(Action onCloseDialog)
{
SystemText systemText = Data.SystemText;
DialogBase dialogBase = UIManager.GetInstance().CreateDialogClose();
dialogBase.SetTitleLabel(systemText.Get("Dia_DeckEdit_012_Title"));
dialogBase.SetText(systemText.Get("Card_0087"));
dialogBase.SetButtonLayout(DialogBase.ButtonLayout.BlueBtn_CancelBtn);
dialogBase.SetButtonText(systemText.Get("Dia_DeckEdit_012_Button"), systemText.Get("Dia_DeckEdit_012_Button_2"));
dialogBase.onPushButton1 = SaveDeck;
dialogBase.onPushButton2 = onCloseDialog;
}
private List<int> AccordDeck(List<int> copyDeckCardList)
{
List<int> list = new CopyDeckFormation(copyDeckCardList, _formatBehavior).EditNormal();
if (CanUseNonPossessionCard || list.Count < copyDeckCardList.Count)
{
AddShortageCardList(copyDeckCardList);
}
return list;
}
private List<int> AccordDeckPrize(List<int> deckCardList)
{
List<int> list = new CopyDeckFormation(deckCardList, _formatBehavior).EditPrize();
if (CanUseNonPossessionCard || list.Count < deckCardList.Count)
{
AddShortageCardList(deckCardList);
}
return list;
}
private List<int> AccordDeckPremiumAndPrize(List<int> deckCardList)
{
List<int> list = new CopyDeckFormation(deckCardList, _formatBehavior).EditPremiumAndPrize();
if (CanUseNonPossessionCard || list.Count < deckCardList.Count)
{
AddShortageCardList(deckCardList);
}
return list;
}
private List<int> AccordDeckPremium(List<int> deckCardList)
{
List<int> list = new CopyDeckFormation(deckCardList, _formatBehavior).EditPremium();
if (CanUseNonPossessionCard || list.Count < deckCardList.Count)
{
AddShortageCardList(deckCardList);
}
return list;
}
public static List<int> GetShortageCardList(List<int> deckCardList, Format format, IFormatBehavior formatBehavior, MyRotationInfo myRotationInfo)
{
List<int> list = new List<int>();
List<int> source = deckCardList.ConvertAll((int id) => CardMaster.GetInstance(formatBehavior.CardMasterId).GetCardParameterFromId(id).BaseCardId);
List<int> needBaseIdList = source.Distinct().ToList();
Dictionary<int, int> possessionBaseCardDictionary = GameMgr.GetIns().GetDataMgr().GetPossessionBaseCardDictionary(isIncludingSpotCard: true, formatBehavior.CardMasterId);
int i;
for (i = 0; i < needBaseIdList.Count; i++)
{
CardParameter cardParameterFromId = CardMaster.GetInstance(formatBehavior.CardMasterId).GetCardParameterFromId(needBaseIdList[i]);
ClassType classType = ClassUtil.GetClassType(cardParameterFromId, format, ClassSet);
if (!cardParameterFromId.IsAvailableFormat(format, classType, myRotationInfo))
{
continue;
}
int sameKindNumMaxInFormat = cardParameterFromId.GetSameKindNumMaxInFormat(format, formatBehavior, classType, myRotationInfo);
int num = source.Count((int id) => id == needBaseIdList[i]);
int value = 0;
possessionBaseCardDictionary.TryGetValue(needBaseIdList[i], out value);
int num2 = num - value;
if (num > sameKindNumMaxInFormat)
{
num2 -= num - sameKindNumMaxInFormat;
}
num2 = Mathf.Max(0, num2);
if (num2 > 0)
{
int newestCraftableCardId = GetNewestCraftableCardId(cardParameterFromId.BaseCardId, formatBehavior);
for (int num3 = 0; num3 < num2; num3++)
{
list.Add(newestCraftableCardId);
}
}
}
return list;
}
public static int GetNewestCraftableCardId(int baseCardId, IFormatBehavior formatBehavior)
{
CardMaster instance = CardMaster.GetInstance(formatBehavior.CardMasterId);
List<int> sameCardListByBaseCardId = instance.GetSameCardListByBaseCardId(baseCardId);
int num = baseCardId;
foreach (int item in sameCardListByBaseCardId)
{
CardParameter cardParameterFromId = instance.GetCardParameterFromId(item);
if (cardParameterFromId.CanCraft && cardParameterFromId.CardId > num)
{
num = cardParameterFromId.CardId;
}
}
return num;
}
private void AddShortageCardList(List<int> deckCardList)
{
_shortageIdList.AddRange(GetShortageCardList(deckCardList, EditDeckFormat, base.FormatBehavior, _myRotationInfo));
}
public static bool IsSelectableNonPossessionCard(CardParameter cardParameter)
{
if (!cardParameter.IsFoil && !cardParameter.IsPrizeCard)
{
return cardParameter.CanCraft;
}
return false;
}
public static void SendConfigUpdateFoilPreferred(bool isFoilPreferred)
{
ConfigUpdateFoilPreferredTask configUpdateFoilPreferredTask = new ConfigUpdateFoilPreferredTask();
configUpdateFoilPreferredTask.SetParameter(isFoilPreferred);
UIManager.GetInstance().StartCoroutine(Toolbox.NetworkManager.Connect(configUpdateFoilPreferredTask, delegate
{
Data.Load.data._userConfig.IsFoilPreferred = isFoilPreferred;
}));
}
public static void SendConfigUpdatePrizePreferred(bool isPrizePreferred)
{
ConfigUpdatePrizePreferredTask configUpdatePrizePreferredTask = new ConfigUpdatePrizePreferredTask();
configUpdatePrizePreferredTask.SetParameter(isPrizePreferred);
UIManager.GetInstance().StartCoroutine(Toolbox.NetworkManager.Connect(configUpdatePrizePreferredTask, delegate
{
Data.Load.data._userConfig.IsPrizePreferred = isPrizePreferred;
}));
}
protected override int GetSameKindNumMaxInFormat(int cardId)
{
CardParameter cardParameterFromId = CardMaster.GetInstance(base.FormatBehavior.CardMasterId).GetCardParameterFromId(cardId);
return cardParameterFromId.GetSameKindNumMaxInFormat(classType: ClassUtil.GetClassType(cardParameterFromId, base.Format, ClassSet), inFormat: base.Format, behavior: base.FormatBehavior, myRotationInfo: _myRotationInfo);
}
private void OnClickSwapClassButton(GameObject obj)
{
GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_COMMON_BUTTON);
DialogBase dialogBase = UIManager.GetInstance().CreateDialogClose();
dialogBase.SetTitleLabel(Data.SystemText.Get("Card_0274"));
dialogBase.SetText(Data.SystemText.Get("Card_0275"));
dialogBase.SetButtonLayout(DialogBase.ButtonLayout.BlueBtn_CancelBtn);
dialogBase.SetButtonText(Data.SystemText.Get("Card_0276"));
dialogBase.onPushButton1 = delegate
{
StartCoroutine(SwapClass());
};
}
private void OnClickMyRotationChangeButton(GameObject g)
{
GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_COMMON_BUTTON);
MyRotationPeriodSelectDialog.Create(_myRotationInfo, ClassSet.MainClass, delegate(MyRotationInfo selectData)
{
if (_myRotationInfo.Id != selectData.Id)
{
UpdateMyRotationInfo(selectData, isChangeAllCardView: false);
}
});
}
private void UpdateMyRotationInfo(MyRotationInfo info, bool isChangeAllCardView)
{
bool num = _myRotationInfo.Id != info.Id || isChangeAllCardView;
_selectCardFilter.SetMyRotationData(info, FilterController.MyRotationFilterType.DECK, base.MyRotationFilterTypeCardPool == FilterController.MyRotationFilterType.CARD_POOL_ALL_PACK);
_pagingFilter.SetMyRotationData(info, base.MyRotationFilterTypeCardPool, isAllBackVisible: false);
_myRotationInfo = info;
SetMyRotationData(info);
_myRotationPackShortName.text = _myRotationInfo.LastPackText;
UpdateCardDisplay();
if (num)
{
_selectCardFilter.Reset(isEnableValidateCall: false);
_pagingFilter.Reset(isEnableValidateCall: false);
}
OnValidateSelectionAreaFilter();
OnValidatePagingFilter();
if (_isDefaultDeckName)
{
_deckCardBundle.DeckName = DeckUtil.CreateDefaultDeckName(ClassSet, useSubClass: false, _otherDeckNames, EditDeckFormat, _myRotationInfo);
}
CardMaster.CardMasterId cardMasterId = base.FormatBehavior.CardMasterId;
List<int> cardPool = UIManager.GetInstance().getUIBase_CardManager().SortIDList(CardMaster.GetInstance(cardMasterId).GetAllCardIds(), cardMasterId);
_selectCardFilter.UpdateTypeFilterForDeckEdit(cardPool, ClassSet, EditDeckFormat, _myRotationInfo, base.MyRotationFilterTypeCardPool);
_pagingFilter.UpdateTypeFilterForDeckEdit(cardPool, ClassSet, EditDeckFormat, _myRotationInfo, base.MyRotationFilterTypeCardPool);
m_labelClassName.text = DeckData.CreateMyRotationClassName((int)ClassSet.MainClass, _myRotationInfo);
_deckCardBundle.OnCreatePagingCard += UpdateCardDisplay;
SetupDeckViewerAndText();
UpdateMyRotationAbilityIcon();
}
private void UpdateMyRotationAbilityIcon()
{
_myRotationAbilityGrid.transform.DestroyChildren();
foreach (MyRotationInfo.MyRotationBonus ability in _myRotationInfo.Abilities)
{
GameObject obj = NGUITools.AddChild(_myRotationAbilityGrid.gameObject, _myRotationIconOriginal);
obj.GetComponent<UISprite>().spriteName = ability.IconName;
obj.gameObject.SetActive(value: true);
}
_myRotationAbilityGrid.Reposition();
}
private void UpdateCardDisplay()
{
_deckCardBundle.UpdateCardDisplay();
_deckCardBundle.OnCreatePagingCard -= UpdateCardDisplay;
UpdateCraftShortageButton();
}
private IEnumerator SwapClass()
{
bool isDefaultDeckName = DeckUtil.IsDefaultDeckName(ClassSet, base.FormatBehavior.UseSubClass, _deckCardBundle.DeckName, EditDeckFormat, _myRotationInfo);
ClassSet.Swap();
_needsClearSkin = !_needsClearSkin;
InitUseSubClassDisplay();
OnValidateSelectionAreaFilter();
OnValidatePagingFilter();
while (base.IsLoading)
{
yield return null;
}
_deckCardBundle.UpdateCardDisplay();
if (isDefaultDeckName)
{
string text = DeckUtil.CreateDefaultDeckName(ClassSet, base.FormatBehavior.UseSubClass, _otherDeckNames, EditDeckFormat, _myRotationInfo);
if (CurrentDeckName != null)
{
CurrentDeckName = text;
}
_deckCardBundle.DeckName = text;
SetupDeckViewerAndText();
}
}
private void InitUseSubClassDisplay()
{
if (!_formatBehavior.UseSubClass)
{
_useSubClassRoot.SetActive(value: false);
return;
}
m_labelClassName.transform.gameObject.SetActive(value: false);
_formatIcon.transform.gameObject.SetActive(value: false);
m_labelDeckCardNum.transform.parent.gameObject.SetActive(value: false);
_useSubClassRoot.SetActive(value: true);
_useSubClassMainClassIconSprite.spriteName = ClassCharaPrm.GetIconSpriteName(ClassSet.MainClass);
_useSubClassSubClassIconSprite.spriteName = ClassCharaPrm.GetIconSpriteName(ClassSet.SubClass);
_useSubClassDeckCardNumMaxLabel.text = _labelDeckCardMaxNum.text;
_useSubClassMainClassCardNumMinLabel.text = "/" + 24;
_useSubClassSubClassCardNumMinLabel.text = "/" + 9;
_useSubClassFormatIconSprite.spriteName = _formatBehavior.SmallIconSpriteName;
}
private bool NeedMyRotationAutoCreateDeckClear()
{
CardMaster instance = CardMaster.GetInstance(_formatBehavior.CardMasterId);
foreach (int id in base.SelectionAreaList.IdList)
{
if (!instance.GetCardParameterFromId(id).IsAvailableFormat(Format.MyRotation, ClassType.None, _myRotationInfo))
{
return true;
}
}
return false;
}
private bool CanAutoCreateCrossoverDeck()
{
List<int> source = _deckCardBundle.FindAllAvailableCardInFormat(base.SelectionAreaList.IdList, base.Format, null);
CardMaster cardMaster = CardMaster.GetInstance(_formatBehavior.CardMasterId);
int num = source.Count((int cardId) => cardMaster.GetCardParameterFromId(cardId).Clan == ClassSet.MainClass);
int num2 = source.Count((int cardId) => cardMaster.GetCardParameterFromId(cardId).Clan == ClassSet.SubClass);
int num3 = source.Count((int cardId) => cardMaster.GetCardParameterFromId(cardId).Clan == CardBasePrm.ClanType.ALL);
if (num + num3 <= Crossover.AUTO_CREATE_MAIN_AND_NEUTRAL_MAX && num2 + num3 <= Crossover.AUTO_CREATE_SUB_AND_NEUTRAL_MAX && num3 <= 7)
{
return true;
}
return false;
}
private bool ChangeMyRotationAllPackVisibleValidator(bool newCheck)
{
if (!base.IsLoading && base.CurrentState == _stateEdit)
{
return true;
}
return false;
}
private void OnChangeMyRotationAllPackVisible()
{
_myRotationAllPackVisible = !_myRotationAllPackVisible;
base.MyRotationFilterTypeCardPool = (_myRotationAllPackVisible ? FilterController.MyRotationFilterType.CARD_POOL_ALL_PACK : FilterController.MyRotationFilterType.CARD_POOL_SELECT_ONLY);
UpdateMyRotationInfo(_myRotationInfo, isChangeAllCardView: true);
}
}