Files
SVSimServer/SVSim.BattleEngine/Engine/UIWrapVariableContentVertical.cs
gamer147 824309ec44 feat(battle-engine): close the AI-simulation subsystem (verbatim)
Copied the 89 uncopied AI*SimulationUtility/extension files defining the
AIVirtualCard/AIVirtualField extension methods; the compile loop then auto-closed
the revealed type deps (~3049 files total, drift-clean). 10.0k -> 62 errors.
2026-06-05 20:30:59 -04:00

404 lines
9.9 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Wizard;
public class UIWrapVariableContentVertical : UIWrapContent
{
public class ItemParam
{
public float Position { get; set; }
public int Size { get; set; }
public ItemParam(float pos, int size)
{
Position = pos;
Size = size;
}
}
private int _cashNum;
private int _nowIndex;
private float _marginSize = float.MaxValue;
public List<ItemParam> ItemParamList { get; } = new List<ItemParam>();
public void Init(int cashNum, int nowIndex, int maxIndex, OnInitializeItem _onInitializeItem)
{
_cashNum = cashNum;
_nowIndex = nowIndex;
maxIndex = 0;
onInitializeItem = _onInitializeItem;
}
public bool IsBottom()
{
if (!IsScrollEnableSize())
{
return true;
}
return mPanel.transform.localPosition.y > GetPosYBottomItem();
}
public void UpdateItemSize(int index, int size)
{
if (0 <= index && index > ItemParamList.Count)
{
return;
}
ItemParam itemParam = ItemParamList[index];
int num = itemParam.Size - size;
itemParam.Size = size;
MoveScrollPanel(mPanel.gameObject.transform.localPosition.y - (float)num);
if (index++ < ItemParamList.Count)
{
for (int i = index; i < ItemParamList.Count; i++)
{
ItemParamList[i].Position += num;
}
}
UpdateItemCurrentAll();
WrapContent();
mScroll.UpdateScrollbars();
}
public void AddItemList(List<int> addItemSizeList, bool isBottom)
{
if (isBottom)
{
for (int i = 0; i < addItemSizeList.Count; i++)
{
float pos = 0f;
if (ItemParamList.Count > 0)
{
ItemParam itemParam = ItemParamList[ItemParamList.Count - 1];
pos = itemParam.Position - (float)itemParam.Size;
}
AddItemListBottom(pos, addItemSizeList[i]);
}
SortChildrenVertical(isAscendingOrder: false);
}
else
{
if (ItemParamList.Count > 0)
{
_nowIndex += addItemSizeList.Count;
}
for (int num = addItemSizeList.Count - 1; num >= 0; num--)
{
int num2 = addItemSizeList[num];
float pos2 = 0f;
if (ItemParamList.Count > 0)
{
pos2 = ItemParamList[0].Position + (float)num2;
}
AddItemListTop(pos2, num2);
}
SortChildrenVertical(isAscendingOrder: true);
}
minIndex = -(ItemParamList.Count - 1);
}
private void AddItemListBottom(float pos, int size)
{
ItemParamList.Add(new ItemParam(pos, size));
if ((float)size < _marginSize)
{
_marginSize = size;
}
}
private void AddItemListTop(float pos, int size)
{
ItemParamList.Insert(0, new ItemParam(pos, size));
if ((float)size < _marginSize)
{
_marginSize = size;
}
}
protected override void ResetChildPositions()
{
ResetChildPositionsByIndex(0);
}
private void ResetChildPositionsByIndex(int index)
{
_nowIndex = index;
for (int i = 0; i < mChildren.Count; i++)
{
int num = index + i;
Transform transform = mChildren[i];
if (num < ItemParamList.Count)
{
transform.localPosition = new Vector3(0f, ItemParamList[num].Position, 0f);
}
UpdateItem(transform, i);
}
}
public void ResetScrollPositionByIndex(int centerIndex)
{
centerIndex = Mathf.Clamp(centerIndex, 0, ItemParamList.Count - 1);
int num = 0;
int num2 = ItemParamList.Count - 1;
float num3 = mPanel.GetViewSize().y - mPanel.clipSoftness.y * 2f;
float num4 = num3 / 2f;
for (int i = 0; i < ItemParamList.Count; i++)
{
num += ItemParamList[i].Size;
if (i >= centerIndex)
{
num4 -= (float)ItemParamList[i].Size;
if (num4 < 0f)
{
num2 = i;
break;
}
}
}
mScroll.ResetPosition();
if (num3 > (float)num)
{
return;
}
Vector3 vector = new Vector3(0f, (float)num - num3);
mScroll.transform.localPosition += vector;
mPanel.clipOffset -= (Vector2)vector;
int num5 = Mathf.Max(0, ItemParamList.Count - _cashNum);
int value = num5;
int num6 = 0;
for (int j = 0; j < _cashNum; j++)
{
int num7 = num2 - j;
num6 += ItemParamList[num7].Size;
if ((float)num6 > num3)
{
value = num7;
break;
}
}
value = Mathf.Clamp(value, 0, num5);
ResetChildPositionsByIndex(value);
}
public void ResetScrollPositionBottomEasing()
{
StartCoroutine(SetPositionBottomEasing());
}
private IEnumerator SetPositionBottomEasing()
{
mScroll.currentMomentum = Vector3.zero;
mScroll.DisableSpring();
WrapContent();
mScroll.UpdateScrollbars();
float targetPosY = GetPosYBottomItem() + (float)ItemParamList[ItemParamList.Count - 1].Size;
CustomEasing easing = new CustomEasing(CustomEasing.eType.outQuad, mPanel.gameObject.transform.localPosition.y, targetPosY, 0.3f);
while (easing.IsMoving)
{
MoveScrollPanel(easing.GetCurVal(Time.deltaTime));
yield return null;
}
MoveScrollPanel(targetPosY);
}
private float GetPosYBottomItem()
{
return mPanel.baseClipRegion.y - mPanel.baseClipRegion.w * 0.5f + mPanel.clipSoftness.y * 2f - ItemParamList[ItemParamList.Count - 1].Position;
}
public float GetDistanceBetweenBottomItemAndScrollBottomPos()
{
return GetPosYBottomItem() + (float)ItemParamList[ItemParamList.Count - 1].Size - mPanel.gameObject.transform.localPosition.y;
}
public void MoveScrollPanel(float targetPosY)
{
Vector3 vector = (mPanel.gameObject.transform.localPosition.y - targetPosY) * Vector3.up;
mPanel.gameObject.transform.localPosition -= vector;
mPanel.clipOffset += (Vector2)vector;
mScroll.UpdateScrollbars();
}
public bool IsScrollEnableSize()
{
float num = mPanel.GetViewSize().y;
for (int i = 0; i < ItemParamList.Count; i++)
{
num -= (float)ItemParamList[i].Size;
if (num <= 0f)
{
return true;
}
}
return false;
}
public float TopOverflowItemSize()
{
Vector3[] worldCorners = mPanel.worldCorners;
float num = mTrans.InverseTransformPoint(worldCorners[1]).y - mPanel.clipSoftness.y;
return ItemParamList[0].Position - num;
}
public override bool WrapContent()
{
if (mHorizontal)
{
return true;
}
if (mChildren.Count <= 0)
{
return true;
}
bool result = false;
bool flag = true;
Vector3[] worldCorners = mPanel.worldCorners;
for (int i = 0; i < worldCorners.Length; i++)
{
Vector3 position = worldCorners[i];
position = mTrans.InverseTransformPoint(position);
worldCorners[i] = position;
}
List<bool> list = new List<bool>(mChildren.Count);
int j = 0;
for (int count = mChildren.Count; j < count; j++)
{
list.Add(item: false);
}
SortChildrenVertical(isAscendingOrder: true);
float y = mChildren[mChildren.Count - 1].localPosition.y;
float num = mChildren[0].localPosition.y - (float)ItemParamList[-1 * GetRealIndex(mChildren[0].localPosition)].Size;
float num2 = worldCorners[2].y + _marginSize;
float num3 = worldCorners[0].y - _marginSize;
if (y < num2)
{
int num4 = 0;
for (int k = 0; k < ItemParamList.Count; k++)
{
Transform transform = mChildren[num4];
int num5 = _nowIndex - 1;
int num6 = ((num5 < 0) ? 1 : (num5 * -1));
if (minIndex > num6 || num6 > maxIndex)
{
flag = false;
break;
}
if (transform.localPosition.y > num3)
{
break;
}
transform.localPosition = new Vector3(transform.localPosition.x, ItemParamList[num5].Position, transform.localPosition.z);
_nowIndex--;
list[num4] = true;
num4 = (num4 + 1) % mChildren.Count;
}
}
else if (num > num3)
{
int num7 = mChildren.Count - 1;
for (int l = 0; l < ItemParamList.Count; l++)
{
Transform transform2 = mChildren[num7];
int num8 = _nowIndex + _cashNum;
int num9 = ((num8 >= ItemParamList.Count) ? (minIndex - 1) : (num8 * -1));
if (minIndex > num9 || num9 > maxIndex)
{
flag = false;
break;
}
if (transform2.localPosition.y - (float)ItemParamList[_nowIndex].Size < num2)
{
break;
}
transform2.localPosition = new Vector3(transform2.localPosition.x, ItemParamList[num8].Position, transform2.localPosition.z);
_nowIndex++;
list[num7] = true;
num7 = (num7 - 1 + mChildren.Count) % mChildren.Count;
}
}
else
{
if (mFirstTime)
{
int m = 0;
for (int count2 = mChildren.Count; m < count2; m++)
{
Transform item = mChildren[m];
UpdateItem(item, m);
}
}
result = true;
}
int n = 0;
for (int count3 = mChildren.Count; n < count3; n++)
{
if (list[n])
{
Transform item2 = mChildren[n];
UpdateItem(item2, n);
}
}
mScroll.restrictWithinPanel = !flag;
return result;
}
protected override void UpdateItem(Transform item, int index)
{
if (onInitializeItem != null)
{
int realIndex = GetRealIndex(item.localPosition);
onInitializeItem(item.gameObject, index, realIndex);
}
}
private void UpdateItemCurrentAll()
{
int i = 0;
for (int count = mChildren.Count; i < count; i++)
{
Transform transform = mChildren[i];
int num = _nowIndex + i;
if (num <= ItemParamList.Count)
{
Vector3 localPosition = transform.localPosition;
localPosition.y = ItemParamList[num].Position;
transform.localPosition = localPosition;
onInitializeItem?.Invoke(transform.gameObject, i, num * -1);
continue;
}
break;
}
}
private int GetRealIndex(Vector3 item)
{
int result = 0;
for (int i = 0; i < ItemParamList.Count; i++)
{
if (item.y == ItemParamList[i].Position)
{
result = i * -1;
break;
}
}
return result;
}
private void SortChildrenVertical(bool isAscendingOrder)
{
if (isAscendingOrder)
{
mChildren.Sort((Transform a, Transform b) => a.localPosition.y.CompareTo(b.localPosition.y));
}
else
{
mChildren.Sort((Transform a, Transform b) => b.localPosition.y.CompareTo(a.localPosition.y));
}
}
}