using System; using System.Collections; using System.Collections.Generic; using System.Linq; using Cute; using UnityEngine; using Wizard.Battle.UI; using Wizard.Battle.View; using Wizard.Battle.View.Vfx; // TODO(engine-cleanup-pass2): 13 of 18 methods unrun in baseline // Type: Wizard.Battle.Mulligan.MulliganMgrBase // See data_dumps/reports/engine-cleanup/live-methods.baseline.txt namespace Wizard.Battle.Mulligan; public abstract class MulliganMgrBase : IMulliganMgr { protected OpponentMulliganCtrl _opponentMulliganControl; private Coroutine mulliganTimeoutCoroutine; public PlayerMulliganCtrl PlayerMlgCtrl { get; protected set; } public OpponentMulliganCtrl OpponentMlgCtrl => _opponentMulliganControl; public Action OnSubmit { get; set; } public VfxBase StartDeal(List playerDealIdxList, List oppoDealIdxList, SkillProcessor skillProcessor) { ParallelVfxPlayer parallelVfxPlayer = ParallelVfxPlayer.Create(); parallelVfxPlayer.Register(InstantVfx.Create(StopTimeout)); PlayerMlgCtrl.DealIdxList = playerDealIdxList; _opponentMulliganControl.DealIdxList = oppoDealIdxList; PlayerMlgCtrl.CreateMulliganDealList(playerDealIdxList); _opponentMulliganControl.CreateMulliganDealList(oppoDealIdxList); VfxBase instance = NullVfx.GetInstance(); VfxBase instance2 = NullVfx.GetInstance(); instance = PlayerMlgCtrl.StartMulliganVfx(skillProcessor); instance2 = _opponentMulliganControl.StartMulliganVfx(skillProcessor); parallelVfxPlayer.Register(instance); parallelVfxPlayer.Register(instance2); if (false /* Pre-Phase-5b: recovery+mulligan-end guard headless-safe as false */) { return NullVfx.GetInstance(); } return parallelVfxPlayer; } protected virtual void StartTimeout() { StopTimeout(); mulliganTimeoutCoroutine = BattleCoroutine.GetInstance().StartCoroutine(MulliganNetworkTimeout()); } protected virtual void StopTimeout() { if (mulliganTimeoutCoroutine != null) { BattleCoroutine.GetInstance().StopCoroutine(mulliganTimeoutCoroutine); mulliganTimeoutCoroutine = null; } /* Pre-Phase-5b: HideAlertDialogue dropped; no BattleView headless */ } private IEnumerator MulliganNetworkTimeout() { long matchedTimer = TimeUtil.GetAbsoluteTime().Ticks; do { yield return null; if (false /* Pre-Phase-5b: IsBattleEnd guard on coroutine timeout; unreachable headless */) { StopTimeout(); yield break; } } while (!((float)NetworkUtility.GetTimeSpanSecond(matchedTimer) >= 5f)); /* Pre-Phase-5b: ShowAlert dropped; no BattleView headless */ } public virtual VfxBase Submit(BattleManagerBase m_BtlMgrIns) { OnSubmit.Call(); return NullVfx.GetInstance(); } private void AddBattleLogMulliganResult(BattleManagerBase battleMgr) { BattleLogManager instance = BattleLogManager.GetInstance(); instance.AddLogMulliganChanged(battleMgr.BattlePlayer, PlayerMlgCtrl.GetChangedNum()); instance.AddLogMulliganChanged(battleMgr.BattleEnemy, OpponentMlgCtrl.GetChangedNum()); } public virtual VfxBase PlayerChangeCardVfx(BattleManagerBase btlMgrIns) { VfxBase result = PlayerMlgCtrl.SubmitMulliganVfx(PlayerMlgCtrl.AbandonList); List completeCards = btlMgrIns.BattlePlayer.HandCardList.Select((BattleCardBase c) => c.Index).ToList(); btlMgrIns.BattlePlayer.CallRecordingMulligan(PlayerMlgCtrl.AbandonList, completeCards); btlMgrIns.BattlePlayer.CallRecordingMulliganEnd(btlMgrIns.BattlePlayer.HandCardList); return result; } public abstract VfxBase EnemyChangeCardVfx(BattleManagerBase btlMgrIns); public virtual VfxBase CompleteMulligan(BattleManagerBase battleMgr) { if (!battleMgr.IsVirtualBattle && !battleMgr.GameMgr.IsNewReplayBattle) { AddBattleLogMulliganResult(battleMgr); } return NullVfx.GetInstance(); } public virtual VfxBase InitMulligan(BattleManagerBase mgr, MulliganInfoControl mulliganInfo, IPlayerView view) { PlayerMlgCtrl = new PlayerMulliganCtrl(mgr.BattlePlayer, mulliganInfo, view); _opponentMulliganControl = new OpponentMulliganCtrl(mgr.BattleEnemy, mulliganInfo, isUseExchangeMark: false); return NullVfx.GetInstance(); } public virtual VfxBase MulliganStartDraw(bool firstAttack, SkillProcessor skillProcessor) { ParallelVfxPlayer parallelVfxPlayer = ParallelVfxPlayer.Create(); VfxBase instance = NullVfx.GetInstance(); VfxBase instance2 = NullVfx.GetInstance(); if (firstAttack) { instance = PlayerMlgCtrl.StartMulliganVfx(skillProcessor); instance2 = _opponentMulliganControl.StartMulliganVfx(skillProcessor); } else { instance2 = _opponentMulliganControl.StartMulliganVfx(skillProcessor); instance = PlayerMlgCtrl.StartMulliganVfx(skillProcessor); } parallelVfxPlayer.Register(instance); parallelVfxPlayer.Register(instance2); return parallelVfxPlayer; } public virtual VfxBase RecoverMulligan(bool didPlayerSubmitMulligan, BattleManagerBase battleMgr) { return NullVfx.GetInstance(); } public MulliganInfoControl GetMulliganInfo() { return PlayerMlgCtrl.GetMulliganInfo(); } }