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.
136 lines
4.1 KiB
C#
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();
|
|
}
|
|
}
|