Files
SVSimServer/SVSim.BattleEngine/Engine/Wizard.DeckCardEdit/CardSelectListUI_State_Edit.cs
gamer147 957af3d1ec feat(battle-engine): full Unity/VFX/god-object shims + expanded copy closure (2570 files)
Authored Unity primitive/object-model shim, VFX layer (control-flow-preserving, InstantVfx never invokes its action -- headless suppression), god-object stubs (GameMgr/EffectMgr/UIManager with faithfully-extracted nested enums), View/UI/Touch tree, LitJson+BetterList+Tuple copied, third-party stubs. Discovered Roslyn header-error masking: fixing class-header type errors unmasks body references, so the true copy closure is ~2570 files (was 782 under masking). Errors: masked-25720 -> 268; our shim files compile clean. Remaining: ~50 residual shim/external types, 24 NGUI UI-base overrides, static-type fixes, plus likely 1-2 more unmask waves.
2026-06-05 17:22:20 -04:00

351 lines
9.4 KiB
C#

using System;
using System.Collections;
using Cute;
using UnityEngine;
namespace Wizard.DeckCardEdit;
[RequireComponent(typeof(CardSelectListUI_Positioning))]
public class CardSelectListUI_State_Edit : MecanimStateBase
{
private const float PRESS_TIME_TO_DRAGMODE = 0.5f;
private const float PRESS_POINT_DIST_TO_DRAGMODE = 35f;
private const float PAGING_OFFSET = 1400f;
private const float PAGING_SPEED = 0.4f;
[SerializeField]
private CardSelectListUIBase m_scene;
[SerializeField]
private CardSelectListUI_State_CardDrag m_stateDragMode;
[SerializeField]
private UIScrollView m_scrollView;
private UIPanel _scrollViewPanel;
private SpringPanel _springPanel;
[SerializeField]
private UICenterOnChild m_scrollViewCenterOnChild;
[SerializeField]
private CardSelectListUI_Positioning _selectionAreaCardPositioning;
[SerializeField]
private CardSelectListUI_Positioning _pagingAreaCardPositioning;
[SerializeField]
private UIPanel _maskPanel;
private GameObject _pressObj;
private float _pressTime;
private Vector2 _pressPoint = Vector2.zero;
private Coroutine _pagingCoroutine;
private bool _requestImmediateMove;
public bool IsClick { get; private set; }
private void Start()
{
if (m_scene == null)
{
MonoBehaviour.print("シーンがセットされていません");
}
UIScrollView scrollView = m_scrollView;
scrollView.onDragStarted = (UIScrollView.OnDragNotification)Delegate.Combine(scrollView.onDragStarted, (UIScrollView.OnDragNotification)delegate
{
m_scrollViewCenterOnChild.gameObject.SetActive(value: false);
});
UIScrollView scrollView2 = m_scrollView;
scrollView2.onMomentumMove = (UIScrollView.OnDragNotification)Delegate.Combine(scrollView2.onMomentumMove, new UIScrollView.OnDragNotification(Fit));
UIScrollView scrollView3 = m_scrollView;
scrollView3.onStoppedMoving = (UIScrollView.OnDragNotification)Delegate.Combine(scrollView3.onStoppedMoving, new UIScrollView.OnDragNotification(Fit));
}
public override void onOpen()
{
base.onOpen();
RefreshSelectionArea(isImmediate: false);
RefreshPage(isImmediate: false);
m_scrollView.enabled = true;
_maskPanel.clipping = UIDrawCall.Clipping.None;
}
public override void onClose()
{
base.onClose();
RefreshSelectionArea(isImmediate: false);
RefreshPage(isImmediate: false);
}
public void RefreshSelectionArea(bool isImmediate)
{
RefreshBase(m_scene.SelectionAreaList, onPressSelectionAreaCard, delegate(GameObject o)
{
onDoubleClick(o, CardSelectListUI_State_CardDrag.Mode.InToOut);
}, _selectionAreaCardPositioning, isMerge: false, isImmediate);
}
public void RefreshPage(bool isImmediate)
{
RefreshBase(m_scene.PagingList, onPressPagingCard, delegate(GameObject o)
{
onDoubleClick(o, CardSelectListUI_State_CardDrag.Mode.OutToIn);
}, _pagingAreaCardPositioning, isMerge: false, isImmediate);
}
private void RefreshBase(CardBundle cardList, UIEventListener.BoolDelegate callback, UIEventListener.VoidDelegate doubleClickCallback, CardSelectListUI_Positioning positioning, bool isMerge, bool isImmediate)
{
int countKind = cardList.CountKind;
GameObject[] array = new GameObject[countKind];
for (int i = 0; i < countKind; i++)
{
array[i] = cardList.FindWithIndex(i).CardObj;
if (!(array[i] != null))
{
continue;
}
BoxCollider component = array[i].GetComponent<BoxCollider>();
if (!component)
{
component = array[i].AddComponent<BoxCollider>();
UIWidget component2 = array[i].GetComponent<UIWidget>();
if ((bool)component2)
{
component.size = component2.localSize;
}
}
UIEventListener uIEventListener = UIEventListener.Get(array[i]);
uIEventListener.onPress = (UIEventListener.BoolDelegate)Delegate.Combine(uIEventListener.onPress, callback);
UIEventListener uIEventListener2 = UIEventListener.Get(array[i]);
uIEventListener2.onPressRight = (UIEventListener.BoolDelegate)Delegate.Combine(uIEventListener2.onPressRight, callback);
UIEventListener uIEventListener3 = UIEventListener.Get(array[i]);
uIEventListener3.onDoubleClick = (UIEventListener.VoidDelegate)Delegate.Combine(uIEventListener3.onDoubleClick, doubleClickCallback);
}
if (isMerge)
{
positioning.Add(array);
}
else
{
positioning.Change(array);
}
if (isImmediate)
{
positioning.Immediate();
}
}
public void NextPage(Action onMoved)
{
if (_pagingCoroutine != null)
{
StopCoroutine(_pagingCoroutine);
}
_pagingCoroutine = StartCoroutine(PagingBase(-1f, onMoved));
}
public void PrevPage(Action onMoved)
{
if (_pagingCoroutine != null)
{
StopCoroutine(_pagingCoroutine);
}
_pagingCoroutine = StartCoroutine(PagingBase(1f, onMoved));
}
private IEnumerator PagingBase(float direction, Action onMoved)
{
Vector3 offset = _pagingAreaCardPositioning.Offset;
offset.x = 1400f * direction;
_pagingAreaCardPositioning.Offset = offset;
_pagingAreaCardPositioning.Speed = 0.4f;
while (_pagingAreaCardPositioning.IsMoving)
{
yield return null;
}
offset.x = 1400f * (0f - direction);
_pagingAreaCardPositioning.Offset = offset;
_pagingAreaCardPositioning.Speed = 1f;
onMoved.Call();
yield return null;
offset.x = 0f;
_pagingAreaCardPositioning.Offset = offset;
_pagingAreaCardPositioning.Speed = 0.4f;
}
public void Fit()
{
SetupScrollComponent();
float num = Mathf.Max(0f, _scrollViewPanel.clipOffset.x);
int a = Mathf.Max(0, m_scene.SelectionAreaList.CountKind - 10);
float breakWidth = _selectionAreaCardPositioning.BreakWidth;
int b = Mathf.RoundToInt(num / breakWidth);
Fit(Mathf.Min(a, b));
m_scrollView.customMovement = ((m_scene.SelectionAreaList.CountKind > 10) ? Vector2.right : Vector2.zero);
}
public void CenterOn(int idx)
{
SetupScrollComponent();
idx -= 5;
int a = Mathf.Max(0, m_scene.SelectionAreaList.CountKind - 10);
int a2 = 0;
Fit(Mathf.Max(a2, Mathf.Min(a, idx)));
}
private void Fit(int idx)
{
float breakWidth = _selectionAreaCardPositioning.BreakWidth;
_springPanel.target.x = (float)(-idx) * breakWidth;
_springPanel.enabled = true;
}
public void ResetScroll()
{
SetupScrollComponent();
m_scrollView.ResetPosition();
_springPanel.target.x = 0f;
_springPanel.enabled = true;
}
private void SetupScrollComponent()
{
if (_scrollViewPanel == null)
{
_scrollViewPanel = m_scrollView.GetComponent<UIPanel>();
}
if (_springPanel == null)
{
_springPanel = m_scrollView.GetComponent<SpringPanel>();
}
m_scrollViewCenterOnChild.gameObject.SetActive(value: true);
}
public void RemoveSelectionArea()
{
_selectionAreaCardPositioning.Clear();
}
public void RemovePaging()
{
_pagingAreaCardPositioning.Clear();
}
private void StartDragState(bool immediate)
{
CardObject cardObject = m_stateDragMode.TryGetCard(_pressObj);
if (cardObject != null)
{
m_scene.HideDetail();
m_scene.ChangeState(m_stateDragMode, skipCloseAnim: true);
m_stateDragMode.ImmediateMove = immediate;
m_stateDragMode.CreateDragCard(cardObject);
m_scrollView.enabled = false;
m_scrollViewCenterOnChild.gameObject.SetActive(value: true);
IsClick = false;
}
_pressObj = null;
_pressTime = 0f;
}
public override void onMove()
{
base.onMove();
if (!_pressObj)
{
return;
}
if (_requestImmediateMove)
{
StartDragState(immediate: true);
_requestImmediateMove = false;
}
else if (Input.GetMouseButton(0))
{
IsClick = true;
_pressTime += Time.deltaTime;
Vector2 vector = _pressPoint - (Vector2)Input.mousePosition;
vector.Normalize();
float num = Mathf.Abs(vector.y);
float num2 = Vector2.Distance(_pressPoint, Input.mousePosition);
if (num2 >= 35f && num < 0.8f)
{
_pressObj = null;
_pressTime = 0f;
}
else if (_pressTime >= 0.5f || (num >= 0.8f && num2 >= 35f))
{
StartDragState(immediate: false);
}
}
else
{
_pressObj = null;
_pressTime = 0f;
}
}
private void onPressSelectionAreaCard(GameObject obj, bool state)
{
if (!m_scene.IsLoading)
{
bool mouseButton = Input.GetMouseButton(0);
bool flag = !mouseButton && Input.GetMouseButtonDown(1);
if (mouseButton || flag)
{
initPress(obj, CardSelectListUI_State_CardDrag.Mode.InToOut);
_requestImmediateMove = flag;
}
}
}
private void onPressPagingCard(GameObject obj, bool state)
{
if (!m_scene.IsLoading)
{
bool mouseButton = Input.GetMouseButton(0);
bool flag = !mouseButton && Input.GetMouseButtonDown(1);
if (mouseButton || flag)
{
initPress(obj, CardSelectListUI_State_CardDrag.Mode.OutToIn);
_requestImmediateMove = flag;
}
}
}
private void initPress(GameObject obj, CardSelectListUI_State_CardDrag.Mode mode)
{
m_stateDragMode.EditMode = mode;
_pressObj = obj;
_pressPoint = Input.mousePosition;
}
private void onDoubleClick(GameObject obj, CardSelectListUI_State_CardDrag.Mode mode)
{
if (!m_scene.IsLoading)
{
_requestImmediateMove = true;
initPress(obj, mode);
}
}
public void DragEmulate(CardObject original, CardObject target)
{
m_stateDragMode.DragEmulate(original, target);
}
public void DropDown(CardObject original)
{
m_stateDragMode.DropDown(original);
}
}