Files
SVSimServer/SVSim.BattleEngine/Engine/BattlePlayerBase.cs
2026-06-05 16:45:12 -04:00

4575 lines
178 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using Cute;
using UnityEngine;
using Wizard;
using Wizard.Battle;
using Wizard.Battle.Player.Emotion;
using Wizard.Battle.Resource;
using Wizard.Battle.UI;
using Wizard.Battle.View;
using Wizard.Battle.View.Vfx;
public abstract class BattlePlayerBase : IBattlePlayerReadOnlyInfo
{
public class TurnAndCard
{
public int Turn { get; private set; }
public bool IsSelfTurn { get; private set; }
public IReadOnlyBattleCardInfo Card { get; private set; }
public bool IsTurnEnd { get; private set; }
public TurnAndCard(int turn, bool isSelfTurn, IReadOnlyBattleCardInfo card, bool isTurnEnd)
{
Turn = turn;
Card = card;
IsSelfTurn = isSelfTurn;
IsTurnEnd = isTurnEnd;
}
}
public class CardAndId
{
public IReadOnlyBattleCardInfo Card { get; private set; }
public int Id { get; private set; }
public CardAndId(IReadOnlyBattleCardInfo card, int id)
{
Card = card;
Id = id;
}
}
public class CardAndTribe
{
public IReadOnlyBattleCardInfo Card { get; private set; }
public List<CardBasePrm.TribeType> Tribes { get; private set; }
public CardAndTribe(IReadOnlyBattleCardInfo card, List<CardBasePrm.TribeType> tribes)
{
Card = card;
Tribes = tribes;
}
}
public class CardAndValue
{
public IReadOnlyBattleCardInfo Card { get; private set; }
public int Value { get; private set; }
public CardAndValue(IReadOnlyBattleCardInfo card, int value)
{
Card = card;
Value = value;
}
}
public enum CARD_MANAGEMENT
{
NONE,
DESTROY,
BANISH,
RETURN,
FUSION_MATERIAL,
GETON,
GETOFF,
SUMMON
}
public class SideLogInfo
{
public SkillBase Skill;
public SideLogInfo(SkillBase skill)
{
Skill = skill;
}
}
public class MyRotationBonusCondition
{
public MyRotationInfo.MyRotationBonus MyRotationBonus { get; }
public int RemainingIncreaseAddPptotalTurn { get; private set; }
public bool IsRemainIncreaseAddPptotalTurn { get; private set; }
public int RemainingSkillCount { get; private set; }
public bool IsRemainSkill { get; private set; }
public MyRotationBonusCondition(MyRotationInfo.MyRotationBonus myRotationBonus)
{
MyRotationBonus = myRotationBonus;
RemainingIncreaseAddPptotalTurn = myRotationBonus.IncreaseAddPptotalTurn;
IsRemainIncreaseAddPptotalTurn = RemainingIncreaseAddPptotalTurn > 0;
RemainingSkillCount = myRotationBonus.AttachAbilities.Length;
IsRemainSkill = RemainingSkillCount > 0;
}
public void SetConditionInReplay(NetworkBattleReceiver.MyRotationBonusInfo bonusInfo)
{
RemainingIncreaseAddPptotalTurn = bonusInfo.RemainingIncreaseAddPptotalTurn;
IsRemainIncreaseAddPptotalTurn = bonusInfo.IsRemainIncreaseAddPptotalTurn;
RemainingSkillCount = bonusInfo.RemainingSkillCount;
IsRemainSkill = bonusInfo.IsRemainSkill;
}
public bool GetAndReduceAddPpTurn()
{
bool num = RemainingIncreaseAddPptotalTurn > 0;
if (num)
{
RemainingIncreaseAddPptotalTurn--;
}
return num;
}
public void ReduceSkillCount()
{
RemainingSkillCount--;
}
public void UseUpAddPpTotalBonus()
{
IsRemainIncreaseAddPptotalTurn = RemainingIncreaseAddPptotalTurn > 0;
}
public void UseUpSkill()
{
IsRemainSkill = RemainingSkillCount > 0;
}
}
public class AvatarBattleDescInfo
{
public string DescText;
public string Cost;
public List<int> ReplaySkillDescriptionValueList;
public AvatarBattleDescInfo(string descText, string cost)
{
DescText = descText;
Cost = cost;
ReplaySkillDescriptionValueList = new List<int>();
}
}
public enum CEMETERY_TYPE
{
NORMAL,
FIELD_RETURN_HAND_OVER,
DECK_DRAW_HAND_OVER
}
public class SummonInfo
{
public bool IsPlayer { get; private set; }
public SkillBaseSummon.SummonedCardsList SummonedCardsList { get; private set; }
public SkillBaseSummon.SUMMON_TYPE SummonType { get; private set; }
public bool IsReanimate { get; private set; }
public bool IsDeckSelfSummon { get; private set; }
public SummonInfo(bool isPlayer, SkillBaseSummon.SummonedCardsList summonedCardsList, SkillBaseSummon.SUMMON_TYPE summonType, bool isReanimate = false, bool isDeckSelfSummon = false)
{
IsPlayer = isPlayer;
SummonedCardsList = summonedCardsList;
SummonType = summonType;
IsReanimate = isReanimate;
IsDeckSelfSummon = isDeckSelfSummon;
}
}
public const int MAX_PP = 10;
public List<BattleCardBase> SelfDiscardList = new List<BattleCardBase>();
protected BattlePlayerBase _opponentBattlePlayer;
private List<IBattlePlayerSkill> _skillList = new List<IBattlePlayerSkill>();
protected IBattlePlayerVfxCreator m_vfxCreator;
protected readonly IInnerOptionsBuilder _innerOptionsBuilder;
private int _ppTotal;
protected int m_EpTotal;
private const int MAX_BP = 99;
public bool CantPlayChoiceBrave;
public HashSet<BattleCardBase> PredictionWarningCards = new HashSet<BattleCardBase>();
public Func<SkillProcessor, VfxBase> OnTurnStartSkillAfter;
public Func<SkillProcessor, VfxBase> OnTurnEndSkillAfter;
public Action OnTurnStartComplete;
public Action OnPreTurnEndComplete;
public Action OnPostTurnEndComplete;
public Action OnEndOneSkillProcess;
public List<MyRotationBonusCondition> BonusConditionList;
public List<BossRushSpecialSkill> BossRushSpecialSkillList;
public AvatarBattleDescInfo AvatarBattlePassiveSkillDescInfo;
public List<AvatarBattleDescInfo> ChoiceBraveSkillDescInfoList;
public const int MAX_NUM_HAND_CARDS = 9;
public const int MAX_NUM_IN_PLAY_CARDS_WITH_CLASS = 6;
public const int MAX_NUM_IN_PLAY_CARDS = 5;
protected int _gameUsedEpCount;
protected int _turnUsedEpCount;
private const string TOKEN_EFFECT_PATH = "cmn_token_draw_1";
public BattleManagerBase BattleMgr { get; protected set; }
public virtual bool IsGameFirst => false;
public BattleCamera BattleCamera { get; private set; }
public BackGroundBase BackGround { get; private set; }
protected DataMgr _dataMgr { get; set; }
public virtual bool IsPlayer => true;
public virtual int Turn
{
get
{
if (!BattleMgr.IsFirst)
{
return BattleMgr.SecondTurn;
}
return BattleMgr.FirstTurn;
}
set
{
if (BattleMgr.IsFirst)
{
BattleMgr.FirstTurn = value;
}
else
{
BattleMgr.SecondTurn = value;
}
}
}
public int Pp { get; set; }
public int PpTotal
{
get
{
return _ppTotal;
}
set
{
_ppTotal = value;
}
}
public int EpTotal
{
get
{
return m_EpTotal;
}
set
{
m_EpTotal = value;
}
}
public int CurrentEpCount { get; private set; }
public int EvolveWaitTurnCount { get; set; }
public bool NowTurnEvol { get; set; }
public bool IsEpEvolveThisTurn { get; set; }
public bool IsEvolve
{
get
{
if (NowTurnEvol && CurrentEpCount > 0)
{
return EvolveWaitTurnCount <= 0;
}
return false;
}
}
public bool IsExceptionEvolve
{
get
{
if (NowTurnEvol && EvolveWaitTurnCount <= 0)
{
return InPlayCards.Any((BattleCardBase c) => !c.IsEvolution && CheckNotConsumeEpCard(c));
}
return false;
}
}
public int GameUsedEpCount => _gameUsedEpCount;
public int TurnUsedEpCount => _turnUsedEpCount;
public int Bp { get; private set; }
public bool IsAlreadyChoiceBraveInThisTurn { get; set; } = true;
public bool IsChoiceBraveEffectTiming { get; set; }
public List<BattleCardBase> ChoiceBraveCards
{
get
{
List<BattleCardBase> list = new List<BattleCardBase>();
SkillBase skillBase = Class.Skills.FirstOrDefault((SkillBase s) => s.OnWhenChoiceBrave != 0);
if (skillBase == null)
{
return list;
}
List<int> list2 = SkillOptionValue.ParseOptionTokenID(skillBase.OptionValue.GetOption(SkillFilterCreator.ContentKeyword.card_id, "_OPT_NULL_")).ToList();
for (int num = 0; num < list2.Count(); num++)
{
BattleCardBase item = BattleManagerBase.GetIns().CreateTransformCardRegisterVfx(Class, list2[num], IsPlayer, null, isRecoveryFinish: false, isChoice: true);
list.Add(item);
}
return list;
}
}
public bool CanPlayAnyChoiceBraveCard
{
get
{
if (IsAlreadyChoiceBraveInThisTurn)
{
return false;
}
List<BattleCardBase> choiceBraveCards = ChoiceBraveCards;
for (int i = 0; i < choiceBraveCards.Count(); i++)
{
if (choiceBraveCards[i].CanPlayAsChoiceBraveCard)
{
return true;
}
}
return false;
}
}
public virtual bool CanChoiceBraveThisTurn
{
get
{
if (!IsAlreadyChoiceBraveInThisTurn)
{
return IsChoiceBraveEffectTiming;
}
return false;
}
}
public virtual bool CanChoiceBrave
{
get
{
if (CanChoiceBraveThisTurn && CanPlayAnyChoiceBraveCard && BattleView.IsTouchable())
{
return !BattleView.IsSelecting;
}
return false;
}
}
public BattleCardBase LowestCostChoiceBraveCard => ChoiceBraveCards.OrderBy((BattleCardBase c) => c.Cost).FirstOrDefault();
public bool IsShortageDeckLose { get; protected set; }
public bool IsShortageDeckWin => Class.SkillApplyInformation.IsShortageDeckWin;
public bool IsChangeShortageDeck
{
get
{
if (!Class.SkillApplyInformation.IsShortageDeckWin)
{
return Class.Skills.Any((SkillBase s) => s.OnWhenShortageDeck != 0);
}
return false;
}
}
public List<BattleCardBase> HandCardList { get; private set; }
public List<BattleCardBase> DeckCardList { get; private set; }
public List<BattleCardBase> BattleStartDeckCardList { get; set; }
public List<BattleCardBase> DeckSkillCardList { get; private set; }
public List<BattleCardBase> ClassAndInPlayCardList { get; private set; }
public List<BattleCardBase> CemeteryList { get; private set; }
public List<BattleCardBase> BanishList { get; set; }
public List<BattleCardBase> FusionIngredientList { get; set; }
public List<BattleCardBase> TurnFusionCards { get; set; }
public List<BattleCardBase> NecromanceZoneList { get; set; }
public List<BattleCardBase> DiscardedCardList { get; set; }
public List<BattleCardBase> FusionIngredientAndDiscardedCardList { get; set; }
public List<BattleCardBase> ReservedCardList { get; set; }
public List<BattleCardBase> UniteList { get; set; }
public List<BattleCardBase> GetOnList { get; set; }
public List<BattleCardBase> BlackHole { get; set; }
public List<BattleCardBase> ChoiceBraveCardList { get; set; }
public List<BattleCardBase> PredictionCemeteryRandomCards { get; private set; }
public List<BattleCardBase> PredictionDamageRandomCards { get; private set; }
public List<BattleCardBase> PredictionBanishRandomCards { get; private set; }
public virtual IStatusPanelControl StatusPanelControl
{
get
{
if ((bool)BattleView.StatusParentPanel)
{
return BattleView.StatusParentPanel.GetComponent<IStatusPanelControl>();
}
return new NullStatusPanelControl();
}
}
public IClassInfomationUI _classInfomationUI { get; protected set; }
public ClassInformationUIController ClassInformationUIController { get; protected set; }
public bool IsBuffDetail
{
get
{
if (IsShowBuffDetail || IsRecordingBuffDetail)
{
return !IsRecordingExceptBuffDetail;
}
return false;
}
}
public bool IsShowBuffDetail { get; set; }
public bool IsRecordingBuffDetail { get; set; }
public bool IsRecordingExceptBuffDetail { get; set; }
public SideLogInfo SideLogSkill { get; set; }
protected BattleCardBase _class { get; set; }
public HandControl HandControl => BattleView.HandControl;
public abstract IBattlePlayerView BattleView { get; }
public abstract IEmotion Emotion { get; }
public bool IsSelfTurn { get; set; }
public List<BattleCardBase> ReturnList { get; set; }
public List<List<BattleCardBase>> LastTargetCardsList { get; set; }
public List<BattleCardBase> InHandCards { get; set; }
public List<BattleCardBase> SkillDiscards { get; set; }
public List<BattleCardBase> SkillBanishCards { get; set; }
public List<BattleCardBase> HealingCards { get; set; }
public List<BattleCardBase> SkillSummonedCards { get; set; }
public List<BattleCardBase> SummonedCards { get; set; }
public BattleCardBase DrewSkillCard { get; set; }
public BattleCardBase ReturnSkillCard { get; set; }
public List<BattleCardBase> EvolvedCards { get; set; }
public List<BattleCardBase> DestroyedWhenDestroyCards { get; set; }
public List<TurnAndIntValue> TurnPlayCardCountInfo { get; set; }
public List<TurnAndIntValue> TurnFusionCountInfo { get; set; }
public List<TurnAndIntValue> TurnEvolveCardCountInfo { get; set; }
public int TurnNecromanceCount { get; set; }
public int GameNecromanceCount { get; set; }
public int GameUsedPpCount { get; set; }
public BattleCardBase CardOnPlay { get; set; }
public List<BattleCardBase> TurnPlayCards { get; set; }
public List<BattleCardBase> TurnDrawCards { get; set; }
public List<CardAndId> TurnDrawTokenCardsWithId { get; set; }
public List<BattleCardBase> GameDrawCards { get; set; }
public List<BattleCardBase> GameDrawTokenCards { get; set; }
public List<BattleCardBase> GameAddUpdateDeckCards { get; set; }
public List<TurnAndCard> GameSummonCards { get; set; }
public List<CardAndTribe> GameSummonMomentTribe { get; set; }
public List<CardAndTribe> GamePlayMomentTribe { get; set; }
public List<BattleCardBase> GamePlayMomentSpellChargeCards { get; set; }
public List<CardAndTribe> GameUpdateDeckMomentTribe { get; set; }
public List<BattleCardBase> GamePlayCards { get; set; }
public List<TurnAndCard> GameTurnPlayCards { get; set; }
public List<TurnAndCard> GameEnhancePlayCards { get; set; }
public List<BattleCardBase> GameCrystallizedPlayCards { get; set; }
public List<BattleCardBase> GameLeftCards { get; set; }
public List<TurnAndCard> GameTurnLeftCards { get; set; }
public List<TurnAndCard> GameReturnedCards { get; set; }
public List<BattleCardBase> GameSuperSkyboundArtCards { get; set; }
public List<BattleCardBase> GameInplayMetamorphoseCards { get; set; }
public List<SkillBase> OkSkillInProcess { get; set; }
public List<TurnAndCard> TurnDestroyCards { get; set; }
public List<TurnAndIntValue> TurnWhenHealingCount { get; set; }
public List<BattleCardBase> GameBurialRiteCards { get; set; }
public List<BattleCardBase> TurnBurialRiteCards { get; set; }
public List<int> BurialRiteOrDiscardCardHandIndexList { get; set; }
public List<TurnAndCard> GameReanimatedCards { get; set; }
protected List<BattleCardBase> AddToDeckCardList { get; set; }
public List<TurnAndIntValue> TurnStartLifeList { get; protected set; }
public int RallyCount { get; protected set; }
public int DeckBanishCount { get; protected set; }
public int GameResonanceStartCount { get; set; }
public int TurnResonanceStartCount { get; set; }
public int GameUsedWhiteRitualCount { get; set; }
public int LastInplayWhiteRitualStack { get; set; }
public List<TurnAndIntValue> GameSkillReturnCardCountList { get; set; }
public List<TurnAndIntValue> GameSkillDiscardCountList { get; set; }
public List<TurnAndIntValue> GameSkillBuffCountList { get; set; }
public List<TurnAndIntValue> GameSkillMetamorphoseCountList { get; set; }
public int GameSkillDiscardCount { get; set; }
public List<BattleCardBase> GameQuickAttackCards { get; set; }
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoDeckCards => ConvertToSkillInfoCollection(DeckCardList);
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoBattleStartDeckCards => ConvertToSkillInfoCollection(BattleStartDeckCardList);
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoHandCards => ConvertToSkillInfoCollection(HandCardList);
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoClassAndInPlayCards => ConvertToSkillInfoCollection(ClassAndInPlayCardList);
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoCemeterys => ConvertToSkillInfoCollection(CemeteryList);
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoBanishCards => ConvertToSkillInfoCollection(BanishList);
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoFusionIngredientList => ConvertToSkillInfoCollection(FusionIngredientList);
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoTurnFusionCards => ConvertToSkillInfoCollection(TurnFusionCards);
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoNecromanceZoneCards => ConvertToSkillInfoCollection(NecromanceZoneList);
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoInPlayCards => ConvertToSkillInfoCollection(InPlayCards);
public IEnumerable<IEnumerable<IReadOnlyBattleCardInfo>> SkillInfoLastTargets => ConvertToSkillInfoCollectionList(LastTargetCardsList);
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoDiscards => ConvertToSkillInfoCollection(SkillDiscards);
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoDiscardedCards => ConvertToSkillInfoCollection(DiscardedCardList);
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoFusionIngredientAndDiscardedCards => ConvertToSkillInfoCollection(FusionIngredientAndDiscardedCardList);
public IEnumerable<TurnAndCard> SkillInfoReturnedCards => GameReturnedCards;
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoHealingCards => ConvertToSkillInfoCollection(HealingCards);
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoSkillSummonedCards => ConvertToSkillInfoCollection(SkillSummonedCards);
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoEvolvedCards => ConvertToSkillInfoCollection(EvolvedCards);
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoDestroyedWhenDestroyCards => ConvertToSkillInfoCollection(DestroyedWhenDestroyCards);
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoTurnPlayCards => ConvertToSkillInfoCollection(TurnPlayCards);
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoTurnDrawCards => ConvertToSkillInfoCollection(TurnDrawCards);
public IEnumerable<CardAndId> SkillInfoTurnDrawTokenCardsWithId => TurnDrawTokenCardsWithId;
public IEnumerable<TurnAndCard> SkillInfoGameSummonCards => GameSummonCards;
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoGamePlayCards => ConvertToSkillInfoCollection(GamePlayCards);
public IEnumerable<TurnAndCard> SkillInfoGameTurnPlayCards => GameTurnPlayCards;
public IEnumerable<TurnAndCard> SkillInfoGameEnhancePlayCards => GameEnhancePlayCards;
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoGameCrystallizedPlayCards => ConvertToSkillInfoCollection(GameCrystallizedPlayCards);
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoGameSkillActivated => ConvertToSkillInfoCollection(ChoiceBraveCardList);
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoInplayMetamorphosedCards => ConvertToSkillInfoCollection(GameInplayMetamorphoseCards);
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoGameBurialRiteCards => ConvertToSkillInfoCollection(GameBurialRiteCards);
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoTurnBurialRiteCards => ConvertToSkillInfoCollection(TurnBurialRiteCards);
public IEnumerable<TurnAndCard> SkillInfoGameReanimatedCards => GameReanimatedCards;
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoGameDrawCards => ConvertToSkillInfoCollection(GameDrawCards);
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoGameDrawTokenCards => ConvertToSkillInfoCollection(GameDrawTokenCards);
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoGameAddUpdateDeckCards => ConvertToSkillInfoCollection(GameAddUpdateDeckCards);
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoGameLeftCards => ConvertToSkillInfoCollection(GameLeftCards);
public IEnumerable<TurnAndCard> SkillInfoGameTurnLeftCards => GameTurnLeftCards;
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoGameSuperSkyboundArtCards => ConvertToSkillInfoCollection(GameSuperSkyboundArtCards);
public IReadOnlyBattleCardInfo SkillInfoClass => Class;
public IEnumerable<IReadOnlyBattleCardInfo> SkillInfoGameQuickAttackCards => ConvertToSkillInfoCollection(GameQuickAttackCards);
public AvatarBattleInfo AvatarBattleInfo { get; set; }
public int extraTurnCount { get; set; }
public bool IsExtraTurn => extraTurnCount > 0;
public int cardTotalNum { get; set; }
public bool IsShortageDeck { get; private set; }
public int _cumulativeEvolutionCount { get; protected set; }
public bool IsSkinEvolved
{
get
{
if (_dataMgr.IsEvolveSkin(IsPlayer))
{
return _cumulativeEvolutionCount > 0;
}
return false;
}
}
public IEnumerable<BattleCardBase> AllCards
{
get
{
for (int i = 0; i < HandCardList.Count(); i++)
{
yield return HandCardList[i];
}
for (int i = 0; i < ClassAndInPlayCardList.Count; i++)
{
yield return ClassAndInPlayCardList[i];
}
for (int i = 0; i < DeckCardList.Count(); i++)
{
yield return DeckCardList[i];
}
}
}
public List<BattleCardBase> AllCardsWithCemeteryAndBanish
{
get
{
List<BattleCardBase> list = AllCards.ToList();
list.AddRange(CemeteryList);
list.AddRange(NecromanceZoneList);
list.AddRange(BanishList);
return list;
}
}
public List<BattleCardBase> AllCardsWithSkillIngredient
{
get
{
List<BattleCardBase> list = AllCardsWithCemeteryAndBanish.ToList();
list.AddRange(FusionIngredientList);
list.AddRange(GetOnList);
list.AddRange(UniteList);
list.AddRange(ReservedCardList);
list.AddRange(BlackHole);
return list;
}
}
public IEnumerable<BattleCardBase> InPlayCards
{
get
{
for (int i = 0; i < ClassAndInPlayCardList.Count; i++)
{
if (!(ClassAndInPlayCardList[i] is ClassBattleCardBase))
{
yield return ClassAndInPlayCardList[i];
}
}
}
}
public BattleCardBase Class => _class;
public event Action OnTurnStartStart;
public event Func<VfxBase> OnTurnStartFinish;
public event Action OnTurnEndStart;
public event Func<SkillProcessor, VfxBase> OnTurnEnd;
public event Func<VfxBase> OnTurnEndFinish;
public event Func<SkillProcessor, VfxBase> OnTurnStartBeforeDraw;
public event Func<VfxBase> OnTurnStartAfterDraw;
public event Action<BattleCardBase, SkillProcessor, int, bool> OnNecromance;
public event Action<BattleCardBase> OnPickCard;
public event Action OnAfterPickCard;
public event Action OnSetupClassEvent;
public event Action<BattleCardBase> OnSetupCardEvent;
public event Func<VfxBase> OnShortageDeck;
public event Action<BattlePlayerBase, List<BattleCardBase>> OnMulliganStart;
public event Action<IEnumerable<BattleCardBase>, IEnumerable<int>> OnMulliganEnd;
public event Action OnClearDeck;
public event Action<int> OnChangePP;
public event Action<int, int, bool, BattleCardBase, bool> OnAddPpTotal;
public event Action<int, bool, BattleCardBase> OnAddPp;
public event Action<int, bool, BattleCardBase> OnAddBp;
public event Action<BattleCardBase, int, bool, bool> OnEpModifier;
public event Action<BattleCardBase, NetworkBattleDefine.NetworkCardPlaceState, bool, SkillBase> OnAddHandCardEvent;
public event Action<BattleCardBase, CEMETERY_TYPE, bool, SkillBase> OnAddCemeteryEvent;
public event Action<BattleCardBase, bool, SkillBase> OnAddPlayCardEvent;
public event Action<BattleCardBase, SkillBase, bool> OnAddBanishEvent;
public event Action<BattleCardBase, SkillBase> OnAddDeckEvent;
public event Action<BattleCardBase, SkillBase> OnAddUniteEvent;
public event Action<BattleCardBase> OnSpellPlayEvent;
public event Action<BattleCardBase> OnFusion;
public event Action<BattleCardBase, SkillBase> OnGeton;
public event Action<List<BattleCardBase>, List<BattleCardBase>, SkillBase> OnGetoff;
public event Action<List<BattleCardBase>, SkillBase> OnAddBlackHole;
public event Action<BattleCardBase> OnAfterReturnCardEvent;
public event Func<SkillProcessor, List<BattleCardBase>, VfxBase> OnAfterSummonCardEvent;
public event Action OnAddHandCardAfterEvent;
public event Func<VfxBase> OnAddCemeteryAfterEvent;
public event Action OnAddPlayCardAfterEvent;
public event Action<BattleCardBase> OnAddBanishAfterEvent;
public event Action<BattleCardBase> OnAddUniteAfterEvent;
public event Action<BattleCardBase> OnLeaveAfterEvent;
public event Action<BattleCardBase> OnSummonAfterEvent;
public event Action<BattleCardBase, BattleCardBase> OnMetamorphoseAfterEvent;
public event Action<int, SkillProcessor, List<BattleCardBase>> OnChangeDeckAfterEvent;
public event Action<int, int, List<BattleCardBase>, BattlePlayerBase, bool> OnDrawCards;
public event Action<BattleCardBase, List<BattleCardBase>, List<BattleCardBase>, bool, bool, bool> OnTokenDrawCards;
public event Action<BattleCardBase, List<BattleCardBase>, bool> OnCreateReservedCards;
public event Action<BattleCardBase, List<BattleCardBase>, bool, bool, bool> OnUpdateDeck;
public event Action<int, int, bool> OnIndexChange;
public event Action<BattleCardBase, List<BattleCardBase>, List<BattleCardBase>, bool, bool, bool, bool, bool> OnSummonTokenCards;
public event Action<BattleCardBase, List<BattleCardBase>, bool, bool, bool, bool> OnSummonCards;
public event Action<BattleCardBase, List<BattleCardBase>, List<int>, List<int>, List<bool>, bool, bool, bool> OnCostChange;
public event Action<List<SkillBase.BuffInfoContainer>, bool, bool> OnRemoveCostChange;
public event Action<BattleCardBase, List<BattleCardBase>, int, int, int, int, int> OnPowerUp;
public event Action OnPowerDownStart;
public event Action<BattleCardBase, List<BattleCardBase>, int, int, int, bool> OnPowerDown;
public event Action<List<Skill_powerup.PowerUpModifierContainer>> OnDeprivePowerUp;
public event Action<List<SkillBase.BuffInfoContainer>> OnDeprivePowerDown;
public event Action<BattleCardBase, List<BattleCardBase>, List<int>> OnSpellCharge;
public event Action<int> OnDrain;
public event Action<BattleCardBase> OnSkillDamageStart;
public event Action<List<BattleCardBase>, List<BattleCardBase>, List<BattleCardBase.DamageResult>> OnDamage;
public event Action<BattleCardBase, List<BattleCardBase>, List<int>> OnHeal;
public event Action<List<BattleCardBase>> OnDiscard;
public event Action OnStartLeaveCard;
public event Action<BattleCardBase> OnDestroy;
public event Action<BattleCardBase, bool, bool> OnSkillDestroyOrBanish;
public event Action<BattleCardBase> OnBanish;
public event Action<BattleCardBase> OnPlayVoiceOnDeath;
public event Action<BattleCardBase> OnReturn;
public event Action OnSkillReturn;
public event Action<BattleCardBase, List<BattleCardBase>> OnBeforeSkillEvolve;
public event Action<BattleCardBase> OnEvolveMeWhenAttack;
public event Action<List<BattleCardBase>> OnAfterSkillEvolve;
public event Action<BattleCardBase, BattleCardBase, bool> OnPlayCard;
public event Action<SkillCollectionBase.WhenPlayEffectType, BattleCardBase, bool> OnWhenPlayEffect;
public event Action<BattleCardBase, List<BattleCardBase>, int> OnChantCountChange;
public event Action<BattleCardBase, int, bool> OnChangeWhiteRitualStack;
public event Action<BattleCardBase, List<BattleCardBase>, int> OnChangeMaxAttackableCount;
public event Action<BattleCardBase, List<BattleCardBase>, int> OnMetamorphose;
public event Action<int> OnFusionMetamorphose;
public event Action<BattleCardBase> OnOpenCard;
public event Action<BattleCardBase, List<BattleCardBase>, BattleCardBase> OnUnite;
public event Action<NetworkBattleReceiver.ReplayOperationType> OnRemoveLatestOperationJsonData;
public event Action OnPlayComplete;
public event Action<ClassCharaPrm.EmotionType, bool> OnEmotion;
public event Action<bool> OnClearDestroyedCardList;
public void SetCurrentEpCount(int setCount)
{
CurrentEpCount = setCount;
}
public void AddCurrentEpCount(int addCount = 1)
{
CurrentEpCount += addCount;
}
public void GainCurrentEpCount(int gainCount = 1)
{
CurrentEpCount -= gainCount;
}
public VfxBase SetBp(int value)
{
Bp = value;
Bp = Math.Max(0, Bp);
Bp = Math.Min(Bp, 99);
return BattleView.SetBp(value);
}
public VfxBase AddBp(int value)
{
Bp += value;
Bp = Math.Max(0, Bp);
Bp = Math.Min(Bp, 99);
return BattleView.SetBp(Bp);
}
public void SetIsShortageDeckLose(bool flag)
{
IsShortageDeckLose = flag;
}
public void ResetIsShortageDeck()
{
IsShortageDeck = false;
}
public void SetCumulativeEvolutionCount(int count)
{
_cumulativeEvolutionCount = count;
}
public int AddDamageByClassUseCard(string damageType)
{
if (Class != null)
{
int num = 0;
for (int i = 0; i < Class.SkillApplyInformation.AddDamageList.Count; i++)
{
if (Class.SkillApplyInformation.AddDamageList[i] is AddDamageInfo addDamageInfo && addDamageInfo.IsEffective(damageType, Class.Clan, isUseClass: true))
{
num += addDamageInfo.AddDamage;
}
}
return num;
}
return 0;
}
protected BattlePlayerBase(BattleManagerBase battleMgr, BattleCamera battleCamera, BackGroundBase backGround, IInnerOptionsBuilder innerOptionsBuilder)
{
BattleMgr = battleMgr;
_dataMgr = GameMgr.GetIns().GetDataMgr();
BattleCamera = battleCamera;
BackGround = backGround;
_innerOptionsBuilder = innerOptionsBuilder;
Initialize();
HandCardList = new List<BattleCardBase>();
DeckCardList = new List<BattleCardBase>();
BattleStartDeckCardList = new List<BattleCardBase>();
DeckSkillCardList = new List<BattleCardBase>();
ClassAndInPlayCardList = new List<BattleCardBase>();
CemeteryList = new List<BattleCardBase>();
PredictionCemeteryRandomCards = new List<BattleCardBase>();
PredictionDamageRandomCards = new List<BattleCardBase>();
PredictionBanishRandomCards = new List<BattleCardBase>();
BanishList = new List<BattleCardBase>();
FusionIngredientList = new List<BattleCardBase>();
TurnFusionCards = new List<BattleCardBase>();
NecromanceZoneList = new List<BattleCardBase>();
DiscardedCardList = new List<BattleCardBase>();
FusionIngredientAndDiscardedCardList = new List<BattleCardBase>();
ReservedCardList = new List<BattleCardBase>();
UniteList = new List<BattleCardBase>();
GetOnList = new List<BattleCardBase>();
BlackHole = new List<BattleCardBase>();
ChoiceBraveCardList = new List<BattleCardBase>();
ReturnList = new List<BattleCardBase>();
HealingCards = new List<BattleCardBase>();
LastTargetCardsList = new List<List<BattleCardBase>>();
SkillSummonedCards = new List<BattleCardBase>();
SummonedCards = new List<BattleCardBase>();
EvolvedCards = new List<BattleCardBase>();
DestroyedWhenDestroyCards = new List<BattleCardBase>();
InHandCards = new List<BattleCardBase>();
SkillDiscards = new List<BattleCardBase>();
SkillBanishCards = new List<BattleCardBase>();
TurnPlayCards = new List<BattleCardBase>();
TurnDrawCards = new List<BattleCardBase>();
TurnDrawTokenCardsWithId = new List<CardAndId>();
GameSummonCards = new List<TurnAndCard>();
GameSummonMomentTribe = new List<CardAndTribe>();
GamePlayMomentTribe = new List<CardAndTribe>();
GamePlayMomentSpellChargeCards = new List<BattleCardBase>();
GameUpdateDeckMomentTribe = new List<CardAndTribe>();
GamePlayCards = new List<BattleCardBase>();
GameTurnPlayCards = new List<TurnAndCard>();
GameEnhancePlayCards = new List<TurnAndCard>();
GameCrystallizedPlayCards = new List<BattleCardBase>();
GameInplayMetamorphoseCards = new List<BattleCardBase>();
GameBurialRiteCards = new List<BattleCardBase>();
GameQuickAttackCards = new List<BattleCardBase>();
TurnBurialRiteCards = new List<BattleCardBase>();
BurialRiteOrDiscardCardHandIndexList = new List<int>();
GameReanimatedCards = new List<TurnAndCard>();
OkSkillInProcess = new List<SkillBase>();
TurnDestroyCards = new List<TurnAndCard>();
AddToDeckCardList = new List<BattleCardBase>();
GameDrawCards = new List<BattleCardBase>();
GameDrawTokenCards = new List<BattleCardBase>();
GameAddUpdateDeckCards = new List<BattleCardBase>();
TurnStartLifeList = new List<TurnAndIntValue>();
TurnWhenHealingCount = new List<TurnAndIntValue>();
TurnPlayCardCountInfo = new List<TurnAndIntValue>();
TurnFusionCountInfo = new List<TurnAndIntValue>();
TurnEvolveCardCountInfo = new List<TurnAndIntValue>();
GameLeftCards = new List<BattleCardBase>();
GameTurnLeftCards = new List<TurnAndCard>();
GameReturnedCards = new List<TurnAndCard>();
GameSuperSkyboundArtCards = new List<BattleCardBase>();
GameSkillReturnCardCountList = new List<TurnAndIntValue>();
GameSkillDiscardCountList = new List<TurnAndIntValue>();
GameSkillBuffCountList = new List<TurnAndIntValue>();
GameSkillMetamorphoseCountList = new List<TurnAndIntValue>();
BonusConditionList = new List<MyRotationBonusCondition>();
BossRushSpecialSkillList = new List<BossRushSpecialSkill>();
ChoiceBraveSkillDescInfoList = new List<AvatarBattleDescInfo>();
NowTurnEvol = true;
m_vfxCreator = CreateVfxCreator();
CreateSelfBattleCard();
_class = ClassAndInPlayCardList[0];
}
protected abstract void Initialize();
protected abstract void CreateSelfBattleCard();
protected virtual IBattlePlayerVfxCreator CreateVfxCreator()
{
return new BattlePlayerVfxCreatorBase(BattleView);
}
public virtual VfxBase LoadResources(IBattleResourceMgr resourceMgr)
{
long sleeveId = (IsPlayer ? _dataMgr.GetPlayerSleeveId() : _dataMgr.GetEnemySleeveId());
return SequentialVfxPlayer.Create(resourceMgr.LoadSleeveMaterial(sleeveId, IsPlayer), ClassInformationUIController.LoadResources(StatusPanelControl.GetClassInfoAnchor(), IsPlayer));
}
public virtual void Setup(BattlePlayerBase opponentBattlePlayer)
{
IsShortageDeckLose = false;
extraTurnCount = 0;
_cumulativeEvolutionCount = 0;
_opponentBattlePlayer = opponentBattlePlayer;
_opponentBattlePlayer.Class.ChangeClassClanParameter();
GameMgr ins = GameMgr.GetIns();
List<IClassInfomationUI> list = new List<IClassInfomationUI>();
BattleManagerBase ins2 = BattleManagerBase.GetIns();
if (IsPlayer)
{
int key = (IsPlayer ? ins.GetNetworkUserInfoData().GetSelfChaosId() : ins.GetNetworkUserInfoData().GetOpponentChaosId());
if (Data.Master.ClassInfomationOrder != null && Data.Master.ClassInfomationOrder.ContainsKey(key))
{
List<int> value = new List<int>();
int num = 1;
Data.Master.ClassInfomationOrder.TryGetValue(key, out value);
for (int i = 0; i < value.Count; i++)
{
list.Add(CreateClassInfomationUI(num, value.Count, value[i]));
num++;
}
}
else if (ins.GetDataMgr().GetPlayerSubClassId() != 10)
{
int num2 = 1;
List<int> crossOverClassInfoListOrNull = Data.Master.GetCrossOverClassInfoListOrNull(ins.GetDataMgr().GetPlayerClassId(), ins.GetDataMgr().GetPlayerSubClassId());
if (crossOverClassInfoListOrNull == null || crossOverClassInfoListOrNull.Count <= 0)
{
list.Add(CreateClassInfomationUI());
}
else
{
for (int j = 0; j < crossOverClassInfoListOrNull.Count; j++)
{
list.Add(CreateClassInfomationUI(num2, crossOverClassInfoListOrNull.Count, crossOverClassInfoListOrNull[j]));
num2++;
}
}
}
else if (Data.CurrentFormat == Format.Avatar)
{
int key2 = ((ins2 is NetworkBattleManagerBase) ? int.Parse(ins.GetNetworkUserInfoData().GetSelfAvatarBattleId()) : ins.GetDataMgr().GetPlayerCharaId());
List<int> value2 = new List<int>();
Data.Master.AvatarClassInformationOrder.TryGetValue(key2, out value2);
for (int k = 0; k < value2.Count; k++)
{
list.Add(CreateClassInfomationUI(k + 1, value2.Count, value2[k]));
}
}
else if (ins2.IsPuzzleMgr)
{
int playerClass = (ins2 as PuzzleBattleManager).PuzzleQuestData.BattleData.PlayerClass;
list.Add(CreateClassInfomationUI(1, 1, playerClass));
}
else
{
list.Add(CreateClassInfomationUI());
}
}
else if (ins.GetDataMgr().GetEnemySubClassId() != 10)
{
int num3 = 1;
List<int> crossOverClassInfoListOrNull2 = Data.Master.GetCrossOverClassInfoListOrNull(ins.GetDataMgr().GetEnemyClassId(), ins.GetDataMgr().GetEnemySubClassId());
if (crossOverClassInfoListOrNull2 == null || crossOverClassInfoListOrNull2.Count <= 0)
{
list.Add(CreateClassInfomationUI());
}
else
{
for (int l = 0; l < crossOverClassInfoListOrNull2.Count; l++)
{
list.Add(CreateClassInfomationUI(num3, crossOverClassInfoListOrNull2.Count, crossOverClassInfoListOrNull2[l]));
num3++;
}
}
}
else if (Data.CurrentFormat == Format.Avatar && ins2 is NetworkBattleManagerBase)
{
int key3 = int.Parse(ins.GetNetworkUserInfoData().GetOpponentAvatarBattleId());
List<int> value3 = new List<int>();
Data.Master.AvatarClassInformationOrder.TryGetValue(key3, out value3);
for (int m = 0; m < value3.Count; m++)
{
list.Add(CreateClassInfomationUI(m + 1, value3.Count, value3[m]));
}
}
else
{
list.Add(CreateClassInfomationUI());
}
ClassInformationUIController = new ClassInformationUIController(list);
ClassInformationUIController.SetUpEvent(this);
SetUpClassEvent();
foreach (BattleCardBase deckCard in DeckCardList)
{
SetupCardEvent(deckCard);
}
foreach (BattleCardBase handCard in HandCardList)
{
SetupCardEvent(handCard);
}
foreach (BattleCardBase classAndInPlayCard in ClassAndInPlayCardList)
{
SetupCardEvent(classAndInPlayCard);
}
OnNecromance += delegate(BattleCardBase necromanceCard, SkillProcessor skillProcessor, int necromanceCount, bool isFusion)
{
List<BattleCardBase> list2 = ClassAndInPlayCardList.ToList();
list2.AddRange(DeckSkillCardList);
foreach (BattleCardBase item in list2)
{
item.Necromance(necromanceCard, skillProcessor, necromanceCount);
}
if (BattleMgr is NetworkBattleManagerBase networkBattleManagerBase)
{
networkBattleManagerBase.RegisterActionManager.Add(new RegisterPlayerParameter(RegisterActionBase.ActionBaseParameter.cemetery, -1 * necromanceCount, necromanceCard.IsPlayer));
}
};
Emotion.OnPlay += (ClassCharaPrm.EmotionType emoteType) => opponentBattlePlayer.Emotion.ReceiveOpponentEmotion(emoteType);
OnNecromance += delegate
{
BattleMgr.VfxMgr.RegisterImmediateVfx(InstantVfx.Create(delegate
{
StatusPanelControl.SetGrave(CemeteryList.Count((BattleCardBase c) => !c.IsClass));
UpdateHandCardsPlayability();
}));
};
OnAddPlayCardAfterEvent += delegate
{
UpdateStatusPanelHandCount();
};
OnAddHandCardAfterEvent += delegate
{
UpdateStatusPanelHandCount();
};
OnAddCemeteryAfterEvent += delegate
{
UpdateStatusPanelHandCount();
return NullVfx.GetInstance();
};
OnAddCemeteryAfterEvent += delegate
{
BattleMgr.VfxMgr.RegisterImmediateVfx(InstantVfx.Create(delegate
{
if (StatusPanelControl != null)
{
StatusPanelControl.SetGrave(CemeteryList.Count((BattleCardBase c) => !c.IsClass));
}
}));
return InstantVfx.Create(delegate
{
UpdateHandCardsPlayability();
});
};
OnAddBanishAfterEvent += delegate
{
UpdateHandCardsPlayability();
UpdateStatusPanelHandCount();
};
OnAddUniteAfterEvent += delegate
{
UpdateHandCardsPlayability();
UpdateStatusPanelHandCount();
};
OnChangeDeckAfterEvent += delegate(int previousCount, SkillProcessor skillProcessor, List<BattleCardBase> summonCards)
{
if (previousCount % 2 == 1 && DeckCardList.Count % 2 == 0)
{
int gameResonanceStartCount = GameResonanceStartCount;
GameResonanceStartCount = gameResonanceStartCount + 1;
gameResonanceStartCount = TurnResonanceStartCount;
TurnResonanceStartCount = gameResonanceStartCount + 1;
StartSkillWhenResonanceStart(skillProcessor, summonCards);
}
};
OnChangeDeckAfterEvent += delegate
{
DeckSkillCardList.RemoveAll((BattleCardBase c) => !c.IsInDeck);
};
OnMulliganEnd += delegate
{
DeckSkillCardList.RemoveAll((BattleCardBase c) => !c.IsInDeck);
};
OnTurnStartComplete = (Action)Delegate.Combine(OnTurnStartComplete, new Action(AddToDeckCardIndexChange));
OnTurnStartComplete = (Action)Delegate.Combine(OnTurnStartComplete, new Action(BattleMgr.DetailMgr.DetailPanelControl.UpdateCardDescriptionOnEvent));
OnPostTurnEndComplete = (Action)Delegate.Combine(OnPostTurnEndComplete, new Action(AddToDeckCardIndexChange));
OnPreTurnEndComplete = (Action)Delegate.Combine(OnPreTurnEndComplete, new Action(BattleMgr.DetailMgr.DetailPanelControl.UpdateCardDescriptionOnEvent));
}
private void UpdateStatusPanelHandCount()
{
if (StatusPanelControl != null && HandCardList != null)
{
StatusPanelControl.SetHandCount(HandCardList.Count);
}
}
public void UpdateStatusPanel(int handCount, int cemeteryCount, int deckCount)
{
if (StatusPanelControl != null)
{
StatusPanelControl.SetHandCount(handCount);
StatusPanelControl.SetGrave(cemeteryCount);
StatusPanelControl.SetDeck(deckCount);
}
}
public virtual IClassInfomationUI CreateClassInfomationUI(int orderCount = 1, int totalInfoNum = 1, int clanId = -1)
{
if (clanId == -1)
{
clanId = (IsPlayer ? _dataMgr.GetPlayerClassId() : _dataMgr.GetEnemyClassId());
}
IBattlePlayerView battlePlayerView = (IsPlayer ? BattleView : _opponentBattlePlayer.BattleView);
IBattlePlayerView battleEnemyView = (IsPlayer ? _opponentBattlePlayer.BattleView : BattleView);
switch ((CardBasePrm.ClanType)clanId)
{
case CardBasePrm.ClanType.MIN:
return new ElfInfomationUI(this, battlePlayerView, orderCount, totalInfoNum);
case CardBasePrm.ClanType.ROYAL:
return new RoyalInfomationUI(this, battlePlayerView, orderCount, totalInfoNum);
case CardBasePrm.ClanType.WITCH:
if (IsPlayer || totalInfoNum > 1)
{
return new WitchInfomationUI(this, battlePlayerView, orderCount, totalInfoNum);
}
return new ClassInfomationUIBase(this, battlePlayerView, orderCount, totalInfoNum);
case CardBasePrm.ClanType.DRAGON:
return new DragonInfomationUI(this, battlePlayerView, orderCount, totalInfoNum);
case CardBasePrm.ClanType.NECRO:
return new NecromanceInfomationUI(this, battlePlayerView, orderCount, totalInfoNum);
case CardBasePrm.ClanType.VAMPIRE:
return new VampireInfomationUI(this, battlePlayerView, orderCount, totalInfoNum);
case CardBasePrm.ClanType.BISHOP:
return new BishopInfomationUI(this, battlePlayerView, battleEnemyView, orderCount, totalInfoNum);
case CardBasePrm.ClanType.NEMESIS:
return new NemesisInfomationUI(this, battlePlayerView, orderCount, totalInfoNum);
default:
return new ClassInfomationUIBase(this, battlePlayerView, orderCount, totalInfoNum);
}
}
public VfxBase Recovery()
{
return SequentialVfxPlayer.Create(ClassInformationUIController.LoadResources(StatusPanelControl.GetClassInfoAnchor(), IsPlayer), InstantVfx.Create(delegate
{
ClassInformationUIController.ShowInfomation(playEffect: false);
}));
}
public abstract void SetupClone(BattlePlayerBase sourceBattlePlayer, BattlePlayerBase virtualOpponentBattlePlayer, CloneActualFlags cloneFlags);
public void SetupActionProcessorEvent(ActionProcessor processor)
{
processor.OnBeforePlayCard += delegate(BattleCardBase originalCard, BattleCardBase card, IEnumerable<BattleCardBase> selectedCards)
{
if (!card.IsChoiceBraveSkillCard)
{
AddCurrentTrunPlayCount(1);
CardOnPlay = card;
TurnPlayCards.Add(card);
GamePlayCards.Add(card);
GameTurnPlayCards.Add(new TurnAndCard(IsSelfTurn ? Turn : BattleMgr.CurrentTurn, BattleMgr.BattlePlayer.IsSelfTurn, card, BattleMgr.IsTurnEnd));
GamePlayMomentTribe.Add(new CardAndTribe(card, card.Tribe));
if (card.HasSpellCharge)
{
GamePlayMomentSpellChargeCards.Add(card);
}
if (card.CheckConditionFixedUseCost(isPrePlay: true))
{
GameEnhancePlayCards.Add(new TurnAndCard(IsSelfTurn ? Turn : BattleMgr.CurrentTurn, BattleMgr.BattlePlayer.IsSelfTurn, card, BattleMgr.IsTurnEnd));
}
if (card.TransformInfo.Type == BattleCardBase.TransformType.Crystallize)
{
GameCrystallizedPlayCards.Add(card);
}
if (!BattleMgr.IsVirtualBattle)
{
BattleLogManager.GetInstance().AddLogDestFollower(BattleLogWindow.BattleLogType.PlayCardLog, card);
}
BattleView.HandView.RemoveCardFromView(card.BattleCardView, 0.3f);
}
};
processor.OnAfterFusion += delegate
{
AddToDeckCardIndexChange();
return NullVfx.GetInstance();
};
processor.OnPlayComplete = (Action)Delegate.Combine(processor.OnPlayComplete, new Action(AddToDeckCardIndexChange));
processor.OnPlayComplete = (Action)Delegate.Combine(processor.OnPlayComplete, new Action(BattleMgr.DetailMgr.DetailPanelControl.UpdateCardDescriptionOnEvent));
processor.OnPlayComplete = (Action)Delegate.Combine(processor.OnPlayComplete, this.OnPlayComplete);
processor.OnPlayComplete = (Action)Delegate.Combine(processor.OnPlayComplete, (Action)delegate
{
CardOnPlay = null;
});
processor.OnEvolutionComplete = (Action)Delegate.Combine(processor.OnEvolutionComplete, new Action(AddToDeckCardIndexChange));
processor.OnEvolutionComplete = (Action)Delegate.Combine(processor.OnEvolutionComplete, new Action(BattleMgr.DetailMgr.DetailPanelControl.UpdateCardDescriptionOnEvolutionEvent));
processor.OnAttackComplete = (Action)Delegate.Combine(processor.OnAttackComplete, new Action(AddToDeckCardIndexChange));
processor.OnAttackComplete = (Action)Delegate.Combine(processor.OnAttackComplete, new Action(BattleMgr.DetailMgr.DetailPanelControl.UpdateCardDescriptionOnEvent));
if (GameMgr.GetIns().IsWatchBattle && !GameMgr.GetIns().IsReplayBattle)
{
processor.OnFusionComplete = (Action)Delegate.Combine(processor.OnFusionComplete, new Action(BattleMgr.DetailMgr.DetailPanelControl.UpdateCardDescriptionOnEvent));
}
}
private void SetUpClassEvent()
{
this.OnSetupClassEvent.Call();
}
public virtual void SetupCardEvent(BattleCardBase card)
{
if (card.IsUnit)
{
card.OnEvolveEvent += delegate(bool isSkill)
{
EvolveProcess(card, isSkill);
};
}
this.OnSetupCardEvent.Call(card);
if (card.IsSpell)
{
card.OnPlay += () => RemoveSpellCardFromHand(card);
card.OnFinishWhenPlaySkill += () => AddSpellCardToCemetery(card);
}
card.OnRemoveFromInPlayAfterOneTime += (bool flg, SkillProcessor skillProcessorOneTime) => flg ? NullVfx.GetInstance() : card.SkillApplyInformation.AllSkillEffectStop();
}
public virtual BattleCardBase CreateCard(int cardId, int cardIndex, bool isChoiceBrave = false)
{
BattleCardBase battleCardBase = CardCreatorBase.CreateCard(cardId, IsPlayer, cardIndex, BattleManagerBase.GetIns().SBattleLoad, BattleMgr, BattleManagerBase.GetIns().BattleResourceMgr, _innerOptionsBuilder, isChoiceBrave);
SetupCardEvent(battleCardBase);
return battleCardBase;
}
public BattleCardBase CreateVirtualCard(int cardId, int cardIndex)
{
BattleCardBase battleCardBase = CardCreatorBase.CreateVirtualCard(cardId, cardIndex, IsPlayer, BattleMgr, this, _opponentBattlePlayer, _innerOptionsBuilder);
SetupCardEvent(battleCardBase);
return battleCardBase;
}
public BattleCardBase CreateNextIndexCard(int cardId, bool isChoiceBrave = false)
{
BattleCardBase result = CreateCard(cardId, cardTotalNum, isChoiceBrave);
if (!isChoiceBrave)
{
cardTotalNum++;
}
return result;
}
public VfxBase CardManagement(BattleCardBase card, SkillProcessor skillProcessor, CARD_MANAGEMENT management, bool isRandom, List<BattleCardBase> fusionCards = null, BattleCardBase vehicleCard = null, SkillBase skill = null, SummonInfo summonInfo = null, bool isOpen = false)
{
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
switch (management)
{
case CARD_MANAGEMENT.DESTROY:
if (card.SkillApplyInformation.IsBanishByDestroy && card.SkillApplyInformation.IsDestroyByBanish)
{
sequentialVfxPlayer.Register(DestroyManagement(card, skillProcessor, isRandom, skill));
}
else if (!card.SkillApplyInformation.IsBanishByDestroy && card.SkillApplyInformation.IsDestroyByBanish)
{
if (card.SkillApplyInformation.IsIndestructible && card.IsDestroyedBySkill)
{
card.ResetFlagCardAsDestroyed();
}
else
{
sequentialVfxPlayer.Register(BanishManagement(card, skillProcessor, skill, isReturn: false, isRandom, isOpen));
}
}
else
{
sequentialVfxPlayer.Register(DestroyManagement(card, skillProcessor, isRandom, skill));
}
break;
case CARD_MANAGEMENT.BANISH:
if (card.SkillApplyInformation.IsBanishByDestroy && card.SkillApplyInformation.IsDestroyByBanish)
{
sequentialVfxPlayer.Register(DestroyManagement(card, skillProcessor, isRandom, skill));
}
else if (card.SkillApplyInformation.IsBanishByDestroy && !card.SkillApplyInformation.IsDestroyByBanish)
{
sequentialVfxPlayer.Register(DestroyManagement(card, skillProcessor, isRandom, skill));
}
else
{
sequentialVfxPlayer.Register(BanishManagement(card, skillProcessor, skill, isReturn: false, isRandom, isOpen));
}
break;
case CARD_MANAGEMENT.RETURN:
GameReturnedCards.Add(new TurnAndCard(IsSelfTurn ? Turn : BattleMgr.CurrentTurn, BattleMgr.BattlePlayer.IsSelfTurn, card, BattleMgr.IsTurnEnd));
card.SetReturnedSkill(skill);
if (card.SkillApplyInformation.IsReturnByBanish && card.SkillApplyInformation.IsBanishByDestroy)
{
if (card.SkillApplyInformation.IsIndestructible)
{
sequentialVfxPlayer.Register(ReturnCardManagement(card, skillProcessor, skill));
break;
}
card.FlagCardAsDestroyedBySkill();
sequentialVfxPlayer.Register(DestroyManagement(card, skillProcessor, isRandom, skill));
}
else if (card.SkillApplyInformation.IsReturnByBanish)
{
sequentialVfxPlayer.Register(BanishManagement(card, skillProcessor, skill, isReturn: true, isRandom, isOpen));
}
else
{
sequentialVfxPlayer.Register(ReturnCardManagement(card, skillProcessor, skill));
}
break;
case CARD_MANAGEMENT.FUSION_MATERIAL:
sequentialVfxPlayer.Register(Fusion(card, fusionCards, skillProcessor));
break;
case CARD_MANAGEMENT.GETON:
sequentialVfxPlayer.Register(GetOnCardManagement(card, skillProcessor, vehicleCard, skill));
break;
case CARD_MANAGEMENT.GETOFF:
return GetOffCardManagement(summonInfo, skillProcessor, vehicleCard, skill);
case CARD_MANAGEMENT.SUMMON:
return SummonCardManagement(summonInfo, skillProcessor, skill);
}
return sequentialVfxPlayer;
}
public void CallOnSummonTokenCards(BattleCardBase card, List<BattleCardBase> summonCards, List<BattleCardBase> overflowCards, bool isSelf, bool isOwnerEffect, bool isIgnoreVoice, bool isRandomVoice, bool isEvoVoice)
{
this.OnSummonTokenCards.Call(card, summonCards, overflowCards, isSelf, isOwnerEffect, isIgnoreVoice, isRandomVoice, isEvoVoice);
}
public void CallOnSummonCards(BattleCardBase card, List<BattleCardBase> cards, bool isSelf, bool isDeckSelf, bool isIgnoreVoice, bool isBurialRite = false)
{
this.OnSummonCards.Call(card, cards, isSelf, isDeckSelf, isIgnoreVoice, isBurialRite);
}
protected VfxBase Fusion(BattleCardBase fusionCard, List<BattleCardBase> ingredientCards, SkillProcessor skillProcessor)
{
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
if (!fusionCard.IsFusionable)
{
return sequentialVfxPlayer;
}
if (!GameMgr.GetIns().IsAdminWatch && !GameMgr.GetIns().IsReplayBattle)
{
BattleLogManager.GetInstance().AddFusionIngredients(fusionCard, isCreateClone: false);
}
if (!BattleMgr.IsVirtualBattle && !BattleMgr.IsRecovery)
{
sequentialVfxPlayer.Register(BattleView.CreateBeforeFusionVfx(fusionCard, ingredientCards));
}
new SkillConditionCheckerOption();
SkillProcessor.ProcessInfo processInfo = fusionCard.Skills.CreateWhenFusionMetamorphoseInfo(ingredientCards, skillProcessor, new BattlePlayerPair(fusionCard.SelfBattlePlayer, fusionCard.OpponentBattlePlayer));
skillProcessor.Register(processInfo);
bool flag = processInfo != null;
ParallelVfxPlayer parallelVfxPlayer = ParallelVfxPlayer.Create();
foreach (BattleCardBase ingredientCard in ingredientCards)
{
parallelVfxPlayer.Register(UseFusionIngredientManagement(ingredientCard, fusionCard, skillProcessor, isRandom: false, flag));
}
sequentialVfxPlayer.Register(parallelVfxPlayer);
TurnFusionCards.Add(fusionCard);
AddCurrentTurnFusionCount(1);
if (GameMgr.GetIns().IsAdminWatch || GameMgr.GetIns().IsReplayBattle)
{
BattleLogManager.GetInstance().AddFusionIngredients(fusionCard, isCreateClone: true);
}
BattleCardBase originalCard = fusionCard;
fusionCard.CallOnFusionEvent(ingredientCards);
sequentialVfxPlayer.Register(skillProcessor.Process(new BattlePlayerPair(this, _opponentBattlePlayer)));
if (flag)
{
fusionCard = fusionCard.MetamorphoseCard;
}
sequentialVfxPlayer.Register(BattleView.ReturnActCardAfterFusion(fusionCard.BattleCardView, flag));
sequentialVfxPlayer.Register(InstantVfx.Create(delegate
{
ImmediateVfxMgr.GetInstance().Register(new ShowSideLogVfx(originalCard, null, originalCard.SelfBattlePlayer.BattleView.GetSideLogControl(isSkillTargetSelect: false), originalCard.GetCardSkillDescription(new SideLogInfo(null)), 3f));
}));
VfxBase vfx = fusionCard.Fusion(skillProcessor, ingredientCards, flag);
sequentialVfxPlayer.Register(vfx);
VfxBase vfx2 = skillProcessor.Process(new BattlePlayerPair(this, _opponentBattlePlayer));
sequentialVfxPlayer.Register(vfx2);
return sequentialVfxPlayer;
}
public VfxBase CardManagement(List<BattleCardBase> cards, SkillProcessor skillProcessor, CARD_MANAGEMENT management, bool isRandom, SkillBase skill = null)
{
if (!BattleMgr.IsRecovery)
{
for (int i = 0; i < cards.Count; i++)
{
BurialRiteOrDiscardCardHandIndexList.Add(HandCardList.IndexOf(cards[i]));
}
}
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
if (management == CARD_MANAGEMENT.DESTROY)
{
sequentialVfxPlayer.Register(DestroyManagement(cards, skillProcessor, isRandom, skill));
}
return sequentialVfxPlayer;
}
protected VfxBase DestroyManagement(BattleCardBase card, SkillProcessor skillProcessor, bool isRandom, SkillBase destroyedSkill = null)
{
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
bool num = ClassAndInPlayCardList.Contains(card);
bool flag = HandCardList.Contains(card);
if (num)
{
this.OnStartLeaveCard.Call();
sequentialVfxPlayer.Register(DestroyCard(card, skillProcessor, isRandom, destroyedSkill));
sequentialVfxPlayer.Register(card.DestroyInPlay(skillProcessor, useDestroy: true, destroyedSkill));
this.OnDestroy.Call(card);
}
else if (flag)
{
sequentialVfxPlayer.Register(DestroyCard(card, skillProcessor, isRandom, destroyedSkill));
sequentialVfxPlayer.Register(DisCard(card, new List<BattleCardBase> { card }, skillProcessor, destroyedSkill));
}
return sequentialVfxPlayer;
}
protected VfxBase DestroyManagement(List<BattleCardBase> cards, SkillProcessor skillProcessor, bool isRandom, SkillBase skill)
{
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
if (HandCardList.Contains(cards.First()))
{
for (int i = 0; i < cards.Count; i++)
{
sequentialVfxPlayer.Register(DestroyCard(cards[i], skillProcessor, isRandom, skill));
}
sequentialVfxPlayer.Register(DisCards(cards, skillProcessor, skill));
}
return sequentialVfxPlayer;
}
protected VfxBase BanishManagement(BattleCardBase card, SkillProcessor skillProcessor, SkillBase skill, bool isReturn = false, bool isRandom = false, bool isOpen = false)
{
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
bool num = InPlayCards.Contains(card);
bool flag = HandCardList.Contains(card);
bool flag2 = DeckCardList.Contains(card);
this.OnStartLeaveCard.Call();
if (num)
{
card.SetBanishedInfo(BattleCardBase.BanishInfo.BanishPlace.Field);
sequentialVfxPlayer.Register(card.SkillApplyInformation.AllSkillEffectStop());
sequentialVfxPlayer.Register(BanishCard(card, skillProcessor, isRandom, skill, isOpen));
sequentialVfxPlayer.Register(card.Banish(skillProcessor, isReturn));
}
else if (flag)
{
card.SetBanishedInfo(BattleCardBase.BanishInfo.BanishPlace.Hand);
sequentialVfxPlayer.Register(BanishCard(card, skillProcessor, isRandom, skill, isOpen));
VfxWithLoading vfxWithLoading = card.BanishInHand(skillProcessor);
sequentialVfxPlayer.Register(vfxWithLoading.LoadingVfx);
sequentialVfxPlayer.Register(vfxWithLoading.MainVfx);
}
else if (flag2)
{
card.SetBanishedInfo(BattleCardBase.BanishInfo.BanishPlace.Deck);
sequentialVfxPlayer.Register(BanishCard(card, skillProcessor, isRandom, skill, isOpen));
sequentialVfxPlayer.Register(card.BanishInDeck(skillProcessor));
}
this.OnBanish.Call(card);
return sequentialVfxPlayer;
}
public VfxBase UseFusionIngredientManagement(BattleCardBase ingredientCard, BattleCardBase fusionCard, SkillProcessor skillProcessor, bool isRandom = false, bool isFusionMetamorphose = false)
{
if (FusionIngredientList.Any((BattleCardBase c) => c == fusionCard))
{
return NullVfx.GetInstance();
}
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
VfxWithLoading vfxWithLoading = ingredientCard.FusionMaterialized(skillProcessor, fusionCard, isFusionMetamorphose);
this.OnFusion.Call(ingredientCard);
HandCardList.Remove(ingredientCard);
CallSkill((IBattlePlayerSkill s) => s.StopBattleHandCard, ingredientCard);
FusionIngredientList.Add(ingredientCard);
FusionIngredientAndDiscardedCardList.Add(ingredientCard);
if (isRandom)
{
PredictionBanishRandomCards.Add(ingredientCard);
}
this.OnAddBanishAfterEvent.Call(fusionCard);
sequentialVfxPlayer.Register(ingredientCard.UnloadResource());
sequentialVfxPlayer.Register(vfxWithLoading.LoadingVfx);
sequentialVfxPlayer.Register(vfxWithLoading.MainVfx);
return sequentialVfxPlayer;
}
protected VfxBase ReturnCardManagement(BattleCardBase card, SkillProcessor skillProcessor, SkillBase skill)
{
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
this.OnStartLeaveCard.Call();
sequentialVfxPlayer.Register(ReturnCard(card, skillProcessor, skill));
this.OnReturn.Call(card);
return sequentialVfxPlayer;
}
protected VfxBase GetOnCardManagement(BattleCardBase getOnCard, SkillProcessor skillProcessor, BattleCardBase vehicleCard, SkillBase skill)
{
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
BattlePlayerReadOnlyInfoPair playerInfoPair = new BattlePlayerReadOnlyInfoPair(this, _opponentBattlePlayer);
vehicleCard.SkillApplyInformation.AddGetOnCard(getOnCard);
getOnCard.DeathTypeInfo.LeaveByGetOn = true;
sequentialVfxPlayer.Register(getOnCard.RemoveFromInPlay());
sequentialVfxPlayer.Register(CardToVehicleZone(getOnCard, skill));
SkillProcessor.ProcessInfo info = vehicleCard.Skills.CreateWhenGetOnInfo(skillProcessor, playerInfoPair);
sequentialVfxPlayer.Register(getOnCard.RemoveFromInPlayAfter(skillProcessor));
sequentialVfxPlayer.Register(StartSkillWhenChangeInplay(null, null, skillProcessor));
skillProcessor.Register(info);
sequentialVfxPlayer.Register(getOnCard.GetOn(vehicleCard.BattleCardView.Transform, vehicleCard.BattleCardView, skillProcessor));
return sequentialVfxPlayer;
}
protected VfxBase GetOffCardManagement(SummonInfo summonInfo, SkillProcessor skillProcessor, BattleCardBase vehicleCard, SkillBase skill)
{
VfxWithLoadingSequential vfxWithLoadingSequential = VfxWithLoadingSequential.Create();
foreach (BattleCardBase summonedCard in summonInfo.SummonedCardsList.summonedCards)
{
vfxWithLoadingSequential.RegisterVfxWithLoading(summonedCard.SkillPlayCard(IsPlayer, SkillBaseSummon.SUMMON_TYPE.TOKEN, skillProcessor, skill, isGetoff: true));
}
vfxWithLoadingSequential.RegisterToLoadingVfx(BattleMgr.LoadCardResources(summonInfo.SummonedCardsList.summonedCards.ToList()));
vfxWithLoadingSequential.RegisterToLoadingVfx(BattleMgr.LoadCardResources(summonInfo.SummonedCardsList.overflowCards.ToList()));
this.OnGetoff.Call(summonInfo.SummonedCardsList.summonedCards.ToList(), summonInfo.SummonedCardsList.overflowCards.ToList(), skill);
vfxWithLoadingSequential.RegisterToMainVfx(StartSkillWhenChangeInplay(null, summonInfo.SummonedCardsList.summonedCards.ToList(), skillProcessor, isSummonCheck: false));
vehicleCard.GetOffCards.AddRange(summonInfo.SummonedCardsList.summonedCards);
BattlePlayerReadOnlyInfoPair playerInfoPair = new BattlePlayerReadOnlyInfoPair(this, _opponentBattlePlayer);
skillProcessor.Register(vehicleCard.Skills.CreateWhenGetOffInfo(skillProcessor, playerInfoPair), ignoreOwnerDeadCheck: true);
UpdateHandCardsPlayability();
return vfxWithLoadingSequential;
}
protected VfxBase SummonCardManagement(SummonInfo summonInfo, SkillProcessor skillProcessor, SkillBase skill)
{
VfxWithLoadingSequential vfxWithLoadingSequential = VfxWithLoadingSequential.Create();
SkillConditionCheckerOption skillConditionCheckerOption = new SkillConditionCheckerOption();
if (summonInfo.IsReanimate)
{
skillConditionCheckerOption.ReanimatedCards = ConvertToSkillInfoCollection(summonInfo.SummonedCardsList);
}
if (summonInfo.IsDeckSelfSummon)
{
skillConditionCheckerOption.DeckSelfSummonedCards = ConvertToSkillInfoCollection(summonInfo.SummonedCardsList);
}
foreach (BattleCardBase summonedCard in summonInfo.SummonedCardsList.summonedCards)
{
vfxWithLoadingSequential.RegisterVfxWithLoading(summonedCard.SkillPlayCard(summonInfo.IsPlayer, summonInfo.SummonType, skillProcessor, skill, isGetoff: false, summonInfo.IsReanimate));
}
vfxWithLoadingSequential.RegisterToLoadingVfx(BattleMgr.LoadCardResources(summonInfo.SummonedCardsList.summonedCards.ToList()));
SkillSummonedCards = new List<BattleCardBase>(summonInfo.SummonedCardsList.summonedCards);
SummonedCards = new List<BattleCardBase>(summonInfo.SummonedCardsList.ToList());
vfxWithLoadingSequential.RegisterToLoadingVfx(BattleMgr.LoadCardResources(summonInfo.SummonedCardsList.overflowCards.ToList()));
vfxWithLoadingSequential.RegisterToMainVfx(StartSkillWhenChangeInplay(null, summonInfo.SummonedCardsList.summonedCards.ToList(), skillProcessor, isSummonCheck: true, null, skillConditionCheckerOption));
for (int i = 0; i < SkillSummonedCards.Count; i++)
{
List<BattleCardBase> list = new List<BattleCardBase>();
for (int j = i + 1; j < SkillSummonedCards.Count; j++)
{
list.Add(SkillSummonedCards[j]);
}
StartSkillWhenSummonOther(SkillSummonedCards[i], skillProcessor, summonInfo.IsReanimate, list);
}
BattleCardBase[] array = summonInfo.SummonedCardsList.Where((BattleCardBase c) => c.IsInplay && c.IsUnit).ToArray();
for (int num = 0; num < array.Length; num++)
{
array[num].SelfBattlePlayer.AddRallyCount(1);
}
UpdateHandCardsPlayability();
return vfxWithLoadingSequential;
}
protected VfxBase DestroyCard(BattleCardBase destroyCard, SkillProcessor skillProcessor, bool isRandom, SkillBase skill)
{
bool flag = destroyCard.IsChantField && destroyCard.ChantCount <= 0;
if (destroyCard.SkillApplyInformation.IsIndestructible && destroyCard.IsDestroyedBySkill && !flag && !destroyCard.DeathTypeInfo.MysteriesDestroy && (!destroyCard.IsTribe(CardBasePrm.TribeType.WHITE_RITUAL) || destroyCard.SkillApplyInformation.WhiteRitualCount > 0 || (!(destroyCard is FieldBattleCard) && !(destroyCard is ChantFieldBattleCard))))
{
destroyCard.ResetFlagCardAsDestroyed();
if (!destroyCard.IsDead)
{
return NullVfx.GetInstance();
}
}
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
if (skillProcessor != null)
{
BattlePlayerReadOnlyInfoPair playerInfoPair = new BattlePlayerReadOnlyInfoPair(this, _opponentBattlePlayer);
if (ClassAndInPlayCardList.Any((BattleCardBase c) => c == destroyCard))
{
new SkillConditionCheckerOption().DestroyedCard = destroyCard;
TurnDestroyCards.Add(new TurnAndCard(IsSelfTurn ? Turn : BattleMgr.CurrentTurn, BattleMgr.BattlePlayer.IsSelfTurn, destroyCard, BattleMgr.IsTurnEnd));
GameLeftCards.Add(destroyCard);
GameTurnLeftCards.Add(new TurnAndCard(IsSelfTurn ? Turn : BattleMgr.CurrentTurn, BattleMgr.BattlePlayer.IsSelfTurn, destroyCard, BattleMgr.IsTurnEnd));
sequentialVfxPlayer.Register(destroyCard.RemoveFromInPlay());
sequentialVfxPlayer.Register(CardToCemetery(destroyCard, skill, CEMETERY_TYPE.NORMAL, isRandom));
SkillProcessor.ProcessInfo info = destroyCard.Skills.CreateWhenLeaveInfo(skillProcessor, playerInfoPair);
VfxWith<SkillProcessor.ProcessInfo> info2 = destroyCard.Skills.CreateWhenDestroyInfo(destroyCard, skillProcessor, playerInfoPair);
if (destroyCard.HasSkillWhenDestroy && !DestroyedWhenDestroyCards.Any((BattleCardBase x) => x.Index == destroyCard.Index))
{
DestroyedWhenDestroyCards.Add(destroyCard);
}
sequentialVfxPlayer.Register(destroyCard.RemoveFromInPlayAfter(skillProcessor));
sequentialVfxPlayer.Register(StartSkillWhenChangeInplay(null, null, skillProcessor));
skillProcessor.Register(info, ignoreOwnerDeadCheck: true);
skillProcessor.Register(info2.Value, ignoreOwnerDeadCheck: true);
destroyCard.OnDestroy += (BattleCardBase _card, SkillProcessor _skillProcessor) => info2.Vfx;
destroyCard.SetDestroyedBySkillList(skill);
StartSkillWhenDestroyOther(destroyCard, skillProcessor);
}
else if (HandCardList.Any((BattleCardBase c) => c == destroyCard))
{
skillProcessor.Register(destroyCard.Skills.CreateDisCardInfo(skillProcessor, playerInfoPair));
sequentialVfxPlayer.Register(CardToCemetery(destroyCard, skill));
}
return sequentialVfxPlayer;
}
return CardToCemetery(destroyCard, skill);
}
protected VfxBase BanishCard(BattleCardBase banishedCard, SkillProcessor skillProcessor, bool isRandom, SkillBase skill, bool isOpen)
{
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
new SkillConditionCheckerOption();
BattlePlayerReadOnlyInfoPair playerInfoPair = new BattlePlayerReadOnlyInfoPair(this, _opponentBattlePlayer);
if (InPlayCards.Any((BattleCardBase c) => c == banishedCard))
{
SkillProcessor.ProcessInfo info = banishedCard.Skills.CreateWhenLeaveInfo(skillProcessor, playerInfoPair);
SkillProcessor.ProcessInfo info2 = banishedCard.Skills.CreateWhenBanishInfo(banishedCard, skillProcessor, playerInfoPair);
skillProcessor.Register(info, ignoreOwnerDeadCheck: true);
skillProcessor.Register(info2, ignoreOwnerDeadCheck: true);
sequentialVfxPlayer.Register(banishedCard.RemoveFromInPlay());
sequentialVfxPlayer.Register(CardToBanishZone(banishedCard, skill, registerEvent: true, isRandom, isOpen));
sequentialVfxPlayer.Register(banishedCard.RemoveFromInPlayAfter(skillProcessor));
StartSkillWhenBanishOther(banishedCard, skillProcessor, isInplay: true);
}
else if (HandCardList.Any((BattleCardBase c) => c == banishedCard))
{
SkillProcessor.ProcessInfo info3 = banishedCard.Skills.CreateWhenBanishInfo(banishedCard, skillProcessor, playerInfoPair);
skillProcessor.Register(info3, ignoreOwnerDeadCheck: true);
sequentialVfxPlayer.Register(CardToBanishZone(banishedCard, skill, registerEvent: true, isRandom, isOpen));
StartSkillWhenBanishOther(banishedCard, skillProcessor, isInplay: false);
}
else if (DeckCardList.Any((BattleCardBase c) => c == banishedCard))
{
SkillProcessor.ProcessInfo info4 = banishedCard.Skills.CreateWhenBanishInfo(banishedCard, skillProcessor, playerInfoPair);
skillProcessor.Register(info4, ignoreOwnerDeadCheck: true);
sequentialVfxPlayer.Register(CardToBanishZone(banishedCard, skill, registerEvent: true, isRandom, isOpen));
if (!BattleManagerBase.IsForecast)
{
sequentialVfxPlayer.Register(new DeckChangeVfx(this));
sequentialVfxPlayer.Register(new DummyDeckRemoveCardVfx(IsPlayer, 1));
}
}
sequentialVfxPlayer.Register(StartSkillWhenChangeInplay(null, null, skillProcessor));
return sequentialVfxPlayer;
}
protected VfxBase ReturnCard(BattleCardBase targetCard, SkillProcessor skillProcessor, SkillBase skill)
{
BattlePlayerReadOnlyInfoPair playerInfoPair = new BattlePlayerReadOnlyInfoPair(this, _opponentBattlePlayer);
SkillConditionCheckerOption skillConditionCheckerOption = new SkillConditionCheckerOption();
List<BattleCardBase> list = new List<BattleCardBase>();
bool flag = HandCardList.Count < 9;
if (flag)
{
list.Add(targetCard);
targetCard.DrawTurn = ((targetCard.SelfBattlePlayer.IsSelfTurn && !BattleMgr.IsTurnEnd) ? targetCard.SelfBattlePlayer.Turn : (targetCard.SelfBattlePlayer.Turn + 1));
}
BattleCardBase battleCardBase = targetCard.VirtualClone(this, _opponentBattlePlayer);
GameLeftCards.Add(battleCardBase);
GameTurnLeftCards.Add(new TurnAndCard(IsSelfTurn ? Turn : BattleMgr.CurrentTurn, BattleMgr.BattlePlayer.IsSelfTurn, battleCardBase, BattleMgr.IsTurnEnd));
skillConditionCheckerOption.InHandCard = ConvertToSkillInfoCollection(list);
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
ParallelVfxPlayer parallelVfxPlayer = ParallelVfxPlayer.Create();
SequentialVfxPlayer sequentialVfxPlayer2 = SequentialVfxPlayer.Create();
List<IReadOnlyBattleCardInfo> list2 = new List<IReadOnlyBattleCardInfo>();
if (targetCard.SkillApplyInformation.IsSkillCantAtkAll)
{
list2.Add(targetCard);
}
SkillProcessor.ProcessInfo info = targetCard.Skills.CreateWhenLeaveInfo(skillProcessor, playerInfoPair);
skillProcessor.Register(info, ignoreOwnerDeadCheck: true);
SkillProcessor.ProcessInfo info2 = targetCard.Skills.CreateWhenReturnInfo(skillProcessor, playerInfoPair);
sequentialVfxPlayer2.Register(targetCard.ReturnCard(skillProcessor));
parallelVfxPlayer.Register(ReturnToHand(targetCard, skill));
sequentialVfxPlayer2.Register(targetCard.RemoveFromInPlayAfter(skillProcessor, isReturn: true));
parallelVfxPlayer.Register(sequentialVfxPlayer2);
this.OnAfterReturnCardEvent.Call(targetCard);
this.OnLeaveAfterEvent.Call(targetCard);
skillProcessor.Register(info2, ignoreOwnerDeadCheck: true);
sequentialVfxPlayer.Register(parallelVfxPlayer);
sequentialVfxPlayer.Register(StartSkillWhenChangeInplay(new List<BattleCardBase> { targetCard }, null, skillProcessor, isSummonCheck: true, flag ? ((Func<SkillBase, uint>)((SkillBase s) => s.OnWhenAddToHand)) : null, skillConditionCheckerOption));
StartSkillWhenReturnOther(targetCard, skillProcessor, list2);
return sequentialVfxPlayer;
}
public VfxBase UniteCard(BattleCardBase destroyCard, SkillProcessor skillProcessor, SkillBase skill)
{
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
new SkillConditionCheckerOption();
destroyCard.FlagCardAsDestroyedBySkill();
sequentialVfxPlayer.Register(CardToUniteZone(destroyCard, skill));
sequentialVfxPlayer.Register(StartSkillWhenChangeInplay(null, null, skillProcessor));
return sequentialVfxPlayer;
}
protected virtual VfxBase DisCard(BattleCardBase ownerCard, List<BattleCardBase> targetCards, SkillProcessor skillProcessor, SkillBase discardedSkill)
{
ParallelVfxPlayer parallelVfxPlayer = ParallelVfxPlayer.Create();
BattlePlayerReadOnlyInfoPair battlePlayerReadOnlyInfoPair = new BattlePlayerReadOnlyInfoPair(this, _opponentBattlePlayer);
BattlePlayerReadOnlyInfoPair battlePlayerReadOnlyInfoPair2 = new BattlePlayerReadOnlyInfoPair(_opponentBattlePlayer, this);
for (int i = 0; i < targetCards.Count; i++)
{
parallelVfxPlayer.Register(targetCards[i].DestroyInHand(skillProcessor));
targetCards[i].SetDiscardedSkill(discardedSkill);
}
List<BattleCardBase> cardsOrderBySkillActivation = SkillCollectionBase.GetCardsOrderBySkillActivation(this, _opponentBattlePlayer, isAll: false, containsHand: true, containsClass: true, containsInplay: true, containsDeck: false, (BattleCardBase card) => card != ownerCard && card.Skills.Any((SkillBase s) => s.OnDisCardOtherStart != 0));
for (int num = 0; num < cardsOrderBySkillActivation.Count; num++)
{
skillProcessor.Register(cardsOrderBySkillActivation[num].Skills.CreateDisCardOtherInfo(targetCards, cardsOrderBySkillActivation[num].IsPlayer, skillProcessor, (cardsOrderBySkillActivation[num].SelfBattlePlayer == this) ? battlePlayerReadOnlyInfoPair : battlePlayerReadOnlyInfoPair2));
}
return SequentialVfxPlayer.Create(parallelVfxPlayer);
}
protected virtual VfxBase DisCards(List<BattleCardBase> targetCards, SkillProcessor skillProcessor, SkillBase discardedSkill)
{
ParallelVfxPlayer parallelVfxPlayer = ParallelVfxPlayer.Create();
BattlePlayerReadOnlyInfoPair battlePlayerReadOnlyInfoPair = new BattlePlayerReadOnlyInfoPair(this, _opponentBattlePlayer);
BattlePlayerReadOnlyInfoPair battlePlayerReadOnlyInfoPair2 = new BattlePlayerReadOnlyInfoPair(_opponentBattlePlayer, this);
parallelVfxPlayer.Register(InstantVfx.Create(delegate
{
BurialRiteOrDiscardCardHandIndexList.Clear();
}));
for (int num = 0; num < targetCards.Count; num++)
{
parallelVfxPlayer.Register(targetCards[num].DestroyInHand(skillProcessor));
targetCards[num].SetDiscardedSkill(discardedSkill);
}
List<BattleCardBase> cardsOrderBySkillActivation = SkillCollectionBase.GetCardsOrderBySkillActivation(this, _opponentBattlePlayer, isAll: false, containsHand: true, containsClass: true, containsInplay: true, containsDeck: false, (BattleCardBase card) => !targetCards.Contains(card) && card.Skills.Any((SkillBase s) => s.OnDisCardOtherStart != 0));
for (int num2 = 0; num2 < cardsOrderBySkillActivation.Count; num2++)
{
skillProcessor.Register(cardsOrderBySkillActivation[num2].Skills.CreateDisCardOtherInfo(targetCards, cardsOrderBySkillActivation[num2].IsPlayer, skillProcessor, (cardsOrderBySkillActivation[num2].SelfBattlePlayer == this) ? battlePlayerReadOnlyInfoPair : battlePlayerReadOnlyInfoPair2));
}
return SequentialVfxPlayer.Create(parallelVfxPlayer);
}
protected virtual VfxBase ReturnToHand(BattleCardBase returnCard, SkillBase skill)
{
return FieldCardToHandCard(returnCard, skill);
}
public VfxBase StartBattleMainView(bool playEffect = true)
{
ParallelVfxPlayer parallelVfxPlayer = ParallelVfxPlayer.Create();
parallelVfxPlayer.Register(CreateUpdateClassInfoVfx(playEffect));
for (int i = 0; i < InHandCards.Count; i++)
{
parallelVfxPlayer.Register(InHandCards.ToList()[i].BattleCardView.ShowHandCardInfo());
}
return parallelVfxPlayer;
}
public virtual VfxBase TurnStart()
{
foreach (BattleCardBase handCard in HandCardList)
{
handCard.SetOnDraw(draw: true);
}
IsSelfTurn = true;
_opponentBattlePlayer.IsSelfTurn = false;
this.OnTurnStartStart.Call();
NowTurnEvol = true;
IsEpEvolveThisTurn = false;
TurnNecromanceCount = 0;
TurnPlayCards.Clear();
TurnDrawCards.Clear();
TurnDrawTokenCardsWithId.Clear();
TurnBurialRiteCards.Clear();
TurnFusionCards.Clear();
if (!IsGameFirst || Turn != 1)
{
IsAlreadyChoiceBraveInThisTurn = false;
}
_turnUsedEpCount = 0;
TurnStartLifeList.Add(new TurnAndIntValue(Class.Life, BattleMgr.CurrentTurn, BattleMgr.BattlePlayer.IsSelfTurn));
_opponentBattlePlayer.TurnStartLifeList.Add(new TurnAndIntValue(_opponentBattlePlayer.Class.Life, BattleMgr.CurrentTurn, BattleMgr.BattlePlayer.IsSelfTurn));
SkillProcessor skillProcessor = new SkillProcessor();
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
_ = PpTotal;
GameMgr.GetIns().GetDataMgr();
int num = 0;
IDetailPanelControl detailPanelControl = BattleMgr.DetailMgr.DetailPanelControl;
if (EvolveWaitTurnCount <= 0)
{
for (int i = 0; i < BonusConditionList.Count; i++)
{
if (BonusConditionList[i].GetAndReduceAddPpTurn())
{
BonusConditionList[i].UseUpAddPpTotalBonus();
if (detailPanelControl._card != null && detailPanelControl._card.IsClass && detailPanelControl._card.IsPlayer == IsPlayer)
{
detailPanelControl.UpdateBuffInfo(_class, BonusConditionList);
}
num += BonusConditionList[i].MyRotationBonus.IncreaseAddPptotalAmount;
}
}
}
int count = ((!Class.SkillApplyInformation.IsTurnStartFixedPP) ? (1 + num) : 0);
VfxBase vfx = AddPpTotal(count, isUpdatePp: true, skillProcessor);
sequentialVfxPlayer.Register(vfx);
BattleLogManager.GetInstance().AddLogTurn(IsPlayer);
BattleLogManager.GetInstance().BeginLogBlockTurnChangeReactive();
VfxBase[] allFuncCallResults = this.OnTurnStartBeforeDraw.GetAllFuncCallResults(skillProcessor);
foreach (VfxBase vfx2 in allFuncCallResults)
{
sequentialVfxPlayer.Register(vfx2);
}
BattleCardBase[] array = HandCardList.ToArray();
BattleCardBase[] array2 = _opponentBattlePlayer.HandCardList.ToArray();
BattleCardBase[] array3 = ClassAndInPlayCardList.ToArray();
BattleCardBase[] array4 = _opponentBattlePlayer.ClassAndInPlayCardList.ToArray();
BattleCardBase[] array5 = DeckSkillCardList.ToArray();
BattleCardBase[] array6 = _opponentBattlePlayer.DeckSkillCardList.ToArray();
ParallelVfxPlayer parallelVfxPlayer = ParallelVfxPlayer.Create();
BattleCardBase[] array7 = array;
for (int j = 0; j < array7.Length; j++)
{
VfxBase vfx3 = array7[j].TurnStart(skillProcessor);
parallelVfxPlayer.Register(vfx3);
}
array7 = array2;
for (int j = 0; j < array7.Length; j++)
{
VfxBase vfx4 = array7[j].OpponentTurnStart(skillProcessor);
parallelVfxPlayer.Register(vfx4);
}
array7 = array3;
for (int j = 0; j < array7.Length; j++)
{
VfxBase vfx5 = array7[j].TurnStart(skillProcessor);
parallelVfxPlayer.Register(vfx5);
}
array7 = array4;
for (int j = 0; j < array7.Length; j++)
{
VfxBase vfx6 = array7[j].OpponentTurnStart(skillProcessor);
parallelVfxPlayer.Register(vfx6);
}
array7 = array5;
for (int j = 0; j < array7.Length; j++)
{
VfxBase vfx7 = array7[j].TurnStart(skillProcessor);
parallelVfxPlayer.Register(vfx7);
}
array7 = array6;
for (int j = 0; j < array7.Length; j++)
{
VfxBase vfx8 = array7[j].OpponentTurnStart(skillProcessor);
parallelVfxPlayer.Register(vfx8);
}
BattleMgr.OperateMgr.CallOnUpdateAttackableEffect(array3.Where((BattleCardBase c) => c.Attackable).ToList(), array4.Where((BattleCardBase c) => c.Attackable).ToList());
sequentialVfxPlayer.Register(parallelVfxPlayer);
BattlePlayerPair battlePlayerPair = new BattlePlayerPair(this, _opponentBattlePlayer);
VfxBase vfx9 = skillProcessor.Process(battlePlayerPair);
sequentialVfxPlayer.Register(vfx9);
allFuncCallResults = OnTurnStartSkillAfter.GetAllFuncCallResults(skillProcessor);
foreach (VfxBase vfx10 in allFuncCallResults)
{
sequentialVfxPlayer.Register(vfx10);
}
if (IsGameFirst && Turn == 1)
{
for (int num2 = 0; num2 < HandCardList.Count(); num2++)
{
HandCardList[num2].Skills.CreateAndRegisterWhenChangeInplaySelfhandInfo(HandCardList, skillProcessor, battlePlayerPair);
}
BattlePlayerPair playerInfoPair = new BattlePlayerPair(_opponentBattlePlayer, this);
for (int num3 = 0; num3 < _opponentBattlePlayer.HandCardList.Count(); num3++)
{
_opponentBattlePlayer.HandCardList[num3].Skills.CreateAndRegisterWhenChangeInplaySelfhandInfo(_opponentBattlePlayer.HandCardList, skillProcessor, playerInfoPair);
}
}
sequentialVfxPlayer.Register(TurnStartDraw(skillProcessor));
sequentialVfxPlayer.Register(skillProcessor.Process(battlePlayerPair));
BattleUIContainer battleUIContainer = BattleManagerBase.GetIns().BattleUIContainer;
sequentialVfxPlayer.Register(InstantVfx.Create(delegate
{
battleUIContainer.EnableMenu();
}));
sequentialVfxPlayer.Register(InstantVfx.Create(delegate
{
BattleMgr.BattlePlayer.TurnStartEffectEnd();
}));
BattleLogManager.GetInstance().EndLogBlockTurnChangeReactive();
if (!BattleMgr.IsBattleEnd)
{
if (GameMgr.GetIns().IsNetworkBattle && IsPlayer)
{
NetworkBattleManagerBase networkBattleManagerBase = BattleManagerBase.GetIns() as NetworkBattleManagerBase;
if (networkBattleManagerBase.turnEndTimeController != null)
{
networkBattleManagerBase.turnEndTimeController.AddTurnEndTimerLog("Player SetActiveVFX");
}
}
ParallelVfxPlayer parallelVfxPlayer2 = ParallelVfxPlayer.Create();
parallelVfxPlayer2.Register(InstantVfx.Create(SetActive));
sequentialVfxPlayer.Register(parallelVfxPlayer2);
}
VfxBase allFuncVfxResults = this.OnTurnStartAfterDraw.GetAllFuncVfxResults();
sequentialVfxPlayer.Register(allFuncVfxResults);
sequentialVfxPlayer.Register(InstantVfx.Create(delegate
{
foreach (BattleCardBase handCard2 in HandCardList)
{
handCard2.SetOnDraw(draw: false);
}
UpdateHandCardsPlayability();
}));
sequentialVfxPlayer.Register(UpdateHandCardsCost());
sequentialVfxPlayer.Register(UpdateInPlayBattleCardIconLabel());
sequentialVfxPlayer.Register(this.OnTurnStartFinish.GetAllFuncVfxResults());
OnTurnStartComplete.Call();
return sequentialVfxPlayer;
}
public abstract VfxBase StartTurnControl(string log = "");
public SequentialVfxPlayer TurnEvolveControl(GameObject eqIcon)
{
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
bool firstEvolve = false;
if (EvolveWaitTurnCount > 0)
{
if (EvolveWaitTurnCount == 1)
{
firstEvolve = true;
}
EvolveWaitTurnCount--;
}
if (BattleMgr.IsRecovery || BattleMgr.IsPuzzleMgr)
{
sequentialVfxPlayer.Register(m_vfxCreator.CreateUpdateEp(CurrentEpCount, EvolveWaitTurnCount));
if (NowTurnEvol && CurrentEpCount > 0 && EvolveWaitTurnCount <= 0)
{
sequentialVfxPlayer.Register(new TurnStartEvolveVfx(eqIcon, firstEvolve));
}
}
else
{
sequentialVfxPlayer.Register(BattleMgr.LoadTurnPanelResource());
sequentialVfxPlayer.Register(m_vfxCreator.CreateUpdateEp(CurrentEpCount, EvolveWaitTurnCount));
sequentialVfxPlayer.Register(InstantVfx.Create(delegate
{
GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_YOURTURN);
BattleMgr.TurnPanelControl.StartUI(Turn, EvolveWaitTurnCount, IsPlayer);
if (GameMgr.GetIns().IsWatchBattle || GameMgr.GetIns().IsReplayBattle)
{
BattleView.TurnEndButtonUI.GameObject.SetActive(value: true);
BattleView.TurnEndButtonUI.ChangeButtonView(IsPlayer);
}
}));
if (NowTurnEvol && CurrentEpCount > 0 && EvolveWaitTurnCount <= 0)
{
sequentialVfxPlayer.Register(new TurnStartEvolveVfx(eqIcon, firstEvolve));
}
sequentialVfxPlayer.Register(WaitVfx.Create(1.6f));
}
return sequentialVfxPlayer;
}
public virtual VfxBase TurnStartDraw(SkillProcessor skillProcessor)
{
DeckCardList.Sort((BattleCardBase a, BattleCardBase b) => a.Index - b.Index);
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
if (!Class.IsDead && !_opponentBattlePlayer.Class.IsDead && !BattleManagerBase.GetIns().IsPuzzleMgr)
{
sequentialVfxPlayer.Register(TurnStartDrawCard(skillProcessor));
}
return sequentialVfxPlayer;
}
protected abstract VfxBase TurnStartDrawCard(SkillProcessor skillProcessor);
protected abstract void SetActive();
public abstract BattlePlayerBase CreateVirtualPlayer();
public VfxBase AddPpTotal(int count, bool isUpdatePp, SkillProcessor skillProcessor, BattleCardBase ownerCard = null, bool bySkill = false)
{
string text = "";
bool flag = false;
if (Turn <= 1 && !IsPlayer)
{
flag = true;
}
if (flag)
{
text = text + "AddPpTotal " + count + "isUpdatePp " + isUpdatePp + "NotPPcounter " + Class.SkillApplyInformation.NotDecreasePPCounter + "IsTurnStartFixedPP " + Class.SkillApplyInformation.IsTurnStartFixedPP + ":" + StackTraceUtility.ExtractStackTrace();
}
if (count < 0 && Class.SkillApplyInformation.NotDecreasePPCounter > 0)
{
if (flag)
{
LocalLog.AccumulateLastTraceLog(text);
}
return NullVfx.GetInstance();
}
new SkillConditionCheckerOption();
ParallelVfxPlayer parallelVfxPlayer = ParallelVfxPlayer.Create();
int ppTotal = PpTotal;
PpTotal += count;
if (PpTotal > 10)
{
PpTotal = 10;
}
else if (PpTotal < 0)
{
PpTotal = 0;
}
int num = PpTotal;
if (flag)
{
text = text + "DecreaseList " + Class.SkillApplyInformation.DecreaseTurnStartPPList.Count;
}
for (int i = 0; i < Class.SkillApplyInformation.DecreaseTurnStartPPList.Count; i++)
{
if (flag)
{
text = text + "Decrease:" + Class.SkillApplyInformation.DecreaseTurnStartPPList[i];
}
num -= Class.SkillApplyInformation.DecreaseTurnStartPPList[i];
if (num < 0)
{
num = 0;
}
}
Pp = (isUpdatePp ? num : Math.Min(Pp, PpTotal));
if (flag)
{
text = text + "nowPP " + Pp;
LocalLog.AccumulateLastTraceLog(text);
}
parallelVfxPlayer.Register(new PpChangeVfx(this));
this.OnChangePP.Call(PpTotal - ppTotal);
this.OnAddPpTotal.Call(PpTotal - ppTotal, Pp, IsPlayer, ownerCard, bySkill);
if (skillProcessor != null)
{
StartSkillWhenChangePPTotal(skillProcessor);
}
return parallelVfxPlayer;
}
public VfxBase SetPpTotal(int pp, bool isUpdatePp, SkillProcessor skillProcessor)
{
return AddPpTotal(pp - PpTotal, isUpdatePp, skillProcessor);
}
public SkillProcessor GetTurnEndSkillProcess()
{
SkillProcessor skillProcessor = new SkillProcessor();
List<BattleCardBase> list = new List<BattleCardBase>();
list.AddRange(HandCardList);
list.AddRange(_opponentBattlePlayer.HandCardList);
list.AddRange(ClassAndInPlayCardList);
list.AddRange(_opponentBattlePlayer.ClassAndInPlayCardList);
list.AddRange(DeckSkillCardList);
list.AddRange(_opponentBattlePlayer.DeckSkillCardList);
int num = list.Count();
for (int i = 0; i < num; i++)
{
list[i].TurnEndSkillProcess(skillProcessor);
}
return skillProcessor;
}
public virtual VfxBase TurnEnd()
{
BattlePlayerPair battlePlayerPair = new BattlePlayerPair(this, _opponentBattlePlayer);
SequentialVfxPlayer turnEndVfx = SequentialVfxPlayer.Create();
if (this.OnTurnEndStart != null)
{
this.OnTurnEndStart.Call();
}
BattleLogManager.GetInstance().BeginLogBlockTurnChangeReactive();
turnEndVfx.Register(BattleView.SetIsNowTurnEnd(flg: true));
SkillProcessor turnEndSkillProcess = GetTurnEndSkillProcess();
VfxBase vfx = turnEndSkillProcess.Process(battlePlayerPair);
turnEndVfx.Register(vfx);
List<BattleCardBase> list = new List<BattleCardBase>();
list.AddRange(ClassAndInPlayCardList);
list.AddRange(_opponentBattlePlayer.ClassAndInPlayCardList);
for (int i = 0; i < list.Count; i++)
{
list[i].CheckPreviousTurnAttacked();
}
ParallelVfxPlayer parallelVfxPlayer = ParallelVfxPlayer.Create();
foreach (BattleCardBase inPlayCard in InPlayCards)
{
parallelVfxPlayer.Register(inPlayCard.TurnEndPostProcess());
}
turnEndVfx.Register(parallelVfxPlayer);
VfxBase[] allFuncCallResults = this.OnTurnEnd.GetAllFuncCallResults(turnEndSkillProcess);
foreach (VfxBase vfx2 in allFuncCallResults)
{
turnEndVfx.Register(vfx2);
}
allFuncCallResults = OnTurnEndSkillAfter.GetAllFuncCallResults(turnEndSkillProcess);
foreach (VfxBase vfx3 in allFuncCallResults)
{
turnEndVfx.Register(vfx3);
}
turnEndVfx.Register(turnEndSkillProcess.Process(battlePlayerPair));
turnEndVfx.Register(UpdateInPlayBattleCardIconLabel());
turnEndVfx.Register(InstantVfx.Create(delegate
{
if (HandCardList.Count <= 0)
{
turnEndVfx.Register(BattleView.HandUnfocus());
}
}));
TurnPlayCards.Clear();
TurnDrawCards.Clear();
TurnDrawTokenCardsWithId.Clear();
TurnBurialRiteCards.Clear();
TurnFusionCards.Clear();
TurnNecromanceCount = 0;
_turnUsedEpCount = 0;
TurnResonanceStartCount = 0;
_opponentBattlePlayer.TurnResonanceStartCount = 0;
BattleLogManager.GetInstance().EndLogBlockTurnChangeReactive();
turnEndVfx.Register(BattleMgr.JudgeBattleResult());
if (!BattleMgr.IsRecovery)
{
turnEndVfx.Register(InstantVfx.Create(delegate
{
int count = ClassAndInPlayCardList.Count;
for (int k = 0; k < count; k++)
{
BattleCardBase card = ClassAndInPlayCardList[k];
if (!card.BattleCardView.GameObject.activeSelf)
{
turnEndVfx.Register(InstantVfx.Create(delegate
{
card.BattleCardView.GameObject.SetActive(value: true);
if (card.IsInplay)
{
card.SetOnDraw(draw: false);
}
}));
}
}
}));
}
OnPreTurnEndComplete.Call();
if (!Class.IsDead && !_opponentBattlePlayer.Class.IsDead)
{
IsSelfTurn = false;
VfxBase allFuncVfxResults = this.OnTurnEndFinish.GetAllFuncVfxResults();
turnEndVfx.Register(allFuncVfxResults);
}
OnPostTurnEndComplete.Call();
turnEndVfx.Register(BattleView.SetIsNowTurnEnd(flg: false));
LocalLog.RecordTurnEndIfLoadErrorOccured();
return turnEndVfx;
}
public void DecreasesExtraTurnCount()
{
extraTurnCount = Math.Max(0, extraTurnCount - 1);
}
public void Clear()
{
ClearSpineObject();
ClearClassAndMainPlace();
ClearBattleCount();
}
protected void ClearSpineObject()
{
if (Class is ClassBattleCardBase classBattleCardBase)
{
classBattleCardBase.ClearSpineObject();
}
}
public void ClearClassAndMainPlace()
{
HandCardList.Clear();
DeckCardList.Clear();
BattleStartDeckCardList.Clear();
DeckSkillCardList.Clear();
ClassAndInPlayCardList.Clear();
}
public void ClearBattleCount()
{
CemeteryList.Clear();
PredictionCemeteryRandomCards.Clear();
PredictionDamageRandomCards.Clear();
PredictionBanishRandomCards.Clear();
BanishList.Clear();
NecromanceZoneList.Clear();
UniteList.Clear();
GetOnList.Clear();
BlackHole.Clear();
ChoiceBraveCardList.Clear();
ReturnList.Clear();
HealingCards.Clear();
LastTargetCardsList.Clear();
SkillSummonedCards.Clear();
SummonedCards.Clear();
EvolvedCards.Clear();
DestroyedWhenDestroyCards.Clear();
InHandCards.Clear();
SkillDiscards.Clear();
SkillBanishCards.Clear();
DrewSkillCard = null;
TurnPlayCards.Clear();
TurnDrawCards.Clear();
TurnDrawTokenCardsWithId.Clear();
GamePlayCards.Clear();
GameTurnPlayCards.Clear();
GameEnhancePlayCards.Clear();
GameCrystallizedPlayCards.Clear();
OkSkillInProcess.Clear();
TurnDestroyCards.Clear();
AddToDeckCardList.Clear();
GameSummonCards.Clear();
GameSummonMomentTribe.Clear();
GamePlayMomentTribe.Clear();
GamePlayMomentSpellChargeCards.Clear();
GameUpdateDeckMomentTribe.Clear();
GameDrawCards.Clear();
GameDrawTokenCards.Clear();
GameAddUpdateDeckCards.Clear();
GameQuickAttackCards.Clear();
TurnBurialRiteCards.Clear();
GameReanimatedCards.Clear();
TurnWhenHealingCount.Clear();
GameLeftCards.Clear();
GameTurnLeftCards.Clear();
GameReturnedCards.Clear();
GameSuperSkyboundArtCards.Clear();
TurnPlayCardCountInfo.Clear();
TurnFusionCountInfo.Clear();
TurnNecromanceCount = 0;
GameNecromanceCount = 0;
GameUsedPpCount = 0;
RallyCount = 0;
DeckBanishCount = 0;
GameResonanceStartCount = 0;
TurnResonanceStartCount = 0;
GameUsedWhiteRitualCount = 0;
LastInplayWhiteRitualStack = 0;
_turnUsedEpCount = 0;
GameSkillReturnCardCountList.Clear();
GameSkillDiscardCountList.Clear();
GameSkillBuffCountList.Clear();
GameSkillMetamorphoseCountList.Clear();
GameSkillDiscardCount = 0;
DiscardedCardList.Clear();
FusionIngredientList.Clear();
FusionIngredientAndDiscardedCardList.Clear();
ReservedCardList.Clear();
TurnEvolveCardCountInfo.Clear();
GameInplayMetamorphoseCards.Clear();
GameBurialRiteCards.Clear();
TurnStartLifeList.Clear();
TurnFusionCards.Clear();
}
public BattleCardBase FindCardFromGameObject(GameObject cardObject)
{
return AllCards.FirstOrDefault((BattleCardBase s) => s.BattleCardView.GameObject == cardObject);
}
protected void AddInplayCard(BattleCardBase card, bool isGetoff = false, bool isReanimate = false)
{
ClassAndInPlayCardList.Add(card);
if (!card.IsClass && !isGetoff)
{
GameSummonCards.Add(new TurnAndCard(IsSelfTurn ? Turn : BattleMgr.CurrentTurn, BattleMgr.BattlePlayer.IsSelfTurn, card, BattleMgr.IsTurnEnd));
GameSummonMomentTribe.Add(new CardAndTribe(card, card.Tribe));
if (isReanimate)
{
GameReanimatedCards.Add(new TurnAndCard(IsSelfTurn ? Turn : BattleMgr.CurrentTurn, BattleMgr.BattlePlayer.IsSelfTurn, card, BattleMgr.IsTurnEnd));
}
}
}
public void AddRallyCount(int addCount)
{
RallyCount += addCount;
}
public VfxBase PickCard(BattleCardBase unit, SkillBase skill, SkillBaseSummon.SUMMON_TYPE summonType = SkillBaseSummon.SUMMON_TYPE.HAND, bool isGetoff = false, bool isReanimate = false)
{
this.OnPickCard.Call(unit);
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
switch (summonType)
{
case SkillBaseSummon.SUMMON_TYPE.HAND:
HandCardToField(unit, skill);
break;
case SkillBaseSummon.SUMMON_TYPE.DECK:
DeckCardToField(unit, skill);
sequentialVfxPlayer.Register(new DeckChangeVfx(this));
sequentialVfxPlayer.Register(new DummyDeckRemoveCardVfx(IsPlayer, 1));
break;
case SkillBaseSummon.SUMMON_TYPE.TOKEN:
TokenToField(unit, skill, isGetoff, isReanimate);
break;
case SkillBaseSummon.SUMMON_TYPE.DESTROYED:
DestroyedToField(unit, skill);
break;
}
this.OnAfterPickCard.Call();
return sequentialVfxPlayer;
}
public virtual void HandCardToField(BattleCardBase targetCard, SkillBase skill = null)
{
BattleCardBase battleCardBase = HandCardList.SingleOrDefault((BattleCardBase c) => c == targetCard);
if (battleCardBase == null)
{
throw new Exception("Target card was not found in hand cards.");
}
this.OnAddPlayCardEvent.Call(battleCardBase, arg2: false, skill);
AddInplayCard(battleCardBase);
HandCardList.Remove(battleCardBase);
CallSkill((IBattlePlayerSkill s) => s.StopBattleHandCard, battleCardBase);
this.OnAddPlayCardAfterEvent.Call();
this.OnSummonAfterEvent.Call(battleCardBase);
}
private bool TokenToField(BattleCardBase targetCard, SkillBase skill, bool isGetoff = false, bool isReanimate = false)
{
if (InPlayCards.Count() < 6)
{
this.OnAddPlayCardEvent.Call(targetCard, isGetoff, skill);
AddInplayCard(targetCard, isGetoff, isReanimate);
this.OnSummonAfterEvent.Call(targetCard);
return true;
}
return false;
}
public bool CemeteryConsumption(int num, BattleCardBase necromanceCard, SkillProcessor skillprocessor, bool isFusion)
{
if (CemeteryList.Count < num)
{
return false;
}
if (num == -1)
{
num = 0;
}
for (int i = 0; i < num; i++)
{
BattleCardBase item = CemeteryList.First();
NecromanceZoneList.Add(item);
CemeteryList.Remove(item);
}
SuccessNecromance(necromanceCard, skillprocessor, num, isFusion);
return true;
}
public void SuccessNecromance(BattleCardBase necromanceCard, SkillProcessor skillprocessor, int necromanceCount, bool isFusion)
{
int turnNecromanceCount = TurnNecromanceCount + 1;
TurnNecromanceCount = turnNecromanceCount;
GameNecromanceCount += necromanceCount;
this.OnNecromance.Call(necromanceCard, skillprocessor, necromanceCount, isFusion);
}
public VfxBase GainCemetery(int gainCount)
{
if (gainCount > CemeteryList.Count())
{
gainCount = CemeteryList.Count();
}
for (int i = 0; i < gainCount; i++)
{
BattleCardBase item = CemeteryList.First();
NecromanceZoneList.Add(item);
CemeteryList.Remove(item);
}
return this.OnAddCemeteryAfterEvent.GetAllFuncVfxResults();
}
protected VfxBase FieldCardToHandCard(BattleCardBase targetCard, SkillBase skill)
{
BattleCardBase battleCardBase = ClassAndInPlayCardList.Single((BattleCardBase c) => c == targetCard);
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
sequentialVfxPlayer.Register(battleCardBase.RemoveFromInPlay());
if (HandCardList.Count >= 9)
{
VfxBase vfx = CardToCemetery(battleCardBase, skill, CEMETERY_TYPE.FIELD_RETURN_HAND_OVER);
sequentialVfxPlayer.Register(vfx);
return sequentialVfxPlayer;
}
ClassAndInPlayCardList.Remove(battleCardBase);
HandCardAddList(battleCardBase, NetworkBattleDefine.NetworkCardPlaceState.Field, skill);
return sequentialVfxPlayer;
}
protected void HandCardAddList(BattleCardBase targetCard, NetworkBattleDefine.NetworkCardPlaceState fromState, SkillBase skill, bool isOpen = false)
{
InHandCards.Add(targetCard);
this.OnAddHandCardEvent.Call(targetCard, fromState, isOpen, skill);
HandCardList.Add(targetCard);
CallSkill((IBattlePlayerSkill s) => s.StartBattleHandCard, targetCard);
this.OnAddHandCardAfterEvent.Call();
}
public VfxBase CardToCemetery(BattleCardBase targetCard, SkillBase skill, CEMETERY_TYPE cemeteryType = CEMETERY_TYPE.NORMAL, bool wasRandom = false)
{
if (CemeteryList.Any((BattleCardBase c) => c == targetCard))
{
return NullVfx.GetInstance();
}
BattleCardBase battleCardBase = ClassAndInPlayCardList.SingleOrDefault((BattleCardBase c) => c == targetCard);
BattleCardBase battleCardBase2 = HandCardList.SingleOrDefault((BattleCardBase c) => c == targetCard);
BattleCardBase battleCardBase3 = DeckCardList.SingleOrDefault((BattleCardBase c) => c == targetCard);
if (battleCardBase == null && battleCardBase2 == null && battleCardBase3 == null)
{
return NullVfx.GetInstance();
}
this.OnAddCemeteryEvent.Call(targetCard, cemeteryType, arg3: false, skill);
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
BattleCardBase battleCardBase4 = null;
if (battleCardBase != null)
{
ClassAndInPlayCardList.Remove(battleCardBase);
battleCardBase4 = battleCardBase;
if (battleCardBase.IsUnit && cemeteryType != CEMETERY_TYPE.FIELD_RETURN_HAND_OVER && !BattleMgr.IsVirtualBattle)
{
BattleLogManager.GetInstance().AddLogDestFollower(BattleLogWindow.BattleLogType.Destruction, battleCardBase);
}
}
else
{
battleCardBase4 = ClassAndInPlayCardList.SingleOrDefault((BattleCardBase c) => c == targetCard);
}
if (battleCardBase4 == null && battleCardBase2 != null)
{
HandCardList.Remove(battleCardBase2);
CallSkill((IBattlePlayerSkill s) => s.StopBattleHandCard, battleCardBase2);
battleCardBase4 = battleCardBase2;
}
if (battleCardBase4 == null && battleCardBase3 != null)
{
DeckCardList.Remove(battleCardBase3);
sequentialVfxPlayer.Register(CreateUpdateDeckCountLabelVfx());
battleCardBase4 = battleCardBase3;
}
VfxBase vfxBase = NullVfx.GetInstance();
if (battleCardBase4 != null)
{
CemeteryList.Add(battleCardBase4);
if (!battleCardBase4.IsClass)
{
vfxBase = battleCardBase4.UnloadResource();
sequentialVfxPlayer.Register(this.OnAddCemeteryAfterEvent.GetAllFuncVfxResults());
this.OnLeaveAfterEvent.Call(battleCardBase4);
}
if (wasRandom)
{
PredictionCemeteryRandomCards.Add(battleCardBase4);
}
}
return SequentialVfxPlayer.Create(vfxBase, sequentialVfxPlayer);
}
public VfxBase CardToVehicleZone(BattleCardBase targetCard, SkillBase skill)
{
if (CemeteryList.Any((BattleCardBase c) => c == targetCard))
{
return NullVfx.GetInstance();
}
if (!ClassAndInPlayCardList.Any((BattleCardBase c) => c == targetCard))
{
return NullVfx.GetInstance();
}
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
this.OnGeton.Call(targetCard, skill);
ClassAndInPlayCardList.Remove(targetCard);
GetOnList.Add(targetCard);
sequentialVfxPlayer.Register(targetCard.UnloadResource());
return sequentialVfxPlayer;
}
public VfxBase DummyCardToCemetery(BattleCardBase targetCard, SkillBase skill = null)
{
this.OnAddCemeteryEvent.Call(targetCard, CEMETERY_TYPE.NORMAL, arg3: false, skill);
CemeteryList.Add(targetCard);
return this.OnAddCemeteryAfterEvent.GetAllFuncVfxResults();
}
public VfxBase ClearDestroyedAndDiscardedCardList(SkillBase skill)
{
ParallelVfxPlayer parallelVfxPlayer = ParallelVfxPlayer.Create();
int count = CemeteryList.Count;
this.OnAddBlackHole.Call(CemeteryList, skill);
this.OnAddBlackHole.Call(NecromanceZoneList, skill);
BlackHole.AddRange(CemeteryList);
BlackHole.AddRange(NecromanceZoneList);
CemeteryList.Clear();
NecromanceZoneList.Clear();
DestroyedWhenDestroyCards.Clear();
for (int i = 0; i < DiscardedCardList.Count; i++)
{
FusionIngredientAndDiscardedCardList.Remove(DiscardedCardList[i]);
}
DiscardedCardList.Clear();
for (int j = 0; j < count; j++)
{
parallelVfxPlayer.Register(DummyCardToCemetery(CardCreatorBase.GetDummyInstance(), skill));
}
return parallelVfxPlayer;
}
public VfxBase RemoveSpellCardFromHand(BattleCardBase targetSpellCard)
{
if (targetSpellCard.IsChoiceBraveSkillCard)
{
return NullVfx.GetInstance();
}
BattleCardBase battleCardBase = HandCardList.SingleOrDefault((BattleCardBase c) => c == targetSpellCard);
if (battleCardBase == null)
{
throw new Exception("Target card was not found in hand cards.");
}
this.OnSpellPlayEvent.Call(battleCardBase);
HandCardList.Remove(battleCardBase);
return NullVfx.GetInstance();
}
public VfxBase AddSpellCardToCemetery(BattleCardBase targetSpellCard)
{
if (CemeteryList.Any((BattleCardBase c) => c == targetSpellCard))
{
return NullVfx.GetInstance();
}
if (!targetSpellCard.IsChoiceBraveSkillCard)
{
CemeteryList.Add(targetSpellCard);
}
else
{
ChoiceBraveCardList.Add(targetSpellCard);
}
BattleMgr.VfxMgr.RegisterImmediateVfx(this.OnAddCemeteryAfterEvent.GetAllFuncVfxResults());
return targetSpellCard.UnloadResource();
}
public VfxBase CardToBanishZone(BattleCardBase targetCard, SkillBase skill, bool registerEvent = true, bool wasRandom = false, bool isOpen = false)
{
targetCard.DeathTypeInfo.BanishDestroy = true;
if (BanishList.Any((BattleCardBase c) => c == targetCard))
{
return NullVfx.GetInstance();
}
if (registerEvent)
{
bool arg = isOpen || (skill is Skill_banish && skill.OnSelfTurnEndStart != 0 && skill.ConditionFilterCollection.VariableCompareFilter.Any((SkillVariableComareFilter f) => f.Text.Contains("hand_self")));
this.OnAddBanishEvent.Call(targetCard, skill, arg);
}
BattleCardBase battleCardBase = null;
if (ClassAndInPlayCardList.SingleOrDefault((BattleCardBase c) => c == targetCard) != null)
{
battleCardBase = ClassAndInPlayCardList.SingleOrDefault((BattleCardBase c) => c == targetCard);
ClassAndInPlayCardList.Remove(ClassAndInPlayCardList.SingleOrDefault((BattleCardBase c) => c == targetCard));
BattleCardBase battleCardBase2 = battleCardBase.VirtualClone(this, _opponentBattlePlayer);
GameLeftCards.Add(battleCardBase2);
GameTurnLeftCards.Add(new TurnAndCard(IsSelfTurn ? Turn : BattleMgr.CurrentTurn, BattleMgr.BattlePlayer.IsSelfTurn, battleCardBase2, BattleMgr.IsTurnEnd));
}
else if (HandCardList.SingleOrDefault((BattleCardBase c) => c == targetCard) != null)
{
battleCardBase = HandCardList.SingleOrDefault((BattleCardBase c) => c == targetCard);
HandCardList.Remove(battleCardBase);
CallSkill((IBattlePlayerSkill s) => s.StopBattleHandCard, battleCardBase);
}
else if (DeckCardList.SingleOrDefault((BattleCardBase c) => c == targetCard) != null)
{
battleCardBase = DeckCardList.SingleOrDefault((BattleCardBase c) => c == targetCard);
if (battleCardBase == null)
{
throw new Exception("Target card was not found in either field, hand or deck.");
}
DeckCardList.Remove(battleCardBase);
battleCardBase.SelfBattlePlayer.DeckBanishCount++;
}
if (battleCardBase == null)
{
return NullVfx.GetInstance();
}
BanishList.Add(battleCardBase);
SkillBanishCards.Add(battleCardBase);
if (wasRandom)
{
PredictionBanishRandomCards.Add(battleCardBase);
}
this.OnAddBanishAfterEvent.Call(targetCard);
this.OnLeaveAfterEvent.Call(targetCard);
return battleCardBase.UnloadResource();
}
public VfxBase CardToUniteZone(BattleCardBase targetCard, SkillBase skill)
{
targetCard.DeathTypeInfo.BanishDestroy = true;
if (UniteList.Any((BattleCardBase c) => c == targetCard))
{
return NullVfx.GetInstance();
}
this.OnAddUniteEvent.Call(targetCard, skill);
ClassAndInPlayCardList.Remove(targetCard);
UniteList.Add(targetCard);
this.OnAddUniteAfterEvent.Call(targetCard);
this.OnLeaveAfterEvent.Call(targetCard);
return targetCard.UnloadResource();
}
private void DeckCardToField(BattleCardBase targetCard, SkillBase skill)
{
BattleCardBase battleCardBase = DeckCardList.SingleOrDefault((BattleCardBase c) => c == targetCard);
if (battleCardBase == null)
{
throw new Exception("Target card is not found from deck cards.");
}
this.OnAddPlayCardEvent.Call(battleCardBase, arg2: false, skill);
AddInplayCard(battleCardBase);
DeckCardList.Remove(battleCardBase);
this.OnSummonAfterEvent.Call(battleCardBase);
}
private void DestroyedToField(BattleCardBase targetCard, SkillBase skill)
{
BattleCardBase battleCardBase = null;
battleCardBase = CemeteryList.SingleOrDefault((BattleCardBase c) => c == targetCard);
if (battleCardBase == null)
{
battleCardBase = NecromanceZoneList.SingleOrDefault((BattleCardBase c) => c == targetCard);
}
if (battleCardBase == null)
{
throw new Exception("Target card is not found from destroyed cards.");
}
this.OnAddPlayCardEvent.Call(battleCardBase, arg2: false, skill);
AddInplayCard(battleCardBase);
CemeteryList.Remove(battleCardBase);
NecromanceZoneList.Remove(battleCardBase);
this.OnSummonAfterEvent.Call(battleCardBase);
}
public virtual VfxBase CardDrawVfx(IEnumerable<BattleCardBase> DrawList, bool skipShuffle = false, bool isOpenDrawSkill = false)
{
return NullVfx.GetInstance();
}
private VfxBase DrawCard(BattleCardBase targetCard, SkillBase skill, bool isOpen = false, bool isToken = false, bool isReservation = false)
{
bool flag = false;
if (!isToken && DeckCardList.SingleOrDefault((BattleCardBase c) => c == targetCard) != null)
{
DeckCardList.Remove(targetCard);
if (!BattleMgr.IsVirtualBattle)
{
flag = true;
StatusPanelControl.SetDeck(DeckCardList.Count);
}
}
if (HandCardList.Count >= 9)
{
return NullVfx.GetInstance();
}
if (isToken)
{
HandCardAddList(targetCard, isReservation ? NetworkBattleDefine.NetworkCardPlaceState.Reservation : NetworkBattleDefine.NetworkCardPlaceState.None, skill, isOpen);
return CreateUpdateDeckCountLabelVfx();
}
targetCard.ResetCardParameterInHand();
HandCardAddList(targetCard, NetworkBattleDefine.NetworkCardPlaceState.Deck, skill, isOpen);
ParallelVfxPlayer parallelVfxPlayer = ParallelVfxPlayer.Create();
if (DeckCardList.SingleOrDefault((BattleCardBase c) => c == targetCard) != null)
{
DeckCardList.Remove(targetCard);
parallelVfxPlayer.Register(InstantVfx.Create(delegate
{
StatusPanelControl.SetDeck(DeckCardList.Count);
}));
}
else if (NecromanceZoneList.SingleOrDefault((BattleCardBase c) => c == targetCard) != null)
{
NecromanceZoneList.Remove(targetCard);
parallelVfxPlayer.Register(InstantVfx.Create(delegate
{
targetCard.BattleCardView.ResetCardView(targetCard.BaseParameter);
}));
}
else if (CemeteryList.SingleOrDefault((BattleCardBase c) => c == targetCard) != null)
{
CemeteryList.Remove(targetCard);
parallelVfxPlayer.Register(InstantVfx.Create(delegate
{
targetCard.BattleCardView.ResetCardView(targetCard.BaseParameter);
}));
}
if (flag)
{
return parallelVfxPlayer;
}
return SequentialVfxPlayer.Create(parallelVfxPlayer, CreateUpdateDeckCountLabelVfx());
}
public virtual VfxBase CreateUpdateDeckCountLabelVfx()
{
return InstantVfx.Create(delegate
{
StatusPanelControl.SetDeck(DeckCardList.Count);
});
}
protected virtual VfxBase CreateUpdateClassInfoVfx(bool playEffect)
{
ParallelVfxPlayer parallelVfxPlayer = ParallelVfxPlayer.Create();
parallelVfxPlayer.Register(InstantVfx.Create(delegate
{
StatusPanelControl.SetHandCount(HandCardList.Count);
}));
parallelVfxPlayer.Register(InstantVfx.Create(delegate
{
ClassInformationUIController.ShowInfomation(playEffect);
}));
return parallelVfxPlayer;
}
private void EvolveProcess(BattleCardBase card, bool isSkill)
{
if (!CheckNotConsumeEpCard(card))
{
GainCurrentEpCount(card.SkillApplyInformation.GetEp());
_gameUsedEpCount += card.SkillApplyInformation.GetEp();
_turnUsedEpCount += card.SkillApplyInformation.GetEp();
}
if (!isSkill)
{
_cumulativeEvolutionCount++;
}
}
public bool UseEpCount(int count)
{
if (CurrentEpCount >= count)
{
GainCurrentEpCount(count);
_gameUsedEpCount += count;
_turnUsedEpCount += count;
return true;
}
return false;
}
public VfxBase AddDeckTokenCards(List<BattleCardBase> cards, SkillProcessor skillProcessor, string updateType, SkillBase skill, bool isOpen)
{
if (updateType == "change")
{
DeckClear(skill);
}
for (int i = 0; i < cards.Count; i++)
{
AddToDeck(cards[i], callEvent: true, skill);
}
this.OnUpdateDeck.Call(skill.SkillPrm.ownerCard, cards, IsPlayer, updateType == "change", isOpen);
return NullVfx.GetInstance();
}
public void CallOnChangeDeckAfterEvent(int previousCount, SkillProcessor skillProcessor, List<BattleCardBase> summonCards)
{
this.OnChangeDeckAfterEvent.Call(previousCount, skillProcessor, summonCards);
}
public void DeckClear(SkillBase skill)
{
this.OnClearDeck.Call();
this.OnAddBlackHole.Call(DeckCardList, skill);
BlackHole.AddRange(DeckCardList);
DeckCardList.Clear();
}
public void AddToDeck(BattleCardBase card, bool callEvent = false, SkillBase skill = null)
{
if (callEvent)
{
this.OnAddDeckEvent.Call(card, skill);
}
DeckCardList.Add(card);
if (card.HasDeckSelfSkill)
{
AddDeckSkillCard(card);
}
if (BattleMgr.XorShiftRandom(card.IsPlayer) != null && BattleMgr.XorShiftRandom(card.IsPlayer).IsActive && BattleMgr.IsMulliganEnd)
{
AddToDeckCardList.Add(card);
}
}
public void AddDeckSkillCard(BattleCardBase card)
{
DeckSkillCardList.Add(card);
DeckSkillCardList = DeckSkillCardList.OrderBy((BattleCardBase c) => c.Index).ToList();
}
public void RemoveOriginalAndAddDeckSkillCard(BattleCardBase card)
{
DeckSkillCardList.RemoveAll((BattleCardBase c) => c.Index == card.Index);
AddDeckSkillCard(card);
}
private void AddToDeckCardIndexChange()
{
if (AddToDeckCardList.Count == 0 && _opponentBattlePlayer.AddToDeckCardList.Count == 0)
{
return;
}
if (AddToDeckCardList.Count > 0 && BattleMgr.XorShiftRandom(AddToDeckCardList.First().IsPlayer) != null && BattleMgr.XorShiftRandom(AddToDeckCardList.First().IsPlayer).IsActive && BattleMgr.IsMulliganEnd)
{
for (int i = 0; i < AddToDeckCardList.Count; i++)
{
if (AddToDeckCardList[i].IsInDeck)
{
int changeInt = BattleMgr.XorShiftRandom(AddToDeckCardList[i].IsPlayer).GetChangeInt(DeckCardList.Count());
BattleCardBase battleCardBase = DeckCardList[changeInt];
int index = AddToDeckCardList[i].Index;
AddToDeckCardList[i].SetIndex(battleCardBase.Index);
this.OnIndexChange.Call(index, battleCardBase.Index, IsPlayer);
battleCardBase.SetIndex(index);
DeckCardList.Sort((BattleCardBase a, BattleCardBase b) => a.Index - b.Index);
}
}
}
AddToDeckCardList.Clear();
if (_opponentBattlePlayer.AddToDeckCardList.Count > 0)
{
_opponentBattlePlayer.AddToDeckCardIndexChange();
}
}
public VfxBase ReplaceInPlay(BattleCardBase originalCard, BattleCardBase newCard, SkillProcessor skillProcessor, bool isMetamorphose = false)
{
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
ClassAndInPlayCardList.Insert(ClassAndInPlayCardList.IndexOf(originalCard), newCard);
ClassAndInPlayCardList.Remove(originalCard);
sequentialVfxPlayer.Register(originalCard.RemoveFromInPlay());
sequentialVfxPlayer.Register(originalCard.RemoveFromInPlayAfter(skillProcessor));
sequentialVfxPlayer.Register(StartSkillWhenChangeInplay(null, new List<BattleCardBase> { newCard }, skillProcessor, !isMetamorphose, null, null, isReplace: true));
if (isMetamorphose)
{
this.OnMetamorphoseAfterEvent.Call(originalCard, newCard);
}
return sequentialVfxPlayer;
}
public VfxBase ReplaceInHand(BattleCardBase originalCard, BattleCardBase newCard, SkillProcessor skillProcessor)
{
SequentialVfxPlayer result = SequentialVfxPlayer.Create();
HandCardList.Insert(HandCardList.IndexOf(originalCard), newCard);
HandCardList.Remove(originalCard);
StartSkillWhenChangeInplaySelfHand(new List<BattleCardBase> { newCard }, skillProcessor);
return result;
}
public void RegisterSkill(IBattlePlayerSkill battlePlayerSkill)
{
_skillList.Add(battlePlayerSkill);
}
public void UnregisterSkill(IBattlePlayerSkill battlePlayerSkill)
{
_skillList.Remove(battlePlayerSkill);
}
private void CallSkill(Func<IBattlePlayerSkill, Func<BattleCardBase, VfxBase>> getFunc, BattleCardBase targetCard)
{
foreach (IBattlePlayerSkill skill in _skillList)
{
getFunc(skill)(targetCard);
}
}
public virtual VfxBase UsePp(int pp, bool isNewReplayMoveTurn = false)
{
Pp -= pp;
AddGameUsedPp(pp);
return NullVfx.GetInstance();
}
public void AddGameUsedPp(int pp)
{
GameUsedPpCount += pp;
}
public VfxBase UseBp(int bp, bool isVariableCost, bool isSelf)
{
Bp -= bp;
int bp2 = Bp;
return m_vfxCreator.CreateUseBp(bp2, bp, () => BattleView.GetBPLabelPosition(), isVariableCost, isSelf);
}
public virtual VfxBase MoveToHand(List<BattleCardBase> cardsToMoveToHand)
{
return NullVfx.GetInstance();
}
public virtual VfxBase MoveToDeck(List<BattleCardBase> cardsToMoveToDeck)
{
return new MoveToDeckVfx(cardsToMoveToDeck, IsPlayer);
}
protected virtual VfxWith<IEnumerable<BattleCardBase>> LotteryRandomDrawCard(int drawCount, SkillProcessor skillProcessor)
{
List<BattleCardBase> list = new List<BattleCardBase>();
if (CheckShortageDeck(drawCount, skillProcessor, out var _))
{
return new VfxWith<IEnumerable<BattleCardBase>>(SendShortageDeck(), list);
}
if (BattleManagerBase.IsRandomDraw)
{
list = SkillRandomSelectFilter.Filtering(drawCount, DeckCardList, BattleMgr).ToList();
}
else
{
int num = Math.Min(drawCount, DeckCardList.Count);
for (int i = 0; i < num; i++)
{
list.Add(DeckCardList[i]);
}
}
return new VfxWith<IEnumerable<BattleCardBase>>(NullVfx.GetInstance(), list);
}
public VfxWith<IEnumerable<BattleCardBase>> RandomCardDraw(int drawCount, SkillProcessor skillProcessor)
{
VfxWith<IEnumerable<BattleCardBase>> vfxWith = LotteryRandomDrawCard(drawCount, skillProcessor);
VfxWith<IEnumerable<BattleCardBase>> vfxWith2 = DrawCards(vfxWith.Value, skillProcessor);
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
sequentialVfxPlayer.Register(vfxWith2.Vfx);
sequentialVfxPlayer.Register(vfxWith.Vfx);
return new VfxWith<IEnumerable<BattleCardBase>>(sequentialVfxPlayer, vfxWith2.Value);
}
public VfxWith<IEnumerable<BattleCardBase>> DrawManagement(List<BattleCardBase> drawCards, SkillProcessor skillProcessor, bool isVisible, bool shortageDeck, SkillBase.SkillResultInfo resultInfo, SkillBase skill)
{
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
VfxWith<IEnumerable<BattleCardBase>> vfxWith = DrawCards(drawCards, skillProcessor, isVisible, isMulligan: false, isToken: false, skill != null, skill, isReservation: false, resultInfo);
if (vfxWith.Value.Count() <= 0 && !shortageDeck)
{
resultInfo.drawCards = new List<IReadOnlyBattleCardInfo>();
return new VfxWith<IEnumerable<BattleCardBase>>(NullVfxWithLoading.GetInstance(), new List<BattleCardBase>());
}
if (resultInfo != null)
{
resultInfo.drawCards = ConvertToSkillInfoCollection(vfxWith.Value);
}
if (IsPlayer || GameMgr.GetIns().IsAdminWatch || isVisible || BattleMgr is SingleBattleMgr)
{
ParallelVfxPlayer parallelVfxPlayer = ParallelVfxPlayer.Create();
foreach (BattleCardBase card in drawCards)
{
int cost = card.Cost;
List<int> costList = card.BattleCardView.GetUseCostList(card.Cost);
bool isInHand = card.IsInHand;
parallelVfxPlayer.Register(InstantVfx.Create(delegate
{
if (card.BaseCost != cost)
{
card.BattleCardView.UpdateCost(costList, isGenerateInHand: true, playEffect: true, isInHand);
}
}));
}
sequentialVfxPlayer.Register(parallelVfxPlayer);
}
if (IsPlayer)
{
sequentialVfxPlayer.Register(new PlayerDrawCardVfx(drawCards, isVisible));
sequentialVfxPlayer.Register(new PlayerEndDrawVfx(drawCards));
}
else
{
if (!(GameMgr.GetIns().IsAdminWatch && isVisible))
{
sequentialVfxPlayer.Register(new OpponentDrawCardVfx(drawCards, isVisible));
}
sequentialVfxPlayer.Register(new OpponentDrawCardToHandVfx(drawCards, 0.4f, isVisible));
}
VfxWithLoadingSequential vfxWithLoadingSequential = VfxWithLoadingSequential.Create();
vfxWithLoadingSequential.RegisterToMainVfx(InstantVfx.Create(delegate
{
foreach (BattleCardBase drawCard in drawCards)
{
drawCard.BattleCardView.HideCanPlayEffect();
}
}));
vfxWithLoadingSequential.RegisterToMainVfx(vfxWith.Vfx);
vfxWithLoadingSequential.RegisterToMainVfx(sequentialVfxPlayer);
if (shortageDeck)
{
vfxWithLoadingSequential.RegisterToMainVfx(SendShortageDeck());
}
vfxWithLoadingSequential.RegisterToMainVfx(InstantVfx.Create(delegate
{
UpdateHandCardsPlayability();
}));
return new VfxWith<IEnumerable<BattleCardBase>>(vfxWithLoadingSequential, vfxWith.Value);
}
public VfxWith<IEnumerable<BattleCardBase>> DrawCards(IEnumerable<BattleCardBase> drawList, SkillProcessor skillProcessor, bool isOpen = false, bool isMulligan = false, bool isToken = false, bool isSkillDraw = false, SkillBase skill = null, bool isReservation = false, SkillBase.SkillResultInfo skillResultInfo = null, int tokenDrawSkillId = -1)
{
if (skillResultInfo != null)
{
skillResultInfo.drewOverHandLimitCards = new List<IReadOnlyBattleCardInfo>();
}
if (!drawList.Any())
{
return new VfxWith<IEnumerable<BattleCardBase>>(NullVfx.GetInstance(), drawList);
}
int count = DeckCardList.Count;
ParallelVfxPlayer parallelVfxPlayer = ParallelVfxPlayer.Create();
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
ParallelVfxPlayer parallelVfxPlayer2 = ParallelVfxPlayer.Create();
foreach (BattleCardBase card in drawList)
{
SkillConditionCheckerOption skillConditionCheckerOption = new SkillConditionCheckerOption();
List<BattleCardBase> list = new List<BattleCardBase>();
list.Add(card);
bool num = HandCardList.Count >= 9;
if (num)
{
list.RemoveAt(0);
this.OnAddCemeteryEvent.Call(card, CEMETERY_TYPE.DECK_DRAW_HAND_OVER, isOpen, skill);
CemeteryList.Add(card);
skillConditionCheckerOption.DrewOverHandLimitCards.Add(card);
skillResultInfo?.drewOverHandLimitCards.Add(card);
BattleMgr.VfxMgr.RegisterImmediateVfx(this.OnAddCemeteryAfterEvent.GetAllFuncVfxResults());
int cost = card.Cost;
List<int> costList = card.BattleCardView.GetUseCostList(card.Cost);
parallelVfxPlayer.Register(InstantVfx.Create(delegate
{
if (card.BaseCost != cost)
{
card.BattleCardView.UpdateCost(costList, isGenerateInHand: true, playEffect: true, isForceUpdate: true);
}
}));
}
skillConditionCheckerOption.InHandCard = ConvertToSkillInfoCollection(list);
parallelVfxPlayer.Register(DrawCard(card, skill, isOpen, isToken, isReservation));
parallelVfxPlayer2.Register(card.StartHandEffect());
if (!isMulligan)
{
StartSkillWhenChangeInplaySelfHand(new List<BattleCardBase> { card }, skillProcessor);
}
if (!num)
{
StartSkillWhenAddToHand(skillProcessor, skillConditionCheckerOption);
}
}
if (!isToken)
{
CallOnChangeDeckAfterEvent(count, skillProcessor, new List<BattleCardBase>());
}
sequentialVfxPlayer.Register(SequentialVfxPlayer.Create(parallelVfxPlayer, parallelVfxPlayer2));
if (!isMulligan)
{
BattlePlayerReadOnlyInfoPair playerInfoPair = new BattlePlayerReadOnlyInfoPair(this, _opponentBattlePlayer);
SkillConditionCheckerOption skillConditionCheckerOption2 = new SkillConditionCheckerOption();
if (skill != null)
{
DrewSkillCard = skill.SkillPrm.ownerCard;
}
List<BattleCardBase> list2 = new List<BattleCardBase>();
List<BattleCardBase> list3 = new List<BattleCardBase>();
if (isToken)
{
list2.AddRange(drawList);
skillConditionCheckerOption2.TokenDrewCards.AddRange(list2);
}
else
{
list3.AddRange(drawList);
skillConditionCheckerOption2.DeckDrewCards.AddRange(list3);
}
foreach (BattleCardBase item in drawList.Where((BattleCardBase c) => c.IsInHand))
{
skillProcessor.Register(item.Skills.CreateWhenDraw(skillProcessor, playerInfoPair, skillConditionCheckerOption2));
item.DrawTurn = ((item.SelfBattlePlayer.IsSelfTurn && !BattleMgr.IsTurnEnd) ? item.SelfBattlePlayer.Turn : (item.SelfBattlePlayer.Turn + 1));
}
if (!IsPlayer)
{
IEnumerable<BattleCardBase> enumerable = drawList.Where((BattleCardBase c) => c.Skills.Any((SkillBase s) => s.OnWhenDraw != 0 && s.PreprocessList.Any((SkillPreprocessBase p) => p is SkillPreprocessOpenCard)));
foreach (BattleCardBase item2 in enumerable)
{
item2.LastDrawOpenCard = enumerable.LastOrDefault();
}
}
List<BattleCardBase> list4 = new List<BattleCardBase>(HandCardList);
list4.AddRange(ClassAndInPlayCardList);
foreach (BattleCardBase item3 in list4.Where((BattleCardBase c) => !drawList.Contains(c)))
{
SkillProcessor.ProcessInfo info = item3.Skills.CreateWhenDrawOther(list3, list2, skillProcessor, new BattlePlayerReadOnlyInfoPair(this, _opponentBattlePlayer), isSkillDraw);
skillProcessor.Register(info);
}
if (!isToken)
{
int count2 = TurnDrawCards.Count;
TurnDrawCards.AddRange(drawList);
GameDrawCards.AddRange(drawList);
this.OnDrawCards.Call(count2, TurnDrawCards.Count, drawList.ToList(), this, isOpen);
}
else
{
GameDrawTokenCards.AddRange(drawList);
if (tokenDrawSkillId != -1)
{
for (int num2 = 0; num2 < drawList.Count(); num2++)
{
TurnDrawTokenCardsWithId.Add(new CardAndId(drawList.ElementAt(num2), tokenDrawSkillId));
}
}
}
}
VfxWithLoadingSequential vfxWithLoadingSequential = VfxWithLoadingSequential.Create();
vfxWithLoadingSequential.RegisterVfxWithLoading(VfxWithLoading.Create(BattleMgr.LoadCardResources(drawList.ToList())));
vfxWithLoadingSequential.RegisterToMainVfx(sequentialVfxPlayer);
return new VfxWith<IEnumerable<BattleCardBase>>(vfxWithLoadingSequential, drawList);
}
public bool CheckShortageDeck(int drawNum, SkillProcessor skillProcessor, out bool isActiveChangeShortageDeck)
{
bool flag = drawNum > DeckCardList.Count;
isActiveChangeShortageDeck = false;
if (!IsChangeShortageDeck)
{
IsShortageDeck = flag;
return IsShortageDeck;
}
if (IsChangeShortageDeck && flag)
{
StartSkillWhenShortageDeck(skillProcessor);
isActiveChangeShortageDeck = true;
}
return false;
}
public void CallRecordingMulliganStart(List<BattleCardBase> cards)
{
this.OnMulliganStart.Call(this, cards);
}
public virtual VfxBase CallRecordingMulligan(IList<BattleCardBase> abandonCards, IList<int> completeCards)
{
this.OnMulliganEnd.Call(abandonCards, completeCards);
return NullVfx.GetInstance();
}
protected virtual void PlayerActive()
{
}
public virtual void UpdateHandCardsPlayability(bool areArrowsForcedOff = false)
{
}
public VfxBase UpdateHandCardsCost(bool playEffect = true, bool isOnlyFixedUseCost = false)
{
ParallelVfxPlayer parallelVfxPlayer = ParallelVfxPlayer.Create();
int i = 0;
for (int count = HandCardList.Count; i < count; i++)
{
parallelVfxPlayer.Register(HandCardList[i].CalcHandCost(playEffect, isOnlyFixedUseCost));
}
return parallelVfxPlayer;
}
public void ApplyFixedUseCostInfo()
{
HandParameter.IconLayout currentIconLayout = BattleCardView.GetCurrentIconLayout();
HandControl.ArrangeType type = (PlayerPrefsWrapper.GetBool(PlayerPrefsWrapper.FIXEDUSE_COST_INFO) ? HandControl.ArrangeType.Flat : HandControl.ArrangeType.Fan);
NetworkBattleManagerBase networkBattleMgr = BattleManagerBase.GetIns() as NetworkBattleManagerBase;
UpdateHandCostViewStrategy();
InitHandParameterIconPos(currentIconLayout);
BattleView.HandView.ChangeArrangeType(type);
if (networkBattleMgr != null && networkBattleMgr.IsSkillSelectTiming)
{
BattleMgr.VfxMgr.RegisterImmediateVfx(SequentialVfxPlayer.Create(UpdateHandCardsCost(playEffect: false, isOnlyFixedUseCost: true), WaitEventVfx.Create(() => !networkBattleMgr.IsSkillSelectTiming), UpdateHandCardsCost(playEffect: false)));
}
else
{
BattleMgr.VfxMgr.RegisterImmediateVfx(UpdateHandCardsCost(playEffect: false));
}
}
private void UpdateHandCostViewStrategy()
{
int i = 0;
for (int count = HandCardList.Count; i < count; i++)
{
HandCardList[i].UpdateCostViewStrategy();
}
}
public void InitHandParameterIconPos(HandParameter.IconLayout layout)
{
int i = 0;
for (int count = HandCardList.Count; i < count; i++)
{
HandCardList[i].InitHandParameterIconPos(layout);
}
}
public VfxWithLoadingSequential AddSpellChargeCountVfx(List<BattleCardBase> targetCardList, List<int> addCountList)
{
List<BattleCardBase> list = new List<BattleCardBase>();
List<int> list2 = new List<int>();
List<float> list3 = new List<float>();
for (int i = 0; i < targetCardList.Count; i++)
{
BattleCardBase battleCardBase = targetCardList[i];
int num = addCountList[i];
battleCardBase.AddSpellChargeCount(num);
if ((!battleCardBase.IsPlayer && !GameMgr.GetIns().IsAdminWatch) || battleCardBase.IsInDeck)
{
continue;
}
for (int j = 0; j < num; j++)
{
list.Add(battleCardBase);
if (num >= Skill_spell_charge.SPELL_CHARGE_SUMMARY_COUNT)
{
list2.Add(num);
list3.Add(Skill_spell_charge.SPELL_CHARGE_SUMMARY_INTERVAL);
break;
}
list2.Add(1);
list3.Add(Skill_spell_charge.SPELL_CHARGE_INTERVAL);
}
}
return new SpellChargeSkillActivationVfx(list, list2, list3);
}
public abstract EffectBattle GetSkillEffect(string skillEffectPath);
public abstract Vector3 GetFieldCenterPosition();
public void StartSkillWhenChangeInplaySelfHand(List<BattleCardBase> inHandCards, SkillProcessor skillProcessor)
{
BattlePlayerReadOnlyInfoPair battlePlayerReadOnlyInfoPair = new BattlePlayerReadOnlyInfoPair(this, _opponentBattlePlayer);
BattlePlayerReadOnlyInfoPair battlePlayerReadOnlyInfoPair2 = new BattlePlayerReadOnlyInfoPair(_opponentBattlePlayer, this);
List<BattleCardBase> cardsOrderBySkillActivation = SkillCollectionBase.GetCardsOrderBySkillActivation(this, _opponentBattlePlayer, isAll: false, containsHand: true);
for (int i = 0; i < cardsOrderBySkillActivation.Count; i++)
{
cardsOrderBySkillActivation[i].Skills.CreateAndRegisterWhenChangeInplaySelfhandInfo(inHandCards, skillProcessor, (cardsOrderBySkillActivation[i].SelfBattlePlayer == this) ? battlePlayerReadOnlyInfoPair : battlePlayerReadOnlyInfoPair2);
}
}
public VfxBase StartSkillWhenChangeInplay(List<BattleCardBase> inHandCards, List<BattleCardBase> inPlayCards, SkillProcessor skillProcessor, bool isSummonCheck = true, Func<SkillBase, uint> inplayCheckFunc = null, SkillConditionCheckerOption option = null, bool isReplace = false)
{
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
BattlePlayerPair battlePlayerPair = new BattlePlayerPair(this, _opponentBattlePlayer);
BattlePlayerPair battlePlayerPair2 = new BattlePlayerPair(_opponentBattlePlayer, this);
if (inPlayCards != null && !isReplace && isSummonCheck)
{
sequentialVfxPlayer.Register(this.OnAfterSummonCardEvent.GetAllFuncVfxResults(skillProcessor, inPlayCards));
}
List<BattleCardBase> cardsOrderBySkillActivation = SkillCollectionBase.GetCardsOrderBySkillActivation(this, _opponentBattlePlayer, isAll: false, containsHand: true);
List<BattleCardBase> cardsOrderBySkillActivation2 = SkillCollectionBase.GetCardsOrderBySkillActivation(this, _opponentBattlePlayer, isAll: false, containsHand: false, containsClass: true, containsInplay: true);
for (int i = 0; i < cardsOrderBySkillActivation2.Count; i++)
{
sequentialVfxPlayer.Register(cardsOrderBySkillActivation2[i].Skills.RegisterAndProcessWhenChangeInplayImmediateInfo((cardsOrderBySkillActivation2[i].SelfBattlePlayer == this) ? battlePlayerPair : battlePlayerPair2));
}
for (int j = 0; j < cardsOrderBySkillActivation.Count; j++)
{
cardsOrderBySkillActivation[j].Skills.CreateAndRegisterWhenChangeInplaySelfhandInfo(inHandCards, skillProcessor, (cardsOrderBySkillActivation[j].SelfBattlePlayer == this) ? battlePlayerPair : battlePlayerPair2);
}
for (int k = 0; k < cardsOrderBySkillActivation2.Count; k++)
{
cardsOrderBySkillActivation2[k].Skills.CreateAndRegisterWhenChangeInplayInfo(inPlayCards, skillProcessor, (cardsOrderBySkillActivation2[k].SelfBattlePlayer == this) ? battlePlayerPair : battlePlayerPair2, isSummonCheck, inplayCheckFunc, option);
}
return sequentialVfxPlayer;
}
public VfxBase StartSkillWhenChangeClassLife(SkillProcessor skillProcessor)
{
SequentialVfxPlayer result = SequentialVfxPlayer.Create();
BattlePlayerPair battlePlayerPair = new BattlePlayerPair(this, _opponentBattlePlayer);
BattlePlayerPair battlePlayerPair2 = new BattlePlayerPair(_opponentBattlePlayer, this);
List<BattleCardBase> cardsOrderBySkillActivation = SkillCollectionBase.GetCardsOrderBySkillActivation(this, _opponentBattlePlayer, isAll: false, containsHand: true);
List<BattleCardBase> cardsOrderBySkillActivation2 = SkillCollectionBase.GetCardsOrderBySkillActivation(this, _opponentBattlePlayer, isAll: false, containsHand: false, containsClass: false, containsInplay: true);
for (int i = 0; i < cardsOrderBySkillActivation.Count; i++)
{
cardsOrderBySkillActivation[i].Skills.CreateAndRegisterWhenChangeClassLifeSelfHandInfo(skillProcessor, (cardsOrderBySkillActivation[i].SelfBattlePlayer == this) ? battlePlayerPair : battlePlayerPair2);
}
for (int j = 0; j < cardsOrderBySkillActivation2.Count; j++)
{
cardsOrderBySkillActivation2[j].Skills.CreateAndRegisterWhenChangeClassLifeInplayInfo(skillProcessor, (cardsOrderBySkillActivation2[j].SelfBattlePlayer == this) ? battlePlayerPair : battlePlayerPair2);
}
return result;
}
public VfxBase StartSkillWhenChangePPTotal(SkillProcessor skillProcessor)
{
SequentialVfxPlayer result = SequentialVfxPlayer.Create();
BattlePlayerPair battlePlayerPair = new BattlePlayerPair(this, _opponentBattlePlayer);
BattlePlayerPair battlePlayerPair2 = new BattlePlayerPair(_opponentBattlePlayer, this);
List<BattleCardBase> cardsOrderBySkillActivation = SkillCollectionBase.GetCardsOrderBySkillActivation(this, _opponentBattlePlayer, isAll: false, containsHand: false, containsClass: false, containsInplay: true);
for (int i = 0; i < cardsOrderBySkillActivation.Count; i++)
{
cardsOrderBySkillActivation[i].Skills.CreateAndRegisterWhenChangePPTotalInfo(skillProcessor, (cardsOrderBySkillActivation[i].SelfBattlePlayer == this) ? battlePlayerPair : battlePlayerPair2);
}
return result;
}
public void StartSkillWhenAddToHand(SkillProcessor skillProcessor, SkillConditionCheckerOption option)
{
BattlePlayerReadOnlyInfoPair battlePlayerReadOnlyInfoPair = new BattlePlayerReadOnlyInfoPair(this, _opponentBattlePlayer);
BattlePlayerReadOnlyInfoPair battlePlayerReadOnlyInfoPair2 = new BattlePlayerReadOnlyInfoPair(_opponentBattlePlayer, this);
List<BattleCardBase> cardsOrderBySkillActivation = SkillCollectionBase.GetCardsOrderBySkillActivation(this, _opponentBattlePlayer, isAll: false, containsHand: false, BattleMgr is SingleBattleMgr, containsInplay: true);
for (int i = 0; i < cardsOrderBySkillActivation.Count; i++)
{
cardsOrderBySkillActivation[i].Skills.CreateAndRegisterWhenAddToHandInfo(skillProcessor, (cardsOrderBySkillActivation[i].SelfBattlePlayer == this) ? battlePlayerReadOnlyInfoPair : battlePlayerReadOnlyInfoPair2, option);
}
}
public void StartSkillWhenDestroyOther(BattleCardBase destroyCard, SkillProcessor skillProcessor)
{
BattlePlayerReadOnlyInfoPair battlePlayerReadOnlyInfoPair = new BattlePlayerReadOnlyInfoPair(this, _opponentBattlePlayer);
BattlePlayerReadOnlyInfoPair battlePlayerReadOnlyInfoPair2 = new BattlePlayerReadOnlyInfoPair(_opponentBattlePlayer, this);
List<BattleCardBase> cardsOrderBySkillActivation = SkillCollectionBase.GetCardsOrderBySkillActivation(this, _opponentBattlePlayer, isAll: true, containsHand: false, containsClass: false, containsInplay: false, containsDeck: false, (BattleCardBase card) => card != destroyCard);
for (int num = 0; num < cardsOrderBySkillActivation.Count; num++)
{
skillProcessor.Register(cardsOrderBySkillActivation[num].Skills.CreateWhenDestroyOtherInfo(destroyCard, skillProcessor, (cardsOrderBySkillActivation[num].SelfBattlePlayer == this) ? battlePlayerReadOnlyInfoPair : battlePlayerReadOnlyInfoPair2));
}
}
public void StartSkillWhenReturnOther(BattleCardBase returnedCard, SkillProcessor skillProcessor, List<IReadOnlyBattleCardInfo> cantAttackAllReturnCards)
{
BattlePlayerReadOnlyInfoPair battlePlayerReadOnlyInfoPair = new BattlePlayerReadOnlyInfoPair(this, _opponentBattlePlayer);
BattlePlayerReadOnlyInfoPair battlePlayerReadOnlyInfoPair2 = new BattlePlayerReadOnlyInfoPair(_opponentBattlePlayer, this);
List<BattleCardBase> cardsOrderBySkillActivation = SkillCollectionBase.GetCardsOrderBySkillActivation(this, _opponentBattlePlayer, isAll: false, containsHand: true, containsClass: true, containsInplay: true, containsDeck: false, (BattleCardBase card) => card != returnedCard);
for (int num = 0; num < cardsOrderBySkillActivation.Count; num++)
{
skillProcessor.Register(cardsOrderBySkillActivation[num].Skills.CreateWhenReturnOtherInfo(returnedCard, skillProcessor, (cardsOrderBySkillActivation[num].SelfBattlePlayer == this) ? battlePlayerReadOnlyInfoPair : battlePlayerReadOnlyInfoPair2, cantAttackAllReturnCards));
}
}
public void StartSkillWhenReturnSkillActivate(List<BattleCardBase> returnedCards, SkillProcessor skillProcessor)
{
BattlePlayerReadOnlyInfoPair battlePlayerReadOnlyInfoPair = new BattlePlayerReadOnlyInfoPair(this, _opponentBattlePlayer);
BattlePlayerReadOnlyInfoPair battlePlayerReadOnlyInfoPair2 = new BattlePlayerReadOnlyInfoPair(_opponentBattlePlayer, this);
List<BattleCardBase> cardsOrderBySkillActivation = SkillCollectionBase.GetCardsOrderBySkillActivation(this, _opponentBattlePlayer, isAll: false, containsHand: true, containsClass: true, containsInplay: true);
for (int i = 0; i < cardsOrderBySkillActivation.Count; i++)
{
skillProcessor.Register(cardsOrderBySkillActivation[i].Skills.CreateWhenReturnSkillActivateInfo(returnedCards, skillProcessor, (cardsOrderBySkillActivation[i].SelfBattlePlayer == this) ? battlePlayerReadOnlyInfoPair : battlePlayerReadOnlyInfoPair2));
}
}
public VfxBase StartSkillWhenPlayOtherEnhanceAndAccelerateAndCrystallize(BattleCardBase playedCard, bool isEnhance, SkillProcessor skillProcessor)
{
ParallelVfxPlayer parallelVfxPlayer = ParallelVfxPlayer.Create();
if (playedCard.IsChoiceBraveSkillCard)
{
return parallelVfxPlayer;
}
BattlePlayerReadOnlyInfoPair battlePlayerReadOnlyInfoPair = new BattlePlayerReadOnlyInfoPair(this, _opponentBattlePlayer);
BattlePlayerReadOnlyInfoPair battlePlayerReadOnlyInfoPair2 = new BattlePlayerReadOnlyInfoPair(_opponentBattlePlayer, this);
foreach (BattleCardBase item in SkillCollectionBase.GetCardsOrderBySkillActivation(this, _opponentBattlePlayer, isAll: true, containsHand: false, containsClass: false, containsInplay: false, containsDeck: false, (BattleCardBase card) => card != playedCard))
{
foreach (SkillBase skill in item.Skills)
{
VfxWith<SkillProcessor.ProcessInfo> vfxWith = item.Skills.CreateWhenPlayOtherEnhanceAndAccelerateAndCrystallizeInfo(skill, playedCard, isEnhance ? playedCard : null, skillProcessor, (item.SelfBattlePlayer == this) ? battlePlayerReadOnlyInfoPair : battlePlayerReadOnlyInfoPair2);
skillProcessor.Register(vfxWith.Value);
parallelVfxPlayer.Register(vfxWith.Vfx);
}
}
return parallelVfxPlayer;
}
public VfxBase StartSkillWhenSummonOther(BattleCardBase summonedCard, SkillProcessor skillProcessor, bool isReanimate = false, List<BattleCardBase> ignoreCheckCard = null)
{
BattlePlayerReadOnlyInfoPair battlePlayerReadOnlyInfoPair = new BattlePlayerReadOnlyInfoPair(this, _opponentBattlePlayer);
BattlePlayerReadOnlyInfoPair battlePlayerReadOnlyInfoPair2 = new BattlePlayerReadOnlyInfoPair(_opponentBattlePlayer, this);
List<BattleCardBase> cardsOrderBySkillActivation = SkillCollectionBase.GetCardsOrderBySkillActivation(this, _opponentBattlePlayer, isAll: false, containsHand: true, containsClass: true, containsInplay: true, containsDeck: false, (BattleCardBase card) => ignoreCheckCard == null || ignoreCheckCard.Count == 0 || !ignoreCheckCard.Contains(card));
for (int num = 0; num < cardsOrderBySkillActivation.Count; num++)
{
if (cardsOrderBySkillActivation[num] != summonedCard)
{
skillProcessor.Register(cardsOrderBySkillActivation[num].Skills.CreateWhenSummonOtherInfo(summonedCard, skillProcessor, (cardsOrderBySkillActivation[num].SelfBattlePlayer == this) ? battlePlayerReadOnlyInfoPair : battlePlayerReadOnlyInfoPair2, isReanimate));
}
skillProcessor.Register(cardsOrderBySkillActivation[num].Skills.CreateWhenSummonSelfAndOtherInfo(summonedCard, skillProcessor, (cardsOrderBySkillActivation[num].SelfBattlePlayer == this) ? battlePlayerReadOnlyInfoPair : battlePlayerReadOnlyInfoPair2, isReanimate));
}
return NullVfx.GetInstance();
}
public void StartSkillWhenFusionOther(List<BattleCardBase> fusionIngredientCards, SkillProcessor skillProcessor)
{
BattlePlayerReadOnlyInfoPair playerInfoPair = new BattlePlayerReadOnlyInfoPair(this, _opponentBattlePlayer);
List<BattleCardBase> list = new List<BattleCardBase>();
list.AddRange(ClassAndInPlayCardList);
foreach (BattleCardBase item in list)
{
skillProcessor.Register(item.Skills.CreateWhenFusionOtherInfo(skillProcessor, playerInfoPair, fusionIngredientCards));
}
}
public void StartSkillWhenUseEpSelfAndOther(SkillProcessor skillProcessor)
{
BattlePlayerReadOnlyInfoPair playerInfoPair = new BattlePlayerReadOnlyInfoPair(this, _opponentBattlePlayer);
List<BattleCardBase> cardsOrderBySkillActivation = SkillCollectionBase.GetCardsOrderBySkillActivation(this, _opponentBattlePlayer, isAll: true);
for (int i = 0; i < cardsOrderBySkillActivation.Count; i++)
{
skillProcessor.Register(cardsOrderBySkillActivation[i].Skills.CreateWhenUseEpSelfAndOtherInfo(skillProcessor, playerInfoPair));
}
}
public VfxBase StartSkillWhenHealingSelfAndOther(List<BattleCardBase> healingCards, SkillProcessor skillProcessor, List<int> healAmountList)
{
BattlePlayerReadOnlyInfoPair battlePlayerReadOnlyInfoPair = new BattlePlayerReadOnlyInfoPair(this, _opponentBattlePlayer);
BattlePlayerReadOnlyInfoPair battlePlayerReadOnlyInfoPair2 = new BattlePlayerReadOnlyInfoPair(_opponentBattlePlayer, this);
List<BattleCardBase> cardsOrderBySkillActivation = SkillCollectionBase.GetCardsOrderBySkillActivation(this, _opponentBattlePlayer, isAll: false, containsHand: true, containsClass: true, containsInplay: true);
if (cardsOrderBySkillActivation.Any())
{
TurnAndIntValue turnAndIntValue = TurnWhenHealingCount.FirstOrDefault((TurnAndIntValue t) => t.IsSelfTurn == BattleMgr.BattlePlayer.IsSelfTurn && t.Turn == Turn);
if (turnAndIntValue != null)
{
turnAndIntValue.Increment();
}
else
{
TurnWhenHealingCount.Add(new TurnAndIntValue(1, Turn, BattleMgr.BattlePlayer.IsSelfTurn));
}
}
for (int num = 0; num < cardsOrderBySkillActivation.Count; num++)
{
skillProcessor.Register(cardsOrderBySkillActivation[num].Skills.CreateWhenHealingSelfAndOtherInfo(healingCards, skillProcessor, (cardsOrderBySkillActivation[num].SelfBattlePlayer == this) ? battlePlayerReadOnlyInfoPair : battlePlayerReadOnlyInfoPair2, healAmountList));
}
return NullVfx.GetInstance();
}
public VfxBase StartSkillWhenDamageSelfAndOther(SkillBase skill, List<BattleCardBase> damageCards, SkillProcessor skillProcessor, int defDamage, int fixedDamage)
{
if (damageCards != null)
{
BattlePlayerReadOnlyInfoPair battlePlayerReadOnlyInfoPair = new BattlePlayerReadOnlyInfoPair(this, _opponentBattlePlayer);
BattlePlayerReadOnlyInfoPair battlePlayerReadOnlyInfoPair2 = new BattlePlayerReadOnlyInfoPair(_opponentBattlePlayer, this);
List<BattleCardBase> cardsOrderBySkillActivation = SkillCollectionBase.GetCardsOrderBySkillActivation(this, _opponentBattlePlayer, isAll: false, containsHand: true, containsClass: true, containsInplay: true, containsDeck: true);
for (int i = 0; i < cardsOrderBySkillActivation.Count; i++)
{
skillProcessor.Register(cardsOrderBySkillActivation[i].Skills.CreateWhenDamageSelfAndOtherInfo(skill, damageCards, skillProcessor, (cardsOrderBySkillActivation[i].SelfBattlePlayer == this) ? battlePlayerReadOnlyInfoPair : battlePlayerReadOnlyInfoPair2, defDamage, fixedDamage));
}
}
return NullVfx.GetInstance();
}
public void StartSkillWhenBurialRiteOther(BattleCardBase burialRiteCard, SkillProcessor skillProcessor)
{
BattlePlayerReadOnlyInfoPair battlePlayerReadOnlyInfoPair = new BattlePlayerReadOnlyInfoPair(this, _opponentBattlePlayer);
BattlePlayerReadOnlyInfoPair battlePlayerReadOnlyInfoPair2 = new BattlePlayerReadOnlyInfoPair(_opponentBattlePlayer, this);
List<BattleCardBase> cardsOrderBySkillActivation = SkillCollectionBase.GetCardsOrderBySkillActivation(this, _opponentBattlePlayer, isAll: false, containsHand: false, containsClass: true, containsInplay: true, containsDeck: true);
for (int i = 0; i < cardsOrderBySkillActivation.Count; i++)
{
skillProcessor.Register(cardsOrderBySkillActivation[i].Skills.CreateWhenBurialRiteOther(burialRiteCard, skillProcessor, (cardsOrderBySkillActivation[i].SelfBattlePlayer == this) ? battlePlayerReadOnlyInfoPair : battlePlayerReadOnlyInfoPair2));
}
}
public void StartSkillWhenBanishOther(BattleCardBase banishedCard, SkillProcessor skillProcessor, bool isInplay)
{
BattlePlayerReadOnlyInfoPair battlePlayerReadOnlyInfoPair = new BattlePlayerReadOnlyInfoPair(this, _opponentBattlePlayer);
BattlePlayerReadOnlyInfoPair battlePlayerReadOnlyInfoPair2 = new BattlePlayerReadOnlyInfoPair(_opponentBattlePlayer, this);
List<BattleCardBase> cardsOrderBySkillActivation = SkillCollectionBase.GetCardsOrderBySkillActivation(this, _opponentBattlePlayer, isAll: false, containsHand: true, containsClass: true, containsInplay: true);
for (int i = 0; i < cardsOrderBySkillActivation.Count; i++)
{
skillProcessor.Register(cardsOrderBySkillActivation[i].Skills.CreateWhenBanishOther(banishedCard, skillProcessor, (cardsOrderBySkillActivation[i].SelfBattlePlayer == this) ? battlePlayerReadOnlyInfoPair : battlePlayerReadOnlyInfoPair2, isInplay));
}
}
public void StartSkillWhenUseWhiteRitualStack(SkillProcessor skillProcessor, SkillConditionCheckerOption checkerOption)
{
BattlePlayerReadOnlyInfoPair playerInfoPair = new BattlePlayerReadOnlyInfoPair(this, _opponentBattlePlayer);
List<BattleCardBase> list = HandCardList.ToList();
list.AddRange(ClassAndInPlayCardList);
list.AddRange(DeckSkillCardList);
for (int i = 0; i < list.Count; i++)
{
skillProcessor.Register(list[i].Skills.CreateWhenUseWhiteRitualStackInfo(skillProcessor, playerInfoPair, checkerOption));
}
}
public void StartSkillWhenResonanceStart(SkillProcessor skillProcessor, List<BattleCardBase> SummonCardList)
{
BattlePlayerReadOnlyInfoPair playerInfoPair = new BattlePlayerReadOnlyInfoPair(this, _opponentBattlePlayer);
List<BattleCardBase> list = HandCardList.ToList();
list.AddRange(ClassAndInPlayCardList);
list.AddRange(DeckSkillCardList);
for (int i = 0; i < list.Count; i++)
{
BattleCardBase card = list[i];
if (!SummonCardList.Any((BattleCardBase s) => s == card))
{
skillProcessor.Register(card.Skills.CreateWhenResonanceStart(skillProcessor, playerInfoPair));
}
}
}
public VfxBase StartSkillWhenPpHealing(SkillProcessor skillProcessor)
{
List<BattleCardBase> list = ClassAndInPlayCardList.ToList();
BattlePlayerReadOnlyInfoPair playerInfoPair = new BattlePlayerReadOnlyInfoPair(this, _opponentBattlePlayer);
for (int i = 0; i < list.Count; i++)
{
skillProcessor.Register(list[i].Skills.CreateWhenPpHealingInfo(skillProcessor, playerInfoPair));
}
return NullVfx.GetInstance();
}
public void StartSkillWhenBuffDebuffSelfAndOther(IEnumerable<BattleCardBase> targetCards, IEnumerable<BattleCardBase> inplayTargetCards, SkillProcessor skillProcessor)
{
if (targetCards.Count() != 0)
{
BattlePlayerReadOnlyInfoPair playerInfoPair = new BattlePlayerReadOnlyInfoPair(this, _opponentBattlePlayer);
List<BattleCardBase> list = ClassAndInPlayCardList.ToList();
SkillConditionCheckerOption skillConditionCheckerOption = new SkillConditionCheckerOption();
List<IReadOnlyBattleCardInfo> inplayDebuffingCards = (skillConditionCheckerOption.InplayBuffingCards = ConvertToSkillInfoCollection(inplayTargetCards));
skillConditionCheckerOption.InplayDebuffingCards = inplayDebuffingCards;
for (int i = 0; i < list.Count; i++)
{
skillProcessor.Register(list[i].Skills.CreateWhenBuffDebuffSelfAndOtherInfo(skillProcessor, playerInfoPair, skillConditionCheckerOption));
}
}
}
public void StartSkillWhenBuffSelfAndOther(IEnumerable<BattleCardBase> buffingCards, IEnumerable<BattleCardBase> inplayBuffingCards, SkillProcessor skillProcessor)
{
BattlePlayerReadOnlyInfoPair playerInfoPair = new BattlePlayerReadOnlyInfoPair(this, _opponentBattlePlayer);
List<BattleCardBase> list = ClassAndInPlayCardList.ToList();
SkillConditionCheckerOption skillConditionCheckerOption = new SkillConditionCheckerOption();
skillConditionCheckerOption.InplayBuffingCards = ConvertToSkillInfoCollection(inplayBuffingCards);
if (buffingCards.Count() > 0)
{
for (int i = 0; i < list.Count; i++)
{
skillProcessor.Register(list[i].Skills.CreateWhenBuffSelfAndOtherInfo(skillProcessor, playerInfoPair, skillConditionCheckerOption));
}
}
}
public void StartSkillWhenDebuffSelfAndOther(IEnumerable<BattleCardBase> debuffingCards, IEnumerable<BattleCardBase> inplayDebuffingCards, SkillProcessor skillProcessor)
{
if (debuffingCards.Count() != 0)
{
BattlePlayerReadOnlyInfoPair playerInfoPair = new BattlePlayerReadOnlyInfoPair(this, _opponentBattlePlayer);
List<BattleCardBase> list = ClassAndInPlayCardList.ToList();
SkillConditionCheckerOption skillConditionCheckerOption = new SkillConditionCheckerOption();
skillConditionCheckerOption.InplayDebuffingCards = ConvertToSkillInfoCollection(inplayDebuffingCards);
for (int i = 0; i < list.Count; i++)
{
skillProcessor.Register(list[i].Skills.CreateWhenDebuffSelfAndOtherInfo(skillProcessor, playerInfoPair, skillConditionCheckerOption));
}
}
}
public void StartSkillWhenDebuffIncludeSetMaxLife(BattleCardBase debuffingCard, IEnumerable<BattleCardBase> inplayDebuffingCards, SkillProcessor skillProcessor)
{
BattlePlayerReadOnlyInfoPair playerInfoPair = new BattlePlayerReadOnlyInfoPair(this, _opponentBattlePlayer);
SkillConditionCheckerOption skillConditionCheckerOption = new SkillConditionCheckerOption();
skillConditionCheckerOption.InplayDebuffingCards = ConvertToSkillInfoCollection(inplayDebuffingCards);
skillProcessor.Register(debuffingCard.Skills.CreateWhenDebuffIncludeSetMaxLifeInfo(skillProcessor, playerInfoPair, skillConditionCheckerOption));
}
public void StartSkillWhenShortageDeck(SkillProcessor skillProcessor)
{
BattlePlayerReadOnlyInfoPair playerInfoPair = new BattlePlayerReadOnlyInfoPair(this, _opponentBattlePlayer);
skillProcessor.Register(Class.Skills.CreateWhenShortageDeck(skillProcessor, playerInfoPair));
}
public void StartSkillWhenShortageDeckWinSkillActivate(List<BattleCardBase> shortageDeckWinCards, SkillProcessor skillProcessor)
{
BattlePlayerPair battlePlayerPair = new BattlePlayerPair(this, _opponentBattlePlayer);
BattlePlayerPair battlePlayerPair2 = new BattlePlayerPair(_opponentBattlePlayer, this);
SkillConditionCheckerOption skillConditionCheckerOption = new SkillConditionCheckerOption();
skillConditionCheckerOption.ShortageDeckWinCards = ConvertToSkillInfoCollection(shortageDeckWinCards);
List<BattleCardBase> cardsOrderBySkillActivation = SkillCollectionBase.GetCardsOrderBySkillActivation(this, _opponentBattlePlayer, isAll: false, containsHand: false, containsClass: true);
for (int i = 0; i < cardsOrderBySkillActivation.Count; i++)
{
skillProcessor.Register(cardsOrderBySkillActivation[i].Skills.CreateWhenShortageDeckWinSkillActivate(skillProcessor, (cardsOrderBySkillActivation[i].SelfBattlePlayer == this) ? battlePlayerPair : battlePlayerPair2, skillConditionCheckerOption));
}
}
public VfxBase StartSkillWhenBattleStart(SkillProcessor skillProcessor)
{
BattlePlayerPair battlePlayerPair = new BattlePlayerPair(this, _opponentBattlePlayer);
BattlePlayerPair battlePlayerPair2 = new BattlePlayerPair(_opponentBattlePlayer, this);
List<BattleCardBase> cardsOrderBySkillActivation = SkillCollectionBase.GetCardsOrderBySkillActivation(this, _opponentBattlePlayer, isAll: false, containsHand: false, containsClass: true);
for (int i = 0; i < cardsOrderBySkillActivation.Count; i++)
{
skillProcessor.Register(cardsOrderBySkillActivation[i].Skills.CreateWhenBattleStartInfo(skillProcessor, (cardsOrderBySkillActivation[i].SelfBattlePlayer == this) ? battlePlayerPair : battlePlayerPair2));
}
return skillProcessor.Process(battlePlayerPair);
}
public static List<IReadOnlyBattleCardInfo> ConvertToSkillInfoCollection(IEnumerable<BattleCardBase> cards)
{
if (cards == null)
{
return new List<IReadOnlyBattleCardInfo>();
}
List<IReadOnlyBattleCardInfo> list = new List<IReadOnlyBattleCardInfo>();
foreach (BattleCardBase card in cards)
{
list.Add(card);
}
return list;
}
public static List<IEnumerable<IReadOnlyBattleCardInfo>> ConvertToSkillInfoCollectionList(List<List<BattleCardBase>> cardsList)
{
if (cardsList == null)
{
return new List<IEnumerable<IReadOnlyBattleCardInfo>>();
}
List<IEnumerable<IReadOnlyBattleCardInfo>> list = new List<IEnumerable<IReadOnlyBattleCardInfo>>();
foreach (List<BattleCardBase> cards in cardsList)
{
List<IReadOnlyBattleCardInfo> item = cards.ToList().ConvertAll<IReadOnlyBattleCardInfo>(ConvertIReadOnlyBattleCardInfo);
list.Add(item);
}
return list;
}
public static IReadOnlyBattleCardInfo ConvertIReadOnlyBattleCardInfo(BattleCardBase card)
{
return card;
}
public void AddLastTargetCardsList(BattleCardBase addCard)
{
if (LastTargetCardsList.Count > 0)
{
LastTargetCardsList.First().Add(addCard);
return;
}
List<BattleCardBase> list = new List<BattleCardBase>();
List<BattleCardBase> item = new List<BattleCardBase>();
list.Add(addCard);
LastTargetCardsList.Add(list);
_opponentBattlePlayer.LastTargetCardsList.Add(item);
}
public List<BattleCardBase> GetLastTargetCardsList(int index)
{
if (0 <= index && index < LastTargetCardsList.Count)
{
return LastTargetCardsList[index];
}
return new List<BattleCardBase>();
}
public void SkillsEndProcess()
{
ReturnList.Clear();
LastTargetCardsList.Clear();
InHandCards.Clear();
HealingCards.Clear();
SkillSummonedCards.Clear();
SummonedCards.Clear();
SkillDiscards.Clear();
SkillBanishCards.Clear();
DrewSkillCard = null;
OkSkillInProcess.Clear();
LastInplayWhiteRitualStack = 0;
Class.SkillApplyInformation.ReservationAllDepriveRepeatSkill();
}
public void OnCallOneSkillProcess()
{
if (OnEndOneSkillProcess != null)
{
OnEndOneSkillProcess();
OnEndOneSkillProcess = null;
}
}
public VfxBase SendShortageDeck()
{
return this.OnShortageDeck.GetAllFuncVfxResults();
}
public void CopyToVirtualBase(BattlePlayerBase target, BattlePlayerBase virtualOpponentBattlePlayer, CloneActualFlags cloneFlags)
{
target._opponentBattlePlayer = virtualOpponentBattlePlayer;
target._skillList = _skillList.ToList();
target.Pp = Pp;
target._ppTotal = _ppTotal;
target.SetCurrentEpCount(CurrentEpCount);
target.EvolveWaitTurnCount = EvolveWaitTurnCount;
target.NowTurnEvol = NowTurnEvol;
target._gameUsedEpCount = _gameUsedEpCount;
target._turnUsedEpCount = _turnUsedEpCount;
target.HandCardList = CloneCardList(HandCardList, target, virtualOpponentBattlePlayer, cloneFlags.Hand);
target.DeckCardList = CloneCardList(DeckCardList, target, virtualOpponentBattlePlayer, cloneFlags.Deck);
target.BattleStartDeckCardList = CloneCardList(BattleStartDeckCardList, target, virtualOpponentBattlePlayer, cloneFlags.Deck);
target.ClassAndInPlayCardList = CloneCardList(ClassAndInPlayCardList, target, virtualOpponentBattlePlayer, cloneFlags.InPlay);
target.CemeteryList = CloneCardList(CemeteryList, target, virtualOpponentBattlePlayer, cloneFlags.Cemetery);
if (target.ClassAndInPlayCardList.Count > 0 && target.ClassAndInPlayCardList[0] is ClassBattleCardBase)
{
target._class = target.ClassAndInPlayCardList[0];
}
else
{
BattleCardBase battleCardBase = target.CemeteryList.FirstOrDefault((BattleCardBase c) => c is ClassBattleCardBase);
if (battleCardBase != null)
{
target._class = battleCardBase;
}
else
{
target._class = _class.VirtualClone(target, virtualOpponentBattlePlayer);
}
}
target.BanishList = CloneCardList(BanishList, target, virtualOpponentBattlePlayer, cloneFlags.Banish);
target.FusionIngredientList = CloneCardList(FusionIngredientList, target, virtualOpponentBattlePlayer, cloneFlags.FusionMaterial);
target.NecromanceZoneList = CloneCardList(NecromanceZoneList, target, virtualOpponentBattlePlayer, cloneFlags.NecromanceZone);
target.UniteList = CloneCardList(UniteList, target, virtualOpponentBattlePlayer, cloneFlags.Unite);
target.GetOnList = CloneCardList(GetOnList, target, virtualOpponentBattlePlayer, cloneFlags.GetOn);
target.SummonedCards = CloneCardList(SummonedCards, target, virtualOpponentBattlePlayer, isActualClone: true);
target.IsSelfTurn = IsSelfTurn;
target.DrewSkillCard = DrewSkillCard;
List<BattleCardBase> list = new List<BattleCardBase>();
list.AddRange(target.HandCardList);
list.AddRange(target.ClassAndInPlayCardList);
list.AddRange(target.DeckCardList);
list.AddRange(target.CemeteryList);
list.AddRange(target.BanishList);
list.AddRange(target.NecromanceZoneList);
list.AddRange(target.FusionIngredientList);
list.AddRange(target.UniteList);
list.AddRange(target.GetOnList);
target.ReturnList = FindClonedIdCards(list, ReturnList);
List<List<BattleCardBase>> list2 = new List<List<BattleCardBase>>();
foreach (List<BattleCardBase> lastTargetCards in LastTargetCardsList)
{
list2.Add(FindClonedIdCards(list, lastTargetCards));
}
target.LastTargetCardsList = list2;
target.InHandCards = FindClonedIdCards(list, InHandCards);
target.SkillDiscards = FindClonedIdCards(list, SkillDiscards);
target.SkillBanishCards = FindClonedIdCards(list, SkillBanishCards);
target.TurnPlayCards = FindClonedIdCards(list, TurnPlayCards);
target.TurnDrawCards = FindClonedIdCards(list, TurnDrawCards);
target.TurnDrawTokenCardsWithId = new List<CardAndId>();
int i;
for (i = 0; i < TurnDrawTokenCardsWithId.Count; i++)
{
target.TurnDrawTokenCardsWithId.Add(new CardAndId(list.FirstOrDefault((BattleCardBase c) => c.EquelsID(TurnDrawTokenCardsWithId[i].Card)), TurnDrawTokenCardsWithId[i].Id));
}
target.GamePlayCards = FindClonedIdCards(list, GamePlayCards);
target.GameCrystallizedPlayCards = FindClonedIdCards(list, GameCrystallizedPlayCards);
target.OkSkillInProcess = OkSkillInProcess.ToList();
target.GameInplayMetamorphoseCards = FindClonedIdCards(list, GameInplayMetamorphoseCards);
target.GameBurialRiteCards = FindClonedIdCards(list, GameBurialRiteCards);
target.TurnBurialRiteCards = FindClonedIdCards(list, TurnBurialRiteCards);
target.EvolvedCards = FindClonedIdCards(AllCards, EvolvedCards);
target.GameDrawCards = FindClonedIdCards(list, GameDrawCards);
target.GameDrawTokenCards = FindClonedIdCards(list, GameDrawTokenCards);
target.GameAddUpdateDeckCards = FindClonedIdCards(list, GameAddUpdateDeckCards);
target.GameLeftCards = FindClonedIdCards(list, GameLeftCards);
target.GameSuperSkyboundArtCards = FindClonedIdCards(list, GameSuperSkyboundArtCards);
List<BattleCardBase> list3 = FindClonedIdCards(list, GameTurnLeftCards.Select((TurnAndCard c) => c.Card as BattleCardBase));
for (int num = 0; num < list3.Count; num++)
{
target.GameTurnLeftCards.Add(new TurnAndCard(GameTurnLeftCards[num].Turn, GameTurnLeftCards[num].IsSelfTurn, list3[num], GameTurnLeftCards[num].IsTurnEnd));
}
List<BattleCardBase> list4 = FindClonedIdCards(list, GameSummonCards.Select((TurnAndCard c) => c.Card as BattleCardBase));
for (int num2 = 0; num2 < list4.Count; num2++)
{
target.GameSummonCards.Add(new TurnAndCard(GameSummonCards[num2].Turn, GameSummonCards[num2].IsSelfTurn, list4[num2], GameSummonCards[num2].IsTurnEnd));
}
for (int num3 = 0; num3 < GameSummonMomentTribe.Count; num3++)
{
target.GameSummonMomentTribe.Add(new CardAndTribe(GameSummonMomentTribe[num3].Card, GameSummonMomentTribe[num3].Tribes));
}
for (int num4 = 0; num4 < GamePlayMomentTribe.Count; num4++)
{
target.GamePlayMomentTribe.Add(new CardAndTribe(GamePlayMomentTribe[num4].Card, GamePlayMomentTribe[num4].Tribes));
}
for (int num5 = 0; num5 < GamePlayMomentSpellChargeCards.Count; num5++)
{
target.GamePlayMomentSpellChargeCards.Add(GamePlayMomentSpellChargeCards[num5].Card);
}
for (int num6 = 0; num6 < GameUpdateDeckMomentTribe.Count; num6++)
{
target.GameUpdateDeckMomentTribe.Add(new CardAndTribe(GameUpdateDeckMomentTribe[num6].Card, GameUpdateDeckMomentTribe[num6].Tribes));
}
List<BattleCardBase> list5 = FindClonedIdCards(list, GameReanimatedCards.Select((TurnAndCard c) => c.Card as BattleCardBase));
for (int num7 = 0; num7 < list5.Count; num7++)
{
target.GameReanimatedCards.Add(new TurnAndCard(GameReanimatedCards[num7].Turn, GameReanimatedCards[num7].IsSelfTurn, list5[num7], GameReanimatedCards[num7].IsTurnEnd));
}
List<BattleCardBase> list6 = FindClonedIdCards(list, GameReturnedCards.Select((TurnAndCard c) => c.Card as BattleCardBase));
for (int num8 = 0; num8 < list6.Count; num8++)
{
target.GameReturnedCards.Add(new TurnAndCard(GameReturnedCards[num8].Turn, GameReturnedCards[num8].IsSelfTurn, list6[num8], GameReturnedCards[num8].IsTurnEnd));
}
List<BattleCardBase> list7 = FindClonedIdCards(list, GameTurnPlayCards.Select((TurnAndCard c) => c.Card as BattleCardBase));
for (int num9 = 0; num9 < list7.Count; num9++)
{
target.GameTurnPlayCards.Add(new TurnAndCard(GameTurnPlayCards[num9].Turn, GameTurnPlayCards[num9].IsSelfTurn, list7[num9], GameTurnPlayCards[num9].IsTurnEnd));
}
List<BattleCardBase> list8 = FindClonedIdCards(list, GameEnhancePlayCards.Select((TurnAndCard c) => c.Card as BattleCardBase));
for (int num10 = 0; num10 < list8.Count; num10++)
{
target.GameEnhancePlayCards.Add(new TurnAndCard(GameEnhancePlayCards[num10].Turn, GameEnhancePlayCards[num10].IsSelfTurn, list8[num10], GameEnhancePlayCards[num10].IsTurnEnd));
}
for (int num11 = 0; num11 < TurnPlayCardCountInfo.Count; num11++)
{
TurnAndIntValue turnAndIntValue = TurnPlayCardCountInfo[num11];
target.TurnPlayCardCountInfo.Add(new TurnAndIntValue(turnAndIntValue.Value, turnAndIntValue.Turn, turnAndIntValue.IsSelfTurn));
}
for (int num12 = 0; num12 < TurnFusionCountInfo.Count; num12++)
{
TurnAndIntValue turnAndIntValue2 = TurnFusionCountInfo[num12];
target.TurnFusionCountInfo.Add(new TurnAndIntValue(turnAndIntValue2.Value, turnAndIntValue2.Turn, turnAndIntValue2.IsSelfTurn));
}
target.extraTurnCount = extraTurnCount;
target.cardTotalNum = cardTotalNum;
for (int num13 = 0; num13 < TurnEvolveCardCountInfo.Count; num13++)
{
TurnAndIntValue turnAndIntValue3 = TurnEvolveCardCountInfo[num13];
target.TurnEvolveCardCountInfo.Add(new TurnAndIntValue(turnAndIntValue3.Value, turnAndIntValue3.Turn, turnAndIntValue3.IsSelfTurn));
}
target.IsShortageDeck = IsShortageDeck;
target.RallyCount = RallyCount;
target.DeckBanishCount = DeckBanishCount;
target.GameResonanceStartCount = GameResonanceStartCount;
target.TurnResonanceStartCount = TurnResonanceStartCount;
target.GameNecromanceCount = GameNecromanceCount;
target.GameUsedPpCount = GameUsedPpCount;
target.GameUsedWhiteRitualCount = GameUsedWhiteRitualCount;
target.LastInplayWhiteRitualStack = LastInplayWhiteRitualStack;
for (int num14 = 0; num14 < GameSkillReturnCardCountList.Count; num14++)
{
TurnAndIntValue turnAndIntValue4 = GameSkillReturnCardCountList[num14];
target.GameSkillReturnCardCountList.Add(new TurnAndIntValue(turnAndIntValue4.Value, turnAndIntValue4.Turn, turnAndIntValue4.IsSelfTurn));
}
for (int num15 = 0; num15 < GameSkillDiscardCountList.Count; num15++)
{
TurnAndIntValue turnAndIntValue5 = GameSkillDiscardCountList[num15];
target.GameSkillDiscardCountList.Add(new TurnAndIntValue(turnAndIntValue5.Value, turnAndIntValue5.Turn, turnAndIntValue5.IsSelfTurn));
}
for (int num16 = 0; num16 < GameSkillBuffCountList.Count; num16++)
{
TurnAndIntValue turnAndIntValue6 = GameSkillBuffCountList[num16];
target.GameSkillBuffCountList.Add(new TurnAndIntValue(turnAndIntValue6.Value, turnAndIntValue6.Turn, turnAndIntValue6.IsSelfTurn));
}
for (int num17 = 0; num17 < GameSkillMetamorphoseCountList.Count; num17++)
{
TurnAndIntValue turnAndIntValue7 = GameSkillMetamorphoseCountList[num17];
target.GameSkillMetamorphoseCountList.Add(new TurnAndIntValue(turnAndIntValue7.Value, turnAndIntValue7.Turn, turnAndIntValue7.IsSelfTurn));
}
target.GameSkillDiscardCount = GameSkillDiscardCount;
}
private List<BattleCardBase> CloneCardList(ICollection<BattleCardBase> sourceCards, BattlePlayerBase virtualSelfBattlePlayer, BattlePlayerBase virtualOpponentBattlePlayer, bool isActualClone)
{
if (isActualClone)
{
List<BattleCardBase> list = new List<BattleCardBase>(sourceCards.Count);
for (int i = 0; i < sourceCards.Count; i++)
{
list.Add(sourceCards.ElementAt(i).VirtualClone(virtualSelfBattlePlayer, virtualOpponentBattlePlayer));
}
return list;
}
List<BattleCardBase> list2 = new List<BattleCardBase>(sourceCards.Count);
for (int j = 0; j < sourceCards.Count; j++)
{
list2.Add(CardCreatorBase.CreateDummyInstance());
}
return list2;
}
private List<BattleCardBase> FindClonedIdCards(IEnumerable<BattleCardBase> clonedCardList, IEnumerable<BattleCardBase> findIdCardList)
{
List<BattleCardBase> list = new List<BattleCardBase>();
if (findIdCardList == null)
{
return list;
}
foreach (BattleCardBase uniqId in findIdCardList)
{
if (uniqId != null)
{
BattleCardBase battleCardBase = clonedCardList.SingleOrDefault((BattleCardBase c) => c.EquelsID(uniqId));
if (battleCardBase != null)
{
list.Add(battleCardBase);
}
}
}
return list;
}
public bool CheckPlayableCards()
{
List<BattleCardBase> handCardList = HandCardList;
for (int i = 0; i < handCardList.Count; i++)
{
if (handCardList[i].Movable(isCheckOnDraw: false, isSkipSelecting: true))
{
return true;
}
}
return false;
}
public bool CheckAttackableCards()
{
List<BattleCardBase> inPlayCardList = InPlayCards.ToList();
int i = 0;
while (i < inPlayCardList.Count)
{
if (inPlayCardList[i].Attackable)
{
IEnumerable<BattleCardBase> source = _opponentBattlePlayer.InPlayCards.Where((BattleCardBase c) => c.IsUnit && !c.CantBeFocusedAttack(inPlayCardList[i]));
if (!inPlayCardList[i].IsCantAttackClass || source.Any())
{
IEnumerable<BattleCardBase> source2 = source.Where((BattleCardBase c) => c.SkillApplyInformation.IsGuard);
if ((!inPlayCardList[i].SkillApplyInformation.IsSkillCantAtkUnitNotHasGuard || source2.Any() || !inPlayCardList[i].IsCantAttackClass) && (!inPlayCardList[i].SkillApplyInformation.IsSkillCantAtkUnit || !source2.Any() || inPlayCardList[i].SkillApplyInformation.IsIgnoreGuard) && (!inPlayCardList[i].SkillApplyInformation.IsSkillCantAtkUnitBaseCardId || ((!source2.Any() || !source2.All((BattleCardBase c) => inPlayCardList[i].SkillApplyInformation.CantAtkUnitBaseCardIdList.Contains(c.BaseParameter.BaseCardId)) || inPlayCardList[i].SkillApplyInformation.IsIgnoreGuard) && (!source.Any() || !source.All((BattleCardBase c) => inPlayCardList[i].SkillApplyInformation.CantAtkUnitBaseCardIdList.Contains(c.BaseParameter.BaseCardId)) || !inPlayCardList[i].IsCantAttackClass))))
{
return true;
}
}
}
int num = i + 1;
i = num;
}
return false;
}
public bool CheckNotConsumeEpCard(BattleCardBase card)
{
foreach (BattleCardBase inPlayCard in InPlayCards)
{
if (inPlayCard.SkillApplyInformation.CheckNotConsumeEpCard(card))
{
return true;
}
}
return false;
}
public IEnumerable<IReadOnlyBattleCardInfo> GetSpecificTurnDestroyCards(TurnPlayerInfo turnPlayerInfo)
{
BattleManagerBase ins = BattleManagerBase.GetIns();
bool isCheckSelf = IsPlayer == turnPlayerInfo.IsSelfPlayer;
int turn = (isCheckSelf ? ins.BattlePlayer.Turn : ins.BattleEnemy.Turn);
turn -= turnPlayerInfo.TurnOffset;
return from c in TurnDestroyCards
where c.IsSelfTurn == isCheckSelf && c.Turn == turn
select c.Card;
}
public VfxBase UpdateInPlayBattleCardIconLabel()
{
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
for (int i = 1; i < ClassAndInPlayCardList.Count; i++)
{
if (!(ClassAndInPlayCardList[i].BattleCardView.BattleCardIconAnimations == null) && ClassAndInPlayCardList[i].BattleCardView.BattleCardIconAnimations.HasInductionNumberSkill())
{
sequentialVfxPlayer.Register(ClassAndInPlayCardList[i].BattleCardView.UpdateBattleCardIconLabelNumber(ClassAndInPlayCardList[i], ClassAndInPlayCardList[i].Skills));
}
}
return sequentialVfxPlayer;
}
public int GetSpecificTurnWhenHealingCount(TurnPlayerInfo turnPlayerInfo, bool isTextKeyword)
{
bool isCheckSelf = IsPlayer == turnPlayerInfo.IsSelfPlayer;
if (isTextKeyword && isCheckSelf == IsPlayer && !IsSelfTurn)
{
return 0;
}
int turn = (isCheckSelf ? BattleMgr.BattlePlayer.Turn : BattleMgr.BattleEnemy.Turn);
turn -= turnPlayerInfo.TurnOffset;
return TurnWhenHealingCount.FirstOrDefault((TurnAndIntValue c) => c.IsSelfTurn == isCheckSelf && c.Turn == turn)?.Value ?? 0;
}
public int GetSpecificTurnSkillReturnCardCount(TurnPlayerInfo turnPlayerInfo)
{
bool isCheckSelf = turnPlayerInfo.IsSelfPlayer;
int turn = ((IsPlayer == isCheckSelf) ? BattleMgr.BattlePlayer.Turn : BattleMgr.BattleEnemy.Turn);
turn -= turnPlayerInfo.TurnOffset;
return GameSkillReturnCardCountList.FirstOrDefault((TurnAndIntValue c) => c.IsSelfTurn == isCheckSelf && c.Turn == turn)?.Value ?? 0;
}
public int GetSpecificTurnSkillDiscardCount(TurnPlayerInfo turnPlayerInfo)
{
bool isCheckSelf = turnPlayerInfo.IsSelfPlayer;
int turn = ((IsPlayer == isCheckSelf) ? BattleMgr.BattlePlayer.Turn : BattleMgr.BattleEnemy.Turn);
turn -= turnPlayerInfo.TurnOffset;
return GameSkillDiscardCountList.FirstOrDefault((TurnAndIntValue c) => c.IsSelfTurn == isCheckSelf && c.Turn == turn)?.Value ?? 0;
}
public int GetSpecificTurnEnhanceCardCount(TurnPlayerInfo turnPlayerInfo)
{
bool isSelfPlayer = turnPlayerInfo.IsSelfPlayer;
int num = ((IsPlayer == isSelfPlayer) ? BattleMgr.BattlePlayer.Turn : BattleMgr.BattleEnemy.Turn);
num -= turnPlayerInfo.TurnOffset;
List<IReadOnlyBattleCardInfo> list = new List<IReadOnlyBattleCardInfo>();
for (int i = 0; i < GameEnhancePlayCards.Count; i++)
{
if (GameEnhancePlayCards[i].Turn == num && GameEnhancePlayCards[i].IsSelfTurn == BattleMgr.BattlePlayer.IsSelfTurn)
{
list.Add(GameEnhancePlayCards[i].Card);
}
}
return list.Count;
}
public int GetCurrentTurnPlayCount()
{
return TurnPlayCardCountInfo.FirstOrDefault((TurnAndIntValue c) => c.IsSelfTurn == BattleMgr.BattlePlayer.IsSelfTurn && c.Turn == BattleMgr.CurrentTurn)?.Value ?? 0;
}
public void AddCurrentTrunPlayCount(int count)
{
TurnAndIntValue turnAndIntValue = TurnPlayCardCountInfo.FirstOrDefault((TurnAndIntValue c) => c.IsSelfTurn == BattleMgr.BattlePlayer.IsSelfTurn && c.Turn == BattleMgr.CurrentTurn);
if (turnAndIntValue != null)
{
turnAndIntValue.AddValue(count);
}
else
{
TurnPlayCardCountInfo.Add(new TurnAndIntValue(count, BattleMgr.CurrentTurn, BattleMgr.BattlePlayer.IsSelfTurn));
}
}
public int GetSpecificTurnPlayCount(TurnPlayerInfo turnPlayerInfo)
{
bool isCheckSelf = IsPlayer == turnPlayerInfo.IsSelfPlayer;
int turn = (isCheckSelf ? BattleMgr.BattlePlayer.Turn : BattleMgr.BattleEnemy.Turn);
turn -= turnPlayerInfo.TurnOffset;
return TurnPlayCardCountInfo.FirstOrDefault((TurnAndIntValue c) => c.IsSelfTurn == isCheckSelf && c.Turn == turn)?.Value ?? 0;
}
public void AddCurrentTurnFusionCount(int count)
{
TurnAndIntValue turnAndIntValue = TurnFusionCountInfo.FirstOrDefault((TurnAndIntValue c) => c.IsSelfTurn == BattleMgr.BattlePlayer.IsSelfTurn && c.Turn == BattleMgr.CurrentTurn);
if (turnAndIntValue != null)
{
turnAndIntValue.AddValue(count);
}
else
{
TurnFusionCountInfo.Add(new TurnAndIntValue(count, BattleMgr.CurrentTurn, BattleMgr.BattlePlayer.IsSelfTurn));
}
}
public void AddCurrentEvolvePlayCount(int count)
{
TurnAndIntValue turnAndIntValue = TurnEvolveCardCountInfo.FirstOrDefault((TurnAndIntValue c) => c.IsSelfTurn == BattleMgr.BattlePlayer.IsSelfTurn && c.Turn == BattleMgr.CurrentTurn);
if (turnAndIntValue != null)
{
turnAndIntValue.AddValue(count);
}
else
{
TurnEvolveCardCountInfo.Add(new TurnAndIntValue(count, BattleMgr.CurrentTurn, BattleMgr.BattlePlayer.IsSelfTurn));
}
}
public int GetCurrentTurnEvolveCount()
{
return TurnEvolveCardCountInfo.FirstOrDefault((TurnAndIntValue c) => c.IsSelfTurn == BattleMgr.BattlePlayer.IsSelfTurn && c.Turn == BattleMgr.CurrentTurn)?.Value ?? 0;
}
public int GetSpecificTurnEvolveCount(TurnPlayerInfo turnPlayerInfo)
{
bool isCheckSelf = IsPlayer == turnPlayerInfo.IsSelfPlayer;
int turn = (isCheckSelf ? BattleMgr.BattlePlayer.Turn : BattleMgr.BattleEnemy.Turn);
turn -= turnPlayerInfo.TurnOffset;
return TurnEvolveCardCountInfo.FirstOrDefault((TurnAndIntValue c) => c.IsSelfTurn == isCheckSelf && c.Turn == turn)?.Value ?? 0;
}
public int GetAttachTurnBySkillId(string id)
{
for (int i = 0; i < Class.Skills.Count(); i++)
{
if (Class.Skills.ElementAt(i).GetAttachSkill is Skill_attach_skill skill_attach_skill && skill_attach_skill.SaveTurnSkillId == id)
{
return skill_attach_skill.AttachedTurn;
}
}
return 0;
}
public VfxWithLoading CreateTokenSpawnVfx(BattleCardBase firstToken)
{
Color color;
switch (firstToken.Clan)
{
case CardBasePrm.ClanType.MIN:
color = Global.EFFECT_COLOR_ELF;
break;
case CardBasePrm.ClanType.ROYAL:
color = Global.EFFECT_COLOR_ROYAL;
break;
case CardBasePrm.ClanType.WITCH:
color = Global.EFFECT_COLOR_WITCH_1;
break;
case CardBasePrm.ClanType.DRAGON:
color = Global.EFFECT_COLOR_DRAGON;
break;
case CardBasePrm.ClanType.NECRO:
color = Global.EFFECT_COLOR_NECROMANCER;
break;
case CardBasePrm.ClanType.VAMPIRE:
color = Global.EFFECT_COLOR_VANPIRE;
break;
case CardBasePrm.ClanType.BISHOP:
color = Global.EFFECT_COLOR_BISHOP;
break;
case CardBasePrm.ClanType.NEMESIS:
color = Global.EFFECT_COLOR_NEMESIS;
break;
default:
color = Color.clear;
break;
}
Func<Vector3> getEffectSpawnPoint = () => firstToken.BattleCardView.GameObject.transform.position;
EffectBattle effectBattle = null;
SkillBase.WaitEffectLoadVfx loadingVfx = new SkillBase.WaitEffectLoadVfx("cmn_token_draw_1", EffectMgr.EngineType.SHURIKEN, "se_cmn_token_draw_1", BattleMgr.BattleResourceMgr, delegate(EffectBattle eb)
{
effectBattle = eb;
});
DelaySetupVfx mainVfx = new DelaySetupVfx(() => new SkillEffectBattleVfx(effectBattle, firstToken.BattleCardView, BattleMgr.BattleResourceMgr, getEffectSpawnPoint, getEffectSpawnPoint, 0f, 0f, EffectMgr.MoveType.DIRECT, IsPlayer, color));
return VfxWithLoading.Create(loadingVfx, mainVfx);
}
public void CallOnTokenDraw(BattleCardBase owner, List<BattleCardBase> drawList, List<BattleCardBase> targets, bool isPlayer, bool isOpen, bool isReserved)
{
this.OnTokenDrawCards.Call(owner, drawList, targets, isPlayer, isOpen, isReserved);
}
public void CallOnCreateReservedCards(BattleCardBase owner, List<BattleCardBase> drawList, bool isPlayer)
{
this.OnCreateReservedCards.Call(owner, drawList, isPlayer);
}
public void CallOnCostChange(BattleCardBase card, List<BattleCardBase> targets, List<int> addList, List<int> setList, List<bool> isCostUpList, bool isHalf, bool isSpellCharge, bool isOpenCard)
{
this.OnCostChange.Call(card, targets, addList, setList, isCostUpList, isHalf, isSpellCharge, isOpenCard);
}
public void CallOnRemoveCostChange(List<SkillBase.BuffInfoContainer> targetList, bool isSpellCharge, bool isAdd)
{
this.OnRemoveCostChange.Call(targetList, isSpellCharge, isAdd);
}
public void CallOnPowerUp(BattleCardBase card, List<BattleCardBase> cards, int offense, int life, int multiplyOffense, int multiplyLife, int maxLife)
{
this.OnPowerUp.Call(card, cards, offense, life, multiplyOffense, multiplyLife, maxLife);
}
public void CallOnPowerDownStart()
{
this.OnPowerDownStart.Call();
}
public void CallOnPowerDown(BattleCardBase card, List<BattleCardBase> cards, int offense, int life, int maxLife, bool isSet)
{
this.OnPowerDown.Call(card, cards, offense, life, maxLife, isSet);
}
public void CallOnDeprivePowerUp(List<Skill_powerup.PowerUpModifierContainer> targetList)
{
this.OnDeprivePowerUp.Call(targetList);
}
public void CallOnDeprivePowerDown(List<SkillBase.BuffInfoContainer> targetList)
{
this.OnDeprivePowerDown.Call(targetList);
}
public void CallOnSpellCharge(BattleCardBase card, List<BattleCardBase> targets, List<int> addList)
{
this.OnSpellCharge.Call(card, targets, addList);
}
public void CallOnDrain(int heal)
{
this.OnDrain.Call(heal);
}
public void CallOnSkillDamageStart(BattleCardBase card)
{
this.OnSkillDamageStart.Call(card);
}
public void CallOnDamage(List<BattleCardBase> cards, List<BattleCardBase> effectTargets, List<BattleCardBase.DamageResult> damageList)
{
this.OnDamage.Call(cards, effectTargets, damageList);
}
public void CallOnHeal(BattleCardBase ownerCard, List<BattleCardBase> cards, List<int> healList)
{
this.OnHeal.Call(ownerCard, cards, healList);
}
public void CallOnDiscard(List<BattleCardBase> targets)
{
this.OnDiscard.Call(targets);
}
public void CallOnSkillDestroyOrBanish(BattleCardBase card, bool isBurialRite = false, bool isOpen = false)
{
this.OnSkillDestroyOrBanish.Call(card, isBurialRite, isOpen);
}
public void CallOnPlayVoiceOnDeath(BattleCardBase card)
{
this.OnPlayVoiceOnDeath.Call(card);
}
public void CallOnSkillReturn()
{
this.OnSkillReturn.Call();
}
public void CallOnAddPp(int addPpCount, BattleCardBase card)
{
this.OnAddPp.Call(addPpCount, IsPlayer, card);
}
public void CallOnAddBp(int addBpCount, BattleCardBase card)
{
this.OnAddBp.Call(addBpCount, IsPlayer, card);
}
public void CallOnEpModifier(BattleCardBase card, int epCount, bool isAdd)
{
this.OnEpModifier.Call(card, epCount, IsPlayer, isAdd);
}
public void CallOnBeforeSkillEvolve(BattleCardBase card, List<BattleCardBase> targets)
{
this.OnBeforeSkillEvolve.Call(card, targets);
}
public void CallOnEvolveMeWhenAttack(BattleCardBase card)
{
this.OnEvolveMeWhenAttack.Call(card);
}
public void CallOnAfterSkillEvolve(List<BattleCardBase> targets)
{
this.OnAfterSkillEvolve.Call(targets);
}
public void CallOnPlayCard(BattleCardBase originalCard, BattleCardBase playCard, bool isChoiceBrave)
{
this.OnPlayCard.Call(originalCard, playCard, isChoiceBrave);
}
public void CallOnWhenPlayEffect(SkillCollectionBase.WhenPlayEffectType whenPlayEffectType, BattleCardBase target, bool isInvoked)
{
this.OnWhenPlayEffect.Call(whenPlayEffectType, target, isInvoked);
}
public void CallOnChantCountChange(BattleCardBase card, List<BattleCardBase> targets, int changeCount)
{
this.OnChantCountChange.Call(card, targets, changeCount);
}
public void CallOnChangeWhiteRitualStack(BattleCardBase target, int changeCount, bool isDestroy = false)
{
this.OnChangeWhiteRitualStack.Call(target, changeCount, isDestroy);
}
public void CallOnChangeMaxAttackableCount(BattleCardBase card, List<BattleCardBase> targets, int changeCount)
{
this.OnChangeMaxAttackableCount.Call(card, targets, changeCount);
}
public void CallOnMetamorphose(BattleCardBase card, List<BattleCardBase> targets, int cardId)
{
this.OnMetamorphose.Call(card, targets, cardId);
}
public void CallOnFusionMetamorphose(int fusionMetamorphoseCardId)
{
this.OnFusionMetamorphose.Call(fusionMetamorphoseCardId);
}
public void CallOnOpenCard(BattleCardBase card)
{
this.OnOpenCard.Call(card);
}
public void CallOnUnite(BattleCardBase ownerCard, List<BattleCardBase> targets, BattleCardBase uniteCard)
{
this.OnUnite.Call(ownerCard, targets, uniteCard);
}
public void CallOnRemoveLatestOperationJsonData(NetworkBattleReceiver.ReplayOperationType type)
{
this.OnRemoveLatestOperationJsonData.Call(type);
}
public void CallOnEmotion(ClassCharaPrm.EmotionType emotionType)
{
this.OnEmotion.Call(emotionType, IsPlayer);
}
public void CallOnClearDestroyedCardList(bool isPlayer)
{
this.OnClearDestroyedCardList.Call(isPlayer);
}
}