Files
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

126 lines
3.3 KiB
C#

using System;
using UnityEngine;
using Wizard.Battle.View;
using Wizard.Battle.View.Vfx;
namespace Wizard.Battle.Mulligan;
public class PlayerMulliganView : MulliganViewBase
{
private IPlayerView m_PlayerBattleView;
public event Func<VfxBase> OnMulliganDragSuccess;
public PlayerMulliganView(MulliganInfoControl mlgInfoCtrl, IPlayerView view)
: base(mlgInfoCtrl)
{
m_PlayerBattleView = view;
m_MlgUI.InitMulliganInfo();
m_MlgUI.OnTimeUp += OnTimeUp;
}
public void DragCardStart(BattleCardBase card)
{
m_PlayerBattleView.MoveCardStart(card, isEffectAndSoundOn: false);
}
public void DragCard(BattleCardBase card, Vector3 Pos)
{
m_PlayerBattleView.MoveCard(card, Pos);
}
public void DragCardStop(BattleCardBase card)
{
m_PlayerBattleView.CardMoveEffectSwitch(on: false);
GameMgr.GetIns().GetSoundMgr().StopSe(Se.TYPE.SYS_DRAG_SLIDE);
card.SetOnMove(move: false);
}
public override SequentialVfxPlayer MoveCardToStaticPosition(BattleCardBase card, int posIndex, bool isAbandon)
{
VfxBase vfx = NullVfx.GetInstance();
if (isAbandon)
{
vfx = this.OnMulliganDragSuccess.GetAllFuncVfxResults();
}
SequentialVfxPlayer sequentialVfxPlayer = base.MoveCardToStaticPosition(card, posIndex, isAbandon);
sequentialVfxPlayer.Register(InstantVfx.Create(delegate
{
DragCardStop(card);
if (isAbandon)
{
m_MlgUI.SetExchangeMarkPlayer(posIndex, on: true);
}
}));
sequentialVfxPlayer.Register(vfx);
return sequentialVfxPlayer;
}
public void ShowCardDetail(BattleCardBase card)
{
bool flag = !GameMgr.GetIns().IsWatchBattle && Mathf.Approximately(card.BattleCardView.Transform.localPosition.x, 0f);
m_PlayerBattleView.SetDetailScreenPosition(!flag && _IsDetailScreenRight());
m_PlayerBattleView.ShowDetailPanel(null, null, card, DetailPanelControl.ShowRequest.MULLIGAN);
}
private bool _IsDetailScreenRight()
{
if (InputMgr.ShowDetailLeftAndRight || GameMgr.GetIns().IsWatchBattle)
{
return Input.mousePosition.x < (float)Screen.width / 2f;
}
return false;
}
public void ShutDownCardDetail()
{
m_PlayerBattleView.HideDetailPanel();
}
public RaycastHit[] ConvertMousePositionToRayCastHits(Vector3 position)
{
return m_MlgUI.GetRaycastHitFromPosition(position);
}
public RaycastHit[] ConvertMousePositionToFrontUIRaycastHits(Vector3 position)
{
return m_MlgUI.Get2DRaycastHitFromPosition(position);
}
public Vector3 GetWorldPointInMulliganUICamera(Vector3 position)
{
return m_MlgUI.ScreenToWorldPoint3D(position);
}
private VfxBase OnTimeUp()
{
return InstantVfx.Create(ShutDownCardDetail);
}
protected override GameObject GetMulliganUIKeepZone()
{
return m_MlgUI.GetKeepZonePlayer().gameObject;
}
protected override GameObject GetMulliganUIAbandonZone()
{
return m_MlgUI.GetAbandonZonePlayer().gameObject;
}
public override void HideMulliganUIAbandonZone()
{
m_MlgUI.HideMulliganChangeUI();
}
public void SelectEffectOn(BattleCardBase targetCard)
{
m_PlayerBattleView.DetailPanelSelectEffectOff();
m_PlayerBattleView.DetailPanelSelectEffectOn(targetCard, DetailPanelControl.ShowRequest.MULLIGAN);
}
public void SelectEffectOff()
{
m_PlayerBattleView.DetailPanelSelectEffectOff();
}
}