public class NewReplayOperateReceive : OperateReceive
{
	private bool _isFirstMulligan = true;

	public NewReplayOperateReceive(NetworkBattleManagerBase networkBattleMgr, RegisterActionManager registerCardList, OperateMgr operateMgr, NetworkBattleData networkBattleData)
		: base(networkBattleMgr, registerCardList, operateMgr, networkBattleData)
	{
	}

	protected override PlayHandCardReflection CreateNetworkPlayCardAction()
	{
		return new ReplayPlayCardAction(_battleMgr, _operateMgr, _networkBattleData);
	}

	protected override InPlayCardReflection CreateNetworkInPlayAction()
	{
		return new ReplayInPlayAction(_battleMgr, _operateMgr);
	}

	public void StartReplayOperate(NewReplayOperationCollection networkOperationCollection, NetworkBattleReceiver.ReplayReceiveData receiveData)
	{
		switch (receiveData.Operation)
		{
		case NetworkBattleReceiver.ReplayOperationType.MulliganStart:
			networkOperationCollection.DealOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.MulliganEnd:
			if (_isFirstMulligan)
			{
				_isFirstMulligan = false;
				networkOperationCollection.SwapOperation(OnReceiveOpponentMulligan, OnReceivePlayerMulligan);
			}
			else
			{
				_isFirstMulligan = true;
				networkOperationCollection.SecondMulliganOperation(OnReceiveOpponentMulligan, OnReceivePlayerMulligan, OnEndMulligan);
			}
			break;
		case NetworkBattleReceiver.ReplayOperationType.TurnStart:
			networkOperationCollection.TurnStartOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.TurnStartFinish:
			networkOperationCollection.TurnStartFinishOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.TurnEnd:
			networkOperationCollection.TurnEndOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.TurnEndFinish:
			networkOperationCollection.TurnEndFinishOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.AddPpTotal:
			networkOperationCollection.AddPpTotalOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.AddPp:
			networkOperationCollection.AddPpOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.AddBp:
			networkOperationCollection.AddBpOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.AddEp:
			networkOperationCollection.AddEpOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.SetEp:
			networkOperationCollection.SetEpOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.Draw:
			networkOperationCollection.DrawCardOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.TokenDraw:
			networkOperationCollection.TokenDrawCardOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.CreateReservedCard:
			networkOperationCollection.CreateReservedCardOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.Play:
			if (receiveData.IsChoiceBraveData)
			{
				networkOperationCollection.PlayChoiceBraveCardOperation();
			}
			else
			{
				networkOperationCollection.PlayHandCardOperation();
			}
			break;
		case NetworkBattleReceiver.ReplayOperationType.ShowWhenPlayEffect:
			networkOperationCollection.ShowWhenPlayEffectOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.SummonToken:
			networkOperationCollection.SummonTokenOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.SummonCard:
			networkOperationCollection.SummonCardOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.AttackStart:
			networkOperationCollection.AttackStartOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.Attack:
			networkOperationCollection.AttackOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.CostChange:
			networkOperationCollection.CostChangeOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.RemoveCostChange:
			networkOperationCollection.RemoveCostChangeOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.PowerUp:
			networkOperationCollection.PowerUpOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.GainPowerDown:
			networkOperationCollection.GainPowerDownOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.SetPowerDown:
			networkOperationCollection.SetPowerDownOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.DepriveBuff:
			networkOperationCollection.DepriveBuffOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.SpellCharge:
			networkOperationCollection.SpellChargeOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.Damage:
			networkOperationCollection.DamageOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.Heal:
			networkOperationCollection.HealOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.Discard:
			networkOperationCollection.DiscardOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.DestroyOrBanish:
			networkOperationCollection.DestroyOrBanishOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.Evolve:
			networkOperationCollection.EvolveOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.SkillEvolve:
			networkOperationCollection.SkillEvolveOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.Return:
			networkOperationCollection.ReturnOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.StartSelect:
			networkOperationCollection.StartSelectOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.Select:
			networkOperationCollection.SelectOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.CompSelect:
			networkOperationCollection.CompleteSelectOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.CancelSelect:
			networkOperationCollection.CancelSelectOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.StartChoice:
			networkOperationCollection.StartChoiceOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.CompChoice:
			networkOperationCollection.CompleteChoiceOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.CancelChoice:
			networkOperationCollection.CancelChoiceOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.StartFusion:
			networkOperationCollection.StartFusionOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.SelectFusion:
			networkOperationCollection.SelectFusionOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.CompFusion:
			networkOperationCollection.CompleteFusionOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.CancelFusion:
			networkOperationCollection.CancelFusionOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.ChantCountChange:
			networkOperationCollection.ChantCountChangeOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.ChangeWhiteRitualStack:
			networkOperationCollection.ChangeWhiteRitualStackOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.Necromance:
			networkOperationCollection.Necromance();
			break;
		case NetworkBattleReceiver.ReplayOperationType.ChangeMaxAttackableCount:
			networkOperationCollection.ChangeMaxAttackableCountOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.UpdateDeck:
			networkOperationCollection.UpdateDeckOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.IndexChange:
			networkOperationCollection.IndexChangeOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.Metamorphose:
			networkOperationCollection.MetamorphoseOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.Geton:
			networkOperationCollection.GetonOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.Getoff:
			networkOperationCollection.GetoffOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.Unite:
			networkOperationCollection.UniteOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.OpenCard:
			networkOperationCollection.OpenCardOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.AttachSkill:
			networkOperationCollection.ShowSkillEffectOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.ShowSkillEffect:
			networkOperationCollection.ShowSkillEffectOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.ShowSkillInductionEffect:
			networkOperationCollection.ShowSkillInductionEffect();
			break;
		case NetworkBattleReceiver.ReplayOperationType.ShowIndependentEffect:
			networkOperationCollection.ShowIndependentEffect();
			break;
		case NetworkBattleReceiver.ReplayOperationType.ChangeAffiliation:
			networkOperationCollection.ChangeAffiliationOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.OnChangeUnionBurstAndSkyboundArt:
			networkOperationCollection.ShowChangeUnionBurstAndSkyboundArtEffect();
			break;
		case NetworkBattleReceiver.ReplayOperationType.ShowRepeatSkillEffect:
			networkOperationCollection.ShowRepeatSkillEffect();
			break;
		case NetworkBattleReceiver.ReplayOperationType.GiveCantActivateFanfare:
			networkOperationCollection.GiveCantActivateFanfareOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.DepriveCantActivateFanfare:
			networkOperationCollection.DepriveCantActivateFanfareOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.LoseSkill:
			networkOperationCollection.LoseSkillOperation();
			break;
		case NetworkBattleReceiver.ReplayOperationType.UpdateHandInfo:
			networkOperationCollection.UpdateHandInfo();
			break;
		case NetworkBattleReceiver.ReplayOperationType.UpdateChoiceBraveButtonEffet:
			networkOperationCollection.UpdateChoiceBraveButtonEffet();
			break;
		case NetworkBattleReceiver.ReplayOperationType.UpdateInplayInfo:
			networkOperationCollection.UpdateInplayInfo();
			break;
		case NetworkBattleReceiver.ReplayOperationType.UpdateDeckInfo:
			networkOperationCollection.UpdateDeckInfo();
			break;
		case NetworkBattleReceiver.ReplayOperationType.UpdateAttachedCardInfo:
			networkOperationCollection.UpdateAttachedCardInfo();
			break;
		case NetworkBattleReceiver.ReplayOperationType.UpdateFusionCardInfo:
			networkOperationCollection.UpdateFusionCardInfo();
			break;
		case NetworkBattleReceiver.ReplayOperationType.UpdateStatusPanel:
			networkOperationCollection.UpdateStatusPanel();
			break;
		case NetworkBattleReceiver.ReplayOperationType.UpdateBattleInfo:
			networkOperationCollection.UpdateBattleLog();
			break;
		case NetworkBattleReceiver.ReplayOperationType.UpdateClassInfoUi:
			networkOperationCollection.UpdateClassInfoUi();
			break;
		case NetworkBattleReceiver.ReplayOperationType.UpdateMyRotationBonus:
			networkOperationCollection.UpdateMyRotationBonus();
			break;
		case NetworkBattleReceiver.ReplayOperationType.UpdateAvatarBattleDescInfo:
			networkOperationCollection.UpdateAvatarBattleDescValueList();
			break;
		case NetworkBattleReceiver.ReplayOperationType.UpdateAttackableEffect:
			networkOperationCollection.UpdateAttackableEffect();
			break;
		case NetworkBattleReceiver.ReplayOperationType.SkillProcessStart:
			networkOperationCollection.SkillProcessStart();
			break;
		case NetworkBattleReceiver.ReplayOperationType.SkillVfxStart:
			networkOperationCollection.SkillVfxStart();
			break;
		case NetworkBattleReceiver.ReplayOperationType.SkillVfxEnd:
			networkOperationCollection.SkillVfxEnd();
			break;
		case NetworkBattleReceiver.ReplayOperationType.ClearSideLog:
			networkOperationCollection.ClearSideLog();
			break;
		case NetworkBattleReceiver.ReplayOperationType.ClearDestroyedCardList:
			networkOperationCollection.ClearDestroyedCardList();
			break;
		case NetworkBattleReceiver.ReplayOperationType.PlayEmotion:
			networkOperationCollection.PlayEmotion();
			break;
		case NetworkBattleReceiver.ReplayOperationType.AttachShortageDeckWin:
			networkOperationCollection.AttachShortageDeckWin();
			break;
		case NetworkBattleReceiver.ReplayOperationType.ShortageDeckWin:
			networkOperationCollection.ShortageDeckWin();
			break;
		case NetworkBattleReceiver.ReplayOperationType.ShortageDeckLose:
			networkOperationCollection.ShortageDeckLose();
			break;
		case NetworkBattleReceiver.ReplayOperationType.SpecialWin:
			networkOperationCollection.SpecialWin();
			break;
		case NetworkBattleReceiver.ReplayOperationType.SpecialLose:
			networkOperationCollection.SpecialLose();
			break;
		case NetworkBattleReceiver.ReplayOperationType.BattleFinish:
			networkOperationCollection.BattleFinish();
			break;
		}
	}
}
