Files
SVSimServer/SVSim.BattleEngine/Engine/Wizard.Battle.Mulligan/MulliganViewBase.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

136 lines
4.1 KiB
C#

using System.Collections.Generic;
using UnityEngine;
using Wizard.Battle.View.Vfx;
namespace Wizard.Battle.Mulligan;
public abstract class MulliganViewBase
{
public static readonly Vector3 CARD_ROTATION = new Vector3(0f, 0f, 0f);
public static readonly Vector3 CARD_ROTATION_OPPO = new Vector3(0f, 180f, 0f);
protected MulliganInfoControl m_MlgUI;
public MulliganInfoControl MulliganInfo => m_MlgUI;
public MulliganViewBase(MulliganInfoControl mulliganInfo)
{
m_MlgUI = mulliganInfo;
}
public VfxBase UpdateOpponentMulliganStatusLabel(int Count)
{
return InstantVfx.Create(delegate
{
m_MlgUI.SetEnemyReady(Count);
});
}
public VfxBase MoveMulliganUIOutWhenSubmitMulligan()
{
return m_MlgUI.OnMulliganSubmit();
}
public VfxBase SortFirstDrawsToKeepZone(IList<BattleCardBase> firstDraws)
{
return new PlayerMulliganCardSortOutVfx(GetMulliganUIKeepZone(), firstDraws, m_MlgUI);
}
public static VfxBase MoveCardToMulliganZone(BattleCardBase target, GameObject mulliganZone, int posIndex, MulliganInfoControl mulliganUI, bool isAbandon)
{
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
sequentialVfxPlayer.Register(InstantVfx.Create(delegate
{
GameObject gameObject = target.BattleCardView.GameObject;
target.BattleCardView.GameObject.transform.parent = mulliganZone.transform;
Vector3 mulliganZoneCardPos = mulliganUI.GetMulliganZoneCardPos(posIndex, isAbandon, target.IsPlayer);
Vector3 mulliganZoneCardScale = mulliganUI.GetMulliganZoneCardScale();
if (BattleManagerBase.GetIns().IsRecovery)
{
gameObject.transform.localScale = mulliganZoneCardScale;
}
else
{
iTween.ScaleTo(gameObject, iTween.Hash("scale", mulliganZoneCardScale, "time", 0.3f, "islocal", true, "easetype", iTween.EaseType.easeOutExpo));
}
if (GameMgr.GetIns().IsWatchBattle)
{
if (GameMgr.GetIns().IsAdmin)
{
RotatePlayer(gameObject);
}
else if (!BattleManagerBase.GetIns().BattlePlayer.PlayerBattleView.HandControl.IsVisibleHand())
{
RotateEnemy(gameObject);
}
else if (target.IsPlayer)
{
RotatePlayer(gameObject);
}
else
{
RotateEnemy(gameObject);
}
}
else
{
RotatePlayer(gameObject);
}
if (BattleManagerBase.GetIns().IsRecovery)
{
gameObject.transform.localPosition = mulliganZoneCardPos;
}
else
{
iTween.MoveTo(gameObject, iTween.Hash("position", mulliganZoneCardPos, "time", 0.3f, "islocal", true, "easetype", iTween.EaseType.easeOutExpo));
}
}));
return sequentialVfxPlayer;
}
private static void RotatePlayer(GameObject cardObj)
{
if (BattleManagerBase.GetIns().IsRecovery)
{
cardObj.transform.localRotation = Quaternion.Euler(CARD_ROTATION);
return;
}
iTween.RotateTo(cardObj, iTween.Hash("rotation", CARD_ROTATION, "time", 0.3f, "islocal", true, "easetype", iTween.EaseType.easeOutExpo));
}
private static void RotateEnemy(GameObject cardObj)
{
if (BattleManagerBase.GetIns().IsRecovery)
{
cardObj.transform.localRotation = Quaternion.Euler(CARD_ROTATION_OPPO);
return;
}
iTween.RotateTo(cardObj, iTween.Hash("rotation", CARD_ROTATION_OPPO, "time", 0.3f, "islocal", true, "easetype", iTween.EaseType.easeOutExpo));
}
public virtual SequentialVfxPlayer MoveCardToStaticPosition(BattleCardBase card, int posIndex, bool isAbandon)
{
GameObject mulliganZone = (isAbandon ? GetMulliganUIAbandonZone() : GetMulliganUIKeepZone());
SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create();
sequentialVfxPlayer.Register(InstantVfx.Create(delegate
{
card.SetOnMove(move: true);
}));
sequentialVfxPlayer.Register(MoveCardToMulliganZone(card, mulliganZone, posIndex, m_MlgUI, isAbandon));
sequentialVfxPlayer.Register(WaitVfx.Create(0.3f));
return sequentialVfxPlayer;
}
protected abstract GameObject GetMulliganUIKeepZone();
protected abstract GameObject GetMulliganUIAbandonZone();
public abstract void HideMulliganUIAbandonZone();
public void HideMulliganTitle()
{
m_MlgUI.HideMulliganTitle();
}
}