using System; using System.Collections.Generic; using System.Linq; using Cute; using LitJson; using Wizard; using Wizard.Battle; using Wizard.Battle.Replay; using Wizard.Battle.UI; using Wizard.Battle.View; using Wizard.Battle.View.Vfx; public class OperateMgr { private readonly BattleManagerBase _battleMgr; private readonly IPlayerView _PlayerBattleView; private TouchControl _TouchControl; public BattleLogManager BattleLogManager { get; private set; } public event Action> OnSkillCardSelect; public event Func OnSkillCardSelectSuccess; public event Func OnPlayerSetCard; public event Func OnPlayerAttack; public event Func OnPlayerBattleCardSelect; public event Func OnPlayerEvolve; public event Func OnPlayerFusion; public event Action OnBeforeSetCard; public event Action OnSetCard; public event Action> OnSetCardSuccess; public event Func OnSetCardComplete; public event Func OnSetCardExecuted; public event Func OnBeforeAttack; public event Func OnAttackAfter; public event Action OnBattleCardSelect; public event Func OnAttackExecuted; public event Action OnAttackDamageExecuted; public event Action OnAttackProcessComplete; public event Action OnAttackStart; public event Action OnBeforeEvolve; public event Action> OnEvolveSuccess; public event Action OnJustBeforeEvolve; public event Action OnRightAfterEvolve; public event Action> OnBeforeFusion; public event Func OnEvoleComplete; public event Func OnAfterFusion; public event Action OnTurnEnd; public event Action OnBeforePlayerTurnEnd; public event Action OnTurnEnd_ButtonPush; public event Action, bool> OnStartSelect; public event Action OnSelect; public event Action, bool> OnStartMultipleSelect; public event Action OnCompleteSelect; public event Action, bool> OnStartChoice; public event Action, BattleCardBase, List, bool, bool> OnCompleteChoice; public event Action OnCancelSelect; public event Action OnCancelChoice; public event Action> OnStartFusion; public event Action OnSelectFusion; public event Action OnSelectFusionForRecovery; public event Action OnCancelFusion; public event Action OnSkillProcessStart; public event Action OnSkillProcessEnd; public event Action OnSkillVfxStart; public event Action OnSkillVfxEnd; public event Func OnCreateSideLogCardData; public event Action OnCreateSideLog; public event Action OnClearSideLog; public event Action OnCreateBattleLog; public event Action OnUpdateBattleLog; public event Action OnUpdateBattleLogType; public event Action OnUpdateBattleLogIsNecromance; public event Action OnRemoveLatestBattleLog; public event Action, BattleCardBase> OnAttachSkill; public event Action OnCreateEffect; public event Action OnCreateEffectWithoutBuildInfo; public event Action> OnShowSkillEffect; public event Action OnSkillInductionEffect; public event Action> OnShowIndependentEffect; public event Action, CardBasePrm.ClanType, CardBasePrm.TribeInfo> OnChangeAffiliation; public event Action, List> OnUpdateAttackableEffect; public event Action, bool, bool, bool> OnUpdateSkillEffect; public event Action> OnChangeUnionBurstAndSkyboundArt; public event Action OnShowRepeatSkillEffect; public event Action> OnGiveCantActivateFanfare; public event Action> OnDepriveCantActivateFanfare; public event Action> OnLoseSkill; public event Action OnAttachShortageDeckWin; public event Action OnSpecialWin; public event Action OnSpecialLose; public event Action OnEnterForceBerserk; public event Action OnTurnEndFinish; public void SetUpRecoveryEvent(OperateMgr recoveryOperateMgr) { this.OnBeforeAttack = recoveryOperateMgr.OnBeforeAttack; this.OnTurnEnd_ButtonPush = recoveryOperateMgr.OnTurnEnd_ButtonPush; } public OperateMgr(BattleManagerBase battleMgr, TouchControl touchControl) { _battleMgr = battleMgr; _TouchControl = touchControl; _PlayerBattleView = _battleMgr.BattlePlayer.PlayerBattleView; _battleMgr.SetUpOperateEvent(this); BattleLogManager = BattleLogManager.GetInstance(); } public void SetTouchControl(TouchControl touchControl) { _TouchControl = touchControl; } private ActionProcessor CreateActionProcessor(bool isPlayer) { ActionProcessor actionProcessor = new ActionProcessor(_battleMgr.GetBattlePlayerPair(isPlayer)); _battleMgr.SetupActionProcessorEvent(actionProcessor, isPlayer); return actionProcessor; } public virtual VfxBase InitSetCard(BattleCardBase card, bool isPlayer, bool isSelect = false, bool isRecovery = false, bool isChoiceSelect = false, bool isAccelerateSelect = false, bool registerDirectlyToVfxManager = true, bool isFusionWait = false, bool isChoiceBrave = false) { this.OnBeforeSetCard.Call(card); SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create(); bool isSelectTarget = GameMgr.GetIns().IsAdminWatch && (isAccelerateSelect || card.Skills.CheckWhenPlaySelectTargetSkillCondition); if (isPlayer || GameMgr.GetIns().IsAdminWatch) { PlayQueueViewBase playQueueView = _battleMgr.GetBattlePlayer(isPlayer).BattleView.PlayQueueView; _battleMgr.VfxMgr.RegisterImmediateVfx(card.StopSpellCharge()); VfxBase vfx = playQueueView.AddCardToViewVfx(forceCardIntoPlayQueue: !isRecovery && (isAccelerateSelect || card.Skills.CheckWhenPlaySelectTargetSkillCondition) && !isFusionWait, playedCardView: card.BattleCardView, isSelectTarget: isSelectTarget, isChoice: isChoiceSelect, isChoiceBrave: isChoiceBrave); if (registerDirectlyToVfxManager) { _battleMgr.VfxMgr.RegisterImmediateVfx(vfx); if (!isPlayer && GameMgr.GetIns().IsAdminWatch && !isSelect && !isAccelerateSelect && !isFusionWait) { sequentialVfxPlayer.Register(WaitVfx.Create(0.5f)); } } else { sequentialVfxPlayer.Register(vfx); } } else { PlayQueueViewBase playQueueView2 = _battleMgr.BattleEnemy.BattleView.PlayQueueView; bool forceCardIntoPlayQueue = !isRecovery && card.IsSpell; sequentialVfxPlayer.Register(playQueueView2.AddCardToViewVfx(card.BattleCardView, forceCardIntoPlayQueue, isSelectTarget, isChoiceSelect)); } VfxBase vfxBase = NullVfx.GetInstance(); if (isPlayer && isSelect) { vfxBase = this.OnPlayerSetCard.GetAllFuncVfxResults(); } return SequentialVfxPlayer.Create(vfxBase, sequentialVfxPlayer); } protected ActionProcessor CreateSetCardActionProcessor(bool isPlayer) { ActionProcessor actionProcessor = CreateActionProcessor(isPlayer); actionProcessor.OnBeforePlayCard += this.OnSetCardSuccess; actionProcessor.OnAfterPlayCard += this.OnSetCardComplete; if (!_battleMgr.IsVirtualBattle) { actionProcessor.OnBeforePlayCard += delegate(BattleCardBase originalCard, BattleCardBase _card, IEnumerable _) { if (originalCard != _card && originalCard.Skills.Any((SkillBase s) => s.OnWhenAccelerate != 0)) { BattleLogManager.BeginLogAccelerate(_card); } else if (originalCard != _card && originalCard.Skills.Any((SkillBase s) => s.OnWhenCrystallize != 0)) { BattleLogManager.BeginLogCrystallize(_card); } else if (originalCard == _card || !originalCard.Skills.HaveBeforeChoiceSkill()) { BattleLogManager.BeginLogBlockPlay(_card); } }; actionProcessor.OnAfterPlayCard += (BattleCardBase _card) => BattleLogManager.EndLogBlockPlay(); } return actionProcessor; } public virtual VfxBase PlayCard(BattleCardBase card, bool isPlayer, List selectCards, bool isRecovery = false, List selectChoiceId = null, bool isChoiceBrave = false) { if (isPlayer) { _battleMgr.BattlePlayer.PlayCardTouchCount++; } ActionProcessor actionProcessor = CreateSetCardActionProcessor(isPlayer); bool flag = selectCards.IsNotNullOrEmpty(); actionProcessor.OnAfterPlayCard += this.OnSetCardExecuted; actionProcessor.OnAfterPlayCard += (BattleCardBase c) => c.SelfBattlePlayer.UpdateHandCardsCost(); VfxBase vfxBase = NullVfx.GetInstance(); if (isPlayer) { vfxBase = (flag ? this.OnPlayerBattleCardSelect.GetAllFuncVfxResults() : this.OnPlayerSetCard.GetAllFuncVfxResults()); } this.OnSetCard.Call(card); return SequentialVfxPlayer.Create(actionProcessor.PlayCard(card, selectCards, selectChoiceId, isChoiceBrave), vfxBase, InstantVfx.Create(delegate { if (!_PlayerBattleView.IsMoving()) { _PlayerBattleView.UpdateTurnEndPulseEffect(); } })); } public virtual VfxBase Attack(BattleCardBase attackCard, BattleCardBase targetCard, bool isPlayer) { SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create(); if (attackCard.SkillApplyInformation.RandomAttackCount > 0) { IBattlePlayerView battleView = targetCard.SelfBattlePlayer.BattleView; sequentialVfxPlayer.Register(battleView.CreateStopAttackFloatVfx(targetCard.BattleCardView)); sequentialVfxPlayer.Register(battleView.AttackSelectControl.ResetCardAfterAttack(targetCard.BattleCardView)); List list = new List(); list.AddRange(attackCard.SelfBattlePlayer.ClassAndInPlayCardList.Where((BattleCardBase c) => c != attackCard)); list.AddRange(attackCard.OpponentBattlePlayer.ClassAndInPlayCardList); list = list.Where((BattleCardBase c) => (c.IsUnit || c.IsClass) && !c.CantBeFocusedAttack(attackCard)).ToList(); targetCard = list[attackCard.SelfBattlePlayer.BattleMgr.StableRandom(list.Count)]; } SequentialVfxPlayer sequentialVfxPlayer2 = SequentialVfxPlayer.Create(); if (_battleMgr.IsBattleEnd) { return NullVfx.GetInstance(); } SkillProcessor skillProcessor = new SkillProcessor(); sequentialVfxPlayer.Register(this.OnBeforeAttack.GetAllFuncVfxResults(attackCard, targetCard, skillProcessor)); sequentialVfxPlayer.Register(skillProcessor.Process(new BattlePlayerPair(attackCard.SelfBattlePlayer, attackCard.OpponentBattlePlayer))); ActionProcessor actionProcessor = CreateAttackActionProcessor(attackCard, targetCard, isPlayer); sequentialVfxPlayer.Register(actionProcessor.Attack(attackCard, targetCard)); if (isPlayer) { sequentialVfxPlayer2.Register(this.OnPlayerAttack.GetAllFuncVfxResults(attackCard, targetCard)); } sequentialVfxPlayer2.Register(this.OnAttackAfter.GetAllFuncVfxResults(attackCard, targetCard)); return SequentialVfxPlayer.Create(sequentialVfxPlayer, sequentialVfxPlayer2); } protected ActionProcessor CreateAttackActionProcessor(BattleCardBase attackCard, BattleCardBase targetCard, bool isPlayer) { ActionProcessor actionProcessor = CreateActionProcessor(isPlayer); actionProcessor.OnBeforeAttack += () => BattleLogManager.SetupWarActionLog(); actionProcessor.OnBeforeAttackSkillComplete += () => BattleLogManager.BeginLogBlockWar(attackCard, targetCard); actionProcessor.OnAfterAttack += BattleLogManager.EndLogBlockWar; actionProcessor.OnAfterAttack += this.OnAttackExecuted; actionProcessor.OnAttackDamageComplete = (Action)Delegate.Combine(actionProcessor.OnAttackDamageComplete, this.OnAttackDamageExecuted); actionProcessor.OnAttackProcessComplete = (Action)Delegate.Combine(actionProcessor.OnAttackProcessComplete, this.OnAttackProcessComplete); actionProcessor.OnAttackStart = (Action)Delegate.Combine(actionProcessor.OnAttackStart, this.OnAttackStart); return actionProcessor; } public void BeforeEvolutionCard(BattleCardBase card) { this.OnBeforeEvolve.Call(card); } public virtual VfxBase EvolutionCard(BattleCardBase card, bool isPlayer, List selectCards, List selectChoiceId = null) { if (selectCards != null) { for (int i = 0; i < selectCards.Count; i++) { if (selectCards[i] != null) { selectCards[i].SelfBattlePlayer.AddLastTargetCardsList(selectCards[i]); } } } ActionProcessor actionProcessor = CreateEvolutionActionProcessor(isPlayer); bool flag = selectCards.IsNotNullOrEmpty(); VfxBase vfxBase = actionProcessor.Evolution(card, selectCards, selectChoiceId); ParallelVfxPlayer parallelVfxPlayer = ParallelVfxPlayer.Create(); if (isPlayer) { parallelVfxPlayer.Register(this.OnPlayerEvolve.GetAllFuncVfxResults()); if (flag) { parallelVfxPlayer.Register(this.OnPlayerBattleCardSelect.GetAllFuncVfxResults()); } } return SequentialVfxPlayer.Create(vfxBase, parallelVfxPlayer); } protected ActionProcessor CreateEvolutionActionProcessor(bool isPlayer) { ActionProcessor actionProcessor = CreateActionProcessor(isPlayer); actionProcessor.OnBeforeEvolution += this.OnEvolveSuccess; actionProcessor.OnJustBeforeEvolution += this.OnJustBeforeEvolve; actionProcessor.OnRightAfterEvolution += this.OnRightAfterEvolve; actionProcessor.OnAfterEvolution += this.OnEvoleComplete; if (!_battleMgr.IsVirtualBattle) { actionProcessor.OnBeforeEvolution += delegate(BattleCardBase _originalcard, BattleCardBase _card, IEnumerable _) { BattleLogManager.BeginLogBlockEvolution(_card); }; actionProcessor.OnAfterEvolution += (BattleCardBase _card) => BattleLogManager.EndLogBlockEvolution(); } return actionProcessor; } public virtual VfxBase FusionCard(BattleCardBase card, bool isPlayer, List selectCards) { if (selectCards != null) { for (int i = 0; i < selectCards.Count; i++) { if (selectCards[i] != null) { selectCards[i].SelfBattlePlayer.AddLastTargetCardsList(selectCards[i]); } } } ActionProcessor actionProcessor = CreateFusionActionProcessor(isPlayer); bool flag = selectCards.IsNotNullOrEmpty(); VfxBase vfxBase = actionProcessor.Fusion(card, selectCards); ParallelVfxPlayer parallelVfxPlayer = ParallelVfxPlayer.Create(); if (isPlayer) { parallelVfxPlayer.Register(this.OnPlayerFusion.GetAllFuncVfxResults()); if (flag) { parallelVfxPlayer.Register(this.OnPlayerBattleCardSelect.GetAllFuncVfxResults()); } } return SequentialVfxPlayer.Create(vfxBase, parallelVfxPlayer, InstantVfx.Create(delegate { if (!_PlayerBattleView.IsMoving()) { _PlayerBattleView.UpdateTurnEndPulseEffect(); } if (GameMgr.GetIns().IsWatchBattle) { _battleMgr.GetBattlePlayer(isPlayer).BattleView.ClearSelectCardList(); } })); } protected ActionProcessor CreateFusionActionProcessor(bool isPlayer) { ActionProcessor actionProcessor = CreateActionProcessor(isPlayer); actionProcessor.OnBeforeFusion += this.OnBeforeFusion; actionProcessor.OnAfterFusion += this.OnAfterFusion; if (!_battleMgr.IsVirtualBattle) { actionProcessor.OnBeforeFusion += delegate(BattleCardBase _card, IEnumerable _ingredientCards) { BattleLogManager.AddLogFusion(_card, _ingredientCards.ToList()); }; actionProcessor.OnAfterFusion += (BattleCardBase _card) => BattleLogManager.EndLogBlockFusion(); } return actionProcessor; } public virtual VfxBase BattleCardSelect(BattleCardBase actCard, BattleCardBase target, bool isPlayer, bool registerEffectsDirectlyToVfxMgr = true, bool isTransformskill = false, bool isBurialRiteSkill = false, bool isComplete = true) { return BattleCardSelect(actCard, new List { target }, isPlayer, registerEffectsDirectlyToVfxMgr, isTransformskill, isBurialRiteSkill, isComplete); } public virtual VfxBase BattleCardSelect(BattleCardBase actCard, List targets, bool isPlayer, bool registerEffectsDirectlyToVfxMgr = true, bool isTransformskill = false, bool isBurialRiteSkill = false, bool isComplete = true) { SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create(); if (isPlayer || GameMgr.GetIns().IsAdminWatch || GameMgr.GetIns().IsReplayBattle) { foreach (BattleCardBase target in targets) { if (target.BattleCardView.GameObject != null) { _TouchControl._hitCard = null; if (isComplete) { _battleMgr.GetBattlePlayer(isPlayer).BattleView.OnCancelSkillTargetSelect = null; } if (!registerEffectsDirectlyToVfxMgr) { sequentialVfxPlayer.Register(CreateCardSelectEffectAndSoundVfx(target)); } else { _battleMgr.VfxMgr.RegisterImmediateVfx(CreateCardSelectEffectAndSoundVfx(target)); } } } } if (targets.IsNotNullOrEmpty()) { sequentialVfxPlayer.Register(SelectCard(actCard, targets[0], isPlayer, registerEffectsDirectlyToVfxMgr, isTransformskill, isBurialRiteSkill)); } return sequentialVfxPlayer; } private VfxBase CreateCardSelectEffectAndSoundVfx(BattleCardBase targetCard) { return InstantVfx.Create(delegate { GameMgr.GetIns().GetEffectMgr().Start(EffectMgr.EffectType.CMN_CARD_SELECT_3, targetCard.BattleCardView.GameObject.transform.position); GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_CMN_CARD_SELECT_3); }); } protected VfxBase SelectCard(BattleCardBase actCard, BattleCardBase targetCard, bool isPlayer, bool registerSelectStopVfxDirectlyToVfxMgr = true, bool isTransformskill = false, bool isBurialRiteSkill = false) { SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create(); targetCard.IsSelectedDuringSelectingBurialRiteTarget = isBurialRiteSkill; if (isPlayer || GameMgr.GetIns().IsAdminWatch || GameMgr.GetIns().IsReplayBattle) { if (registerSelectStopVfxDirectlyToVfxMgr) { _battleMgr.GetBattlePlayer(isPlayer).BattleView.StopShowSelect(actCard, isAct: true, isTransformskill); } else { sequentialVfxPlayer.Register(_battleMgr.GetBattlePlayer(isPlayer).BattleView.CreateStopShowSelectVfx(actCard, isAct: true, stopChoiceSelectUiImmediately: false)); } } if (this.OnSkillCardSelect != null) { this.OnSkillCardSelect(new BattleCardBase[1] { targetCard }); this.OnSkillCardSelect = null; } if (this.OnSkillCardSelectSuccess != null) { sequentialVfxPlayer.Register(this.OnSkillCardSelectSuccess.GetAllFuncVfxResults()); this.OnSkillCardSelectSuccess = null; } this.OnBattleCardSelect.Call(targetCard, isPlayer); return sequentialVfxPlayer; } public void SelectCancel(BattleCardBase actCard, bool isPlayer = true, bool isPlay = true, bool isTransformedSkill = false, bool isResetDetail = true) { BattlePlayerBase battlePlayer = _battleMgr.GetBattlePlayer(isPlayer); battlePlayer.BattleView.CancelPlayCard(actCard, isPlay); for (int i = 0; i < battlePlayer.HandCardList.Count(); i++) { battlePlayer.HandCardList[i].IsSelectedDuringSelectingBurialRiteTarget = false; } if (battlePlayer.HandCardList.Contains(actCard)) { battlePlayer.HandControl.AttachCardView(actCard.BattleCardView); actCard.BattleCardView.GameObject.SetActive(value: true); } _TouchControl._hitCard = null; battlePlayer.BattleView.DisableSettingFlag(); battlePlayer.BattleView.AllClear(popUpClose: false, isRemoveSideLog: true, isStopDrag: false, isResetDetail); battlePlayer.BattleView.StopShowSelect(actCard, isAct: false); ParallelVfxPlayer parallelVfxPlayer = ParallelVfxPlayer.Create(); parallelVfxPlayer.Register(actCard.StartHandEffect()); parallelVfxPlayer.Register(actCard.IsInHand ? actCard.BattleCardView.ShowHandCardInfo() : NullVfx.GetInstance()); _battleMgr.VfxMgr.RegisterImmediateVfx(parallelVfxPlayer); if (actCard.IsInHand) { _battleMgr.VfxMgr.RegisterImmediateVfx(InstantVfx.Create(delegate { battlePlayer.HandControl.RearrangeHand(0.3f, battlePlayer.HandCardList.ConvertToViewList()); })); } if (GameMgr.GetIns().IsWatchBattle) { _battleMgr.VfxMgr.RegisterImmediateVfx(InstantVfx.Create(delegate { BattleManagerBase.GetIns().GetBattlePlayer(isPlayer).ClassInformationUIController.SetIsSelect(isSelect: false); })); battlePlayer.BattleView.ClearSelectCardList(); } this.OnSkillCardSelectSuccess = null; } public void ChoiceCancel(BattleCardBase actCard) { _battleMgr.BattlePlayer.PlayerBattleView.RearrangeHand(); if (_battleMgr.BattlePlayer.HandCardList.Contains(actCard)) { _battleMgr.BattlePlayer.HandControl.AttachCardView(actCard.BattleCardView); actCard.BattleCardView.GameObject.SetActive(value: true); } _TouchControl._hitCard = null; _PlayerBattleView.DisableSettingFlag(); _PlayerBattleView.AllClear(); _PlayerBattleView.StopShowSelect(actCard, isAct: false); _battleMgr.VfxMgr.RegisterImmediateVfx(ParallelVfxPlayer.Create(actCard.StartHandEffect(), actCard.IsInHand ? actCard.BattleCardView.ShowHandCardInfo() : NullVfx.GetInstance())); this.OnSkillCardSelectSuccess = null; } public void StartSelectCard(BattleCardBase card, bool isEvolve, List selectableCards, bool isChoiceBrave) { this.OnStartSelect.Call(card, isEvolve, selectableCards, isChoiceBrave); } public void StartMultipleSelectCard(BattleCardBase card, bool isEvolve, List selectableCards, bool isChoiceBrave) { this.OnStartMultipleSelect.Call(card, isEvolve, selectableCards, isChoiceBrave); } public void SelectCard(BattleCardBase card, bool isEvolve, BattleCardBase actCard, bool isChoiceBrave, bool isBurialRiteSkill = false) { this.OnSelect.Call(card, isEvolve, actCard, isBurialRiteSkill, isChoiceBrave); } public void CompleteSelectCard(BattleCardBase selectedCard, bool isEvolve, BattleCardBase actCard, bool isChoiceBrave, bool isBurialRiteSkill = false) { this.OnCompleteSelect.Call(selectedCard, isEvolve, actCard, isChoiceBrave, isBurialRiteSkill); } public void StartChoiceCard(BattleCardBase card, bool isEvolve, List choiceCards, bool isChoiceBrave) { this.OnStartChoice.Call(card, isEvolve, choiceCards, isChoiceBrave); } public void CompleteChoiceCard(BattleCardBase card, bool isEvolve, List cardList, BattleCardBase actCard, List chosenCardIndexList, bool hasSelectionSkill, bool isChoiceBrave) { this.OnCompleteChoice.Call(card, isEvolve, cardList, actCard, chosenCardIndexList, hasSelectionSkill, isChoiceBrave); } public void CancelSelect(BattleCardBase card, bool isEvolve, bool isChoiceBrave) { this.OnCancelSelect.Call(card, isEvolve, isChoiceBrave); } public void CancelChoice(BattleCardBase card, bool isEvolve, bool isChoiceBrave) { this.OnCancelChoice.Call(card, isEvolve, isChoiceBrave); } public void StartFusionSelect(BattleCardBase card, List selectableCards) { this.OnStartFusion.Call(card, selectableCards); } public void SelectFusion(int index, bool isActive, bool canFusionMetamorphose, int maxSelectCount, BattleCardBase selectedCard) { this.OnSelectFusion.Call(index, isActive, maxSelectCount, canFusionMetamorphose); this.OnSelectFusionForRecovery.Call(selectedCard); } public void CancelFusion(BattleCardBase card) { this.OnCancelFusion.Call(card); } public void CallOnSkillProcessStart() { this.OnSkillProcessStart.Call(); } public void CallOnSkillProcessEnd() { this.OnSkillProcessEnd.Call(); } public void CallOnSkillVfxStart() { this.OnSkillVfxStart.Call(); } public void CallOnSkillVfxEnd() { this.OnSkillVfxEnd.Call(); } public JsonData CallOnCreateSideLogCardData(BattleCardBase card, SkillBase skill, bool isDeckSelf, bool isInHand) { return this.OnCreateSideLogCardData.Call(card, skill, isDeckSelf, isInHand); } public void CallOnCreateSideLog(BattleCardBase card, SkillBase skill, bool isEvol, bool isOnSummonOrSkill, bool isDeckSelf, bool isInHand, JsonData sideLogCardData) { this.OnCreateSideLog.Call(card, skill, isEvol, isOnSummonOrSkill, isDeckSelf, isInHand, sideLogCardData); } public void CallOnClearSideLog(bool isSelf) { this.OnClearSideLog.Call(isSelf); } public void CallOnCreateBattleLog(NetworkBattleReplayOperationRecorder.RecordBattleLogParameter recordParameter) { this.OnCreateBattleLog.Call(recordParameter); } public void CallOnUpdateBattleLog(BattleCardBase card, bool isSelf, LogType type, string valueText, bool isSummon, bool isDead) { this.OnUpdateBattleLog.Call(card, isSelf, type, valueText, isSummon, isDead); } public void CallOnUpdateBattleLogType(BattleCardBase card, bool isSelf, LogType oldType, LogType newType) { this.OnUpdateBattleLogType.Call(card, isSelf, oldType, newType); } public void CallOnUpdateBattleLogIsNecromance(BattleCardBase card, bool isSelf, LogType type, bool isNecromance) { this.OnUpdateBattleLogIsNecromance.Call(card, isSelf, type, isNecromance); } public void CallOnRemoveLatestBattleLog() { this.OnRemoveLatestBattleLog.Call(); } public void CallOnAttachSkill(SkillCreator.SkillBuildInfo buildInfo, List targetCards, BattleCardBase ownerCard) { this.OnAttachSkill.Call(buildInfo, targetCards, ownerCard); } public void CallOnEffect(SkillCreator.SkillBuildInfo buildInfo, bool isFollowInHand = false, bool isTargetPosition = false, bool addToLastOperation = false, bool isWhenFusioned = false) { this.OnCreateEffect.Call(buildInfo, isFollowInHand, isTargetPosition, addToLastOperation, isWhenFusioned); } public void CallOnEffect(string effectPath, EffectMgr.EngineType engineType, EffectMgr.MoveType effectMoveType, EffectMgr.TargetType effectTargetType, float effectTime) { this.OnCreateEffectWithoutBuildInfo.Call(effectPath, engineType, effectMoveType, effectTargetType, effectTime); } public void CallOnShowSkillEffect(BattleCardBase card, List targetCards) { this.OnShowSkillEffect.Call(card, targetCards); } public void CallOnSkillInductionEffect(SkillBase skill, bool isIgnoreVoice = false) { this.OnSkillInductionEffect.Call(skill, isIgnoreVoice); } public void CallOnShowIndependentEffect(List targetCards) { this.OnShowIndependentEffect.Call(targetCards); } public void CallOnChangeAffiliation(BattleCardBase card, List targetCards, CardBasePrm.ClanType clan, CardBasePrm.TribeInfo tribe) { this.OnChangeAffiliation.Call(card, targetCards, clan, tribe); } public void CallOnUpdateAttackableEffect(List playerInplayCards, List enemyInplayCards) { this.OnUpdateAttackableEffect.Call(playerInplayCards, enemyInplayCards); } public void CallOnUpdateSkillEffect(List cards, bool updateAttackEffect = false, bool useRecordAttackEffect = false, bool isCantAttackSkill = false) { this.OnUpdateSkillEffect.Call(cards, updateAttackEffect, useRecordAttackEffect, isCantAttackSkill); } public void CallOnChangeUnionBurstAndSkyboundArt(List targetCards) { this.OnChangeUnionBurstAndSkyboundArt.Call(targetCards); } public void CallOnShowRepeatSkillEffect(bool isSelf) { this.OnShowRepeatSkillEffect.Call(isSelf); } public void CallOnGiveCantActivateFanfare(BattleCardBase ownerCard, List targetCards) { this.OnGiveCantActivateFanfare.Call(ownerCard, targetCards); } public void CallOnDepriveCantActivateFanfare(BattleCardBase ownerCard, List targetCards) { this.OnDepriveCantActivateFanfare.Call(ownerCard, targetCards); } public void CallOnLoseSkill(BattleCardBase ownerCard, List targetCards) { this.OnLoseSkill.Call(ownerCard, targetCards); } public void CallOnAttachShortageDeckWin(BattleCardBase card) { this.OnAttachShortageDeckWin.Call(card); } public void CallOnSpecialWin(BattleCardBase card) { this.OnSpecialWin.Call(card); } public void CallOnSpecialLose(BattleCardBase card) { this.OnSpecialLose.Call(card); } public void CallOnEnterForceBerserk(BattlePlayerBase player, BattlePlayerBase enemys, bool isPlayer) { this.OnEnterForceBerserk.Call(player, enemys, arg3: false, isPlayer, !isPlayer); } public void CallOnTurnEndFinish() { this.OnTurnEndFinish.Call(arg1: true, arg2: true); } public virtual VfxBase PlayerTurnEnd(bool isAuto = false) { if (!isAuto) { this.OnTurnEnd_ButtonPush.Call(); } if (!_battleMgr.BattlePlayer.IsSelfTurn) { return NullVfx.GetInstance(); } BattleCardBase hitCard = _TouchControl._hitCard; if (hitCard != null && hitCard.IsOnMove) { _TouchControl.StopMovingHandCard(hitCard); _TouchControl.Exit(); EmitHandUtility.SendSelectObject(_battleMgr, null); } List list = new List(); list.Add(BattlePlayerViewBase.BattleDialogItem.Menu); list.Add(BattlePlayerViewBase.BattleDialogItem.Retire); _PlayerBattleView.ClearDifferentiatePopUp(list); _battleMgr.BattlePlayer.IsChoiceBraveEffectTiming = false; _PlayerBattleView.AllClear(); _PlayerBattleView.ShowPlayerTurnEnd(isAuto); EmitHandUtility.SendSelectObject(_battleMgr, null); if (isAuto) { return NullVfx.GetInstance(); } return TurnEndOperation(isPlayer: true); } public virtual VfxBase TurnEndOperation(bool isPlayer) { if (isPlayer) { this.OnBeforePlayerTurnEnd.Call(); if (GameMgr.GetIns().IsWatchBattle) { _battleMgr.BattlePlayer.IsChoiceBraveEffectTiming = false; _battleMgr.BattlePlayer.BattleView.UpdateChoiceBraveButtonPulsateEffectAndSprite(); } } else { _battleMgr.BattleUIContainer.DisableMenu(); _battleMgr.BattlePlayer.IsTurnStartEffectNotFinished = true; if (_battleMgr is NetworkBattleManagerBase) { ((NetworkBattleManagerBase)_battleMgr).SetTimeDecrementFlag(isDecrement: true); } if (GameMgr.GetIns().IsAdminWatch) { _battleMgr.BattleEnemy.UpdateHandCardsPlayability(areArrowsForcedOff: true); } _battleMgr.BattleEnemy.IsChoiceBraveEffectTiming = false; _battleMgr.BattleEnemy.BattleEnemyView.UpdateChoiceBraveButtonPulsateEffectAndSprite(); } _battleMgr.BattlePlayer.UpdateHandCardsPlayability(areArrowsForcedOff: true); VfxBase result = _battleMgr.TurnEnd(isPlayer); this.OnTurnEnd.Call(); return result; } public void AllClearBattleView() { _PlayerBattleView.AllClear(popUpClose: true); } }