Files
Ultimate-Fishing-Simulator-…/Assets/Scripts/Assembly-CSharp/UI_InventoryCase.cs
2026-03-04 09:37:33 +08:00

179 lines
4.2 KiB
C#

using System.Collections.Generic;
using UFS3;
using UFS3.Old;
using UnityEngine;
public class UI_InventoryCase : MonoBehaviourSingleton<UI_InventoryCase>
{
[SerializeField]
private Vector2Int caseCellsGridSize;
[SerializeField]
private UI_Item itemTemplate;
[SerializeField]
private UI_ItemCell itemCellTemplate;
[SerializeField]
private RectTransform itemBagGridParent;
[SerializeField]
private ScriptableEventItemData onItemPlaced;
private RectTransform rectTransform;
public List<BaseItemData> itemsInBag;
public UI_ItemCell[,] itemCellsGridArray;
public new static UI_InventoryCase Instance;
private void OnEnable()
{
onItemPlaced.OnRaised += OnItemPlaced_OnRaised;
}
private void OnDisable()
{
onItemPlaced.OnRaised -= OnItemPlaced_OnRaised;
}
private void Start()
{
Instance = this;
CreateGrid();
LoadItemsToGrid();
}
private void OnItemPlaced_OnRaised(BaseItemData obj)
{
RemoveItem(obj);
}
public void ClearItemCells(Vector2Int fromPos, Vector2Int size)
{
for (int i = fromPos.y; i < fromPos.y + size.y; i++)
{
for (int j = fromPos.x; j < fromPos.x + size.x; j++)
{
itemCellsGridArray[j, i].IsEmpty = true;
}
}
}
public bool TryPutItem(Vector2Int fromPos, Vector2Int size)
{
int num = size.x * size.y;
List<UI_ItemCell> list = new List<UI_ItemCell>();
for (int i = fromPos.y; i < fromPos.y + size.y; i++)
{
for (int j = fromPos.x; j < fromPos.x + size.x; j++)
{
if (j >= itemCellsGridArray.GetLength(0) || i >= itemCellsGridArray.GetLength(1))
{
ResetValues();
continue;
}
UI_ItemCell uI_ItemCell = itemCellsGridArray[j, i];
if (!uI_ItemCell.IsEmpty)
{
ResetValues();
continue;
}
num--;
list.Add(uI_ItemCell);
if (num == 0)
{
list.ForEach(delegate(UI_ItemCell x)
{
x.IsEmpty = false;
});
return true;
}
}
}
return false;
void ResetValues()
{
_ = size.x;
_ = size.y;
new List<UI_ItemCell>();
}
}
private void CreateGrid()
{
rectTransform = GetComponent<RectTransform>();
rectTransform.sizeDelta = new Vector2(caseCellsGridSize.x * 100, caseCellsGridSize.y * 100);
itemCellsGridArray = new UI_ItemCell[caseCellsGridSize.x, caseCellsGridSize.y];
for (int i = 0; i < caseCellsGridSize.y; i++)
{
for (int j = 0; j < caseCellsGridSize.x; j++)
{
UI_ItemCell uI_ItemCell = Object.Instantiate(itemCellTemplate, itemCellTemplate.transform.parent);
uI_ItemCell.Initialize(new Vector2Int(j, i));
GameObject gameObject = uI_ItemCell.gameObject;
gameObject.name = gameObject.name + " " + j + " " + i;
uI_ItemCell.gameObject.SetActive(value: true);
itemCellsGridArray[j, i] = uI_ItemCell;
}
}
}
private void LoadItemsToGrid()
{
for (int i = 0; i < itemsInBag.Count; i++)
{
BaseItemData original = itemsInBag[i];
AddItem(Object.Instantiate(original));
}
}
private void KillItems()
{
UI_Item[] componentsInChildren = GetComponentsInChildren<UI_Item>();
foreach (UI_Item uI_Item in componentsInChildren)
{
if (uI_Item != itemTemplate)
{
Object.Destroy(uI_Item.gameObject);
}
}
UI_ItemCell[] componentsInChildren2 = GetComponentsInChildren<UI_ItemCell>();
foreach (UI_ItemCell uI_ItemCell in componentsInChildren2)
{
if (uI_ItemCell != itemCellTemplate)
{
Object.Destroy(uI_ItemCell.gameObject);
}
}
}
private void AddItem(BaseItemData item)
{
for (int i = 0; i < caseCellsGridSize.y; i++)
{
for (int j = 0; j < caseCellsGridSize.x; j++)
{
UI_ItemCell uI_ItemCell = itemCellsGridArray[j, i];
if (uI_ItemCell.IsEmpty && TryPutItem(new Vector2Int(j, i), new Vector2Int(item.Width, item.Height)))
{
UI_Item uI_Item = Object.Instantiate(itemTemplate, base.transform);
uI_Item.Initialize(item, uI_ItemCell.GridPosition);
uI_Item.gameObject.SetActive(value: true);
((RectTransform)uI_Item.transform).anchoredPosition += new Vector2((float)uI_ItemCell.GridPosition.x * 100f, (float)uI_ItemCell.GridPosition.y * -100f);
Debug.Log("CREATED ITEM " + item.name + " for slot " + uI_ItemCell.name);
return;
}
}
}
Debug.Log("NO PLACE FOR ITEM");
}
public void RemoveItem(BaseItemData item)
{
ClearItemCells(item.GridPosition, item.Size);
itemsInBag.Remove(item);
}
}