Files
SVSimServer/SVSim.BattleEngine/Engine/SlideObjectReceiveControl.cs
gamer147 0d9d8acae0 feat(battle-engine): M1 auto-copy closure (782 battle-logic files)
Compile-driven bulk-copy loop (tools/engine-port/m1_copy_loop.py) pulled the precise reference closure of the battle-core roots, stopping at the classify god-object/View-VFX-UI boundary. 782 files; no re-explosion (M0 had estimated ~order 1000). Residual frontier = 52 shim-classified + 80 external (Unity/BCL) types to author next.
2026-06-05 16:57:20 -04:00

121 lines
5.0 KiB
C#

using System.Collections;
using UnityEngine;
using Wizard.Battle.View;
using Wizard.Battle.View.Vfx;
public class SlideObjectReceiveControl
{
private NetworkBattleManagerBase _networkBattleMgr;
private GameObject _slideStartObject;
private GameObject _slideEndObject;
private NetworkBattleSender.SLIDE_OBJECT_TYPE _slideObjectType;
private IEnumerator _slideCoroutine;
public SlideObjectReceiveControl(NetworkBattleManagerBase networkBattleMgr)
{
_networkBattleMgr = networkBattleMgr;
}
public void SlideObjectReceiveAction(NetworkBattleReceiver.ReceiveData receivedData)
{
bool isSelf = receivedData.isSelf;
switch (receivedData._slideObjectType)
{
case NetworkBattleSender.SLIDE_OBJECT_TYPE.Cancel:
CancelSlide();
break;
case NetworkBattleSender.SLIDE_OBJECT_TYPE.Attack:
{
BattlePlayerBase battlePlayer2 = _networkBattleMgr.GetBattlePlayer(isSelf);
BattlePlayerBase battlePlayer3 = _networkBattleMgr.GetBattlePlayer(!isSelf);
BattleCardBase indexToCardBase2 = NetworkBattleGenericTool.GetIndexToCardBase(_networkBattleMgr, battlePlayer2, receivedData.idx);
BattleCardBase indexToCardBase3 = NetworkBattleGenericTool.GetIndexToCardBase(_networkBattleMgr, battlePlayer3, receivedData._selectedCardIndex);
if (_slideStartObject != indexToCardBase2.BattleCardView.GameObject)
{
IBattleCardView battleCardView = indexToCardBase2.BattleCardView;
_networkBattleMgr.VfxMgr.RegisterImmediateVfx(SequentialVfxPlayer.Create(new WaitLoadVoiceResourceVfx(battleCardView, battleCardView.VoiceInfo.VoiceId), new PlayCRISoundVfx(battleCardView, battleCardView.VoiceInfo.GetAttackVoice(indexToCardBase2.IsEvolution).Voice)));
_networkBattleMgr.VfxMgr.RegisterSequentialVfx(WaitVfx.Create(0.5f));
}
StartSlide(indexToCardBase2.BattleCardView.GameObject, indexToCardBase3.BattleCardView.GameObject, receivedData._slideObjectType, isSelf, isEvol: false);
break;
}
case NetworkBattleSender.SLIDE_OBJECT_TYPE.Evolve:
{
BattlePlayerBase battlePlayer = _networkBattleMgr.GetBattlePlayer(isSelf);
BattleCardBase indexToCardBase = NetworkBattleGenericTool.GetIndexToCardBase(_networkBattleMgr, battlePlayer, receivedData._selectedCardIndex);
StartSlide(battlePlayer.BattleView.EpIcon, indexToCardBase.BattleCardView.GameObject, receivedData._slideObjectType, isSelf, isEvol: true);
break;
}
default:
Debug.LogError("Invalid Slide Object Type: " + receivedData._slideObjectType);
break;
}
}
public void CancelSlide()
{
if (!(_slideStartObject == null))
{
_networkBattleMgr.VfxMgr.RegisterImmediateVfx(new StopEvolutionChoiceEffectVfx(_networkBattleMgr.BattlePlayer.BattleView.EpIcon));
_networkBattleMgr.VfxMgr.RegisterImmediateVfx(new StopEvolutionChoiceEffectVfx(_networkBattleMgr.BattleEnemy.BattleView.EpIcon));
_slideStartObject = null;
BattleCoroutine.GetInstance().StopCoroutine(_slideCoroutine);
_slideCoroutine = null;
_networkBattleMgr.VfxMgr.RegisterImmediateVfx(new StopArrowMoveVfx(_networkBattleMgr));
GameMgr.GetIns().GetEffectMgr().Stop(GetSlideLockOnEffect());
}
}
private void StartSlide(GameObject startObject, GameObject endObject, NetworkBattleSender.SLIDE_OBJECT_TYPE slideObjectType, bool isTargettingEnemy, bool isEvol)
{
if (_slideStartObject != null && _slideStartObject != startObject)
{
CancelSlide();
}
_slideEndObject = endObject;
if (_slideStartObject == null)
{
_slideStartObject = startObject;
_slideObjectType = slideObjectType;
_slideCoroutine = SlideToTarget();
BattlePlayerBase battlePlayer = _networkBattleMgr.GetBattlePlayer(isTargettingEnemy);
if (isEvol)
{
_networkBattleMgr.VfxMgr.RegisterImmediateVfx(new StartEvolutionChoiceEffectVfx(battlePlayer.BattleView.EpIcon, !battlePlayer.IsEvolve && battlePlayer.IsExceptionEvolve));
}
_networkBattleMgr.BattlePlayer.PlayerBattleView.DragArrowStart(_networkBattleMgr, startObject, _networkBattleMgr.AttackArrowHead, isTargettingEnemy);
BattleCoroutine.GetInstance().StartCoroutine(_slideCoroutine);
}
EffectMgr.EffectType slideLockOnEffect = GetSlideLockOnEffect();
GameMgr.GetIns().GetEffectMgr().Stop(slideLockOnEffect);
GameMgr.GetIns().GetEffectMgr().Start(slideLockOnEffect, endObject.transform.position, endObject);
}
private IEnumerator SlideToTarget()
{
while (_slideStartObject != null)
{
_networkBattleMgr.BattlePlayer.PlayerBattleView.DragArrow(_networkBattleMgr, _networkBattleMgr.AttackArrowHead, _slideEndObject.transform.position);
yield return null;
}
}
private EffectMgr.EffectType GetSlideLockOnEffect()
{
switch (_slideObjectType)
{
case NetworkBattleSender.SLIDE_OBJECT_TYPE.Attack:
return EffectMgr.EffectType.CMN_CARD_TARGET_1;
case NetworkBattleSender.SLIDE_OBJECT_TYPE.Evolve:
return EffectMgr.EffectType.CMN_CARD_TARGET_2;
default:
Debug.LogError("Invalid Slide Object Type: " + _slideObjectType);
return EffectMgr.EffectType.CMN_CARD_TARGET_1;
}
}
}