projectEli/Assets/Inventory System/Scripts/UI/ItemUI.cs

1050 lines
38 KiB
C#
Raw Normal View History

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using static SimpleInventorySystem.GridUI;
using System;
using TMPro;
namespace SimpleInventorySystem
{
[RequireComponent(typeof(RectTransform), typeof(CanvasGroup))]
2023-03-15 11:43:15 +00:00
public class ItemUI : MonoBehaviour//, IPointerEnterHandler, IPointerExitHandler
{
2022-12-23 03:50:16 +00:00
[Header("Item Attributes")]
public string itemName;
2023-02-02 02:58:50 +00:00
public string displayName;
public Image image;
2022-12-23 03:50:16 +00:00
public RarityType rarity;
public ItemTags ItemTag = ItemTags.Any;
public int StackLimit = 1;
public int width;
public int height;
2023-01-27 02:16:31 +00:00
public float weight;
public float monetaryValue;
2023-03-15 11:43:15 +00:00
public ItemCategory category;
public ItemSubCategory subCategory;
public string shortDescription;
[Header("Container Attributes")]
2022-12-23 03:50:16 +00:00
public GameObject containerUIPrefab;
2023-03-15 11:43:15 +00:00
[Header("Nested Item Attributes")]
public int NestCapacityWeight;
2023-03-15 11:43:15 +00:00
[Header("Nested Container Attributes")]
public int NestCapacity;
public TextMeshProUGUI NestCapacityText;
[HideInInspector] public int NestCapacityCount { get; private set; }
2023-03-15 11:43:15 +00:00
[Header("Component Links")]
public Image backdropImage;
2022-12-23 03:50:16 +00:00
public RectTransform emptyGridContainer;
public TextMeshProUGUI titleText;
public TextMeshProUGUI stackText;
2023-03-15 11:43:15 +00:00
2022-12-23 03:50:16 +00:00
// Hidden public variables
[HideInInspector] public bool interactable = true;
[HideInInspector] public Canvas overrideSortingCanvas;
[HideInInspector] public bool Equipped;
[HideInInspector] public List<ItemUI> NestedItems = new List<ItemUI>();
2022-12-23 03:50:16 +00:00
[HideInInspector] public ItemUI ParentContainer;
[HideInInspector] public GameObject container;
[HideInInspector] public Canvas canvas;
2022-12-23 03:50:16 +00:00
[HideInInspector] public bool PickedUpOnFrame;
[HideInInspector] public List<GameObject> ContextWindows = new List<GameObject>();
2023-01-15 11:39:47 +00:00
[HideInInspector] public StorageWindowUI StorageWindow;
2023-03-15 11:43:15 +00:00
[HideInInspector] public InspectionWindowUI InspectionWindow;
//[HideInInspector] public LimitStackItemCapacity limitStackItemCapacity;
[HideInInspector] public LimitStackItemManager limitStackItemManager;
2023-01-15 11:39:47 +00:00
2022-12-23 03:50:16 +00:00
[HideInInspector] public PickUp pickUp;
[HideInInspector] public TargetAttachment targetAttachment;
// private variables
private float eulerAngle;
2023-02-15 08:17:26 +00:00
public float EulerAngle { get { return eulerAngle; } }
private Vector3 pivot;
2022-12-23 03:50:16 +00:00
private Vector2 oldImageSizeDelta;
private Vector2 oldSizeDelta;
private RectTransform rectTransform;
2023-02-15 08:17:26 +00:00
public RectTransform RectTransform { get { return rectTransform; } }
private CanvasGroup canvasGroup;
private float scale = 1f;
private SlotUI slot;
private Cell[] cells;
private bool isDragging;
private Size imageSizeOnGrid;
private Orientation imageOrientation = Orientation.Portrait;
[HideInInspector] public Inventory Inventory;
2023-02-14 23:44:55 +00:00
private int rotationIndex;
public int RotationIndex
{
get { return rotationIndex; }
set
{
// these values are cyclic
if (value < 0)
rotationIndex = 3;
else if (value > 3)
{
rotationIndex = 0;
}
else rotationIndex = value;
}
}
2022-12-23 03:50:16 +00:00
// archived variables
//public Item itemPrefab;
2022-12-23 03:50:16 +00:00
//public variables
public SlotUI previousSlot { get; private set; }
public bool Stackable
{
get { return StackLimit > 1; }
}
private int count;
public int Count
{
get { return count; }
set
{
if (!Stackable)
{
count = 1;
}
else
{
count = value;
}
SetRenderItemUIPropertyValue();
}
}
2023-02-15 08:17:26 +00:00
public void FixLocalScale()
{
rectTransform.localScale = new Vector3(1, 1, 1);
}
public void FixLocalRotation()
{
rectTransform.localRotation = Quaternion.Euler(new Vector3(0, 0, EulerAngle));
}
public bool PointerIsHoveredOver { get { return InventorySystem.IsMouseOverItemUITop(this); } }
//public Item item;
2023-02-15 08:17:26 +00:00
private void InitializeRectTransform()
{
rectTransform.rotation = Quaternion.Euler(new Vector3(0,0,0));
eulerAngle = Mathf.Abs(Mathf.CeilToInt(transform.rotation.eulerAngles.z));
switch (eulerAngle)
{
case -90:
imageOrientation = (height > width) ? Orientation.Portrait : Orientation.Landscape;
rotationIndex = 1;
break;
case 180:
imageOrientation = (width > height) ? Orientation.Landscape : Orientation.Portrait;
rotationIndex = 2;
break;
case 90:
imageOrientation = (height > width) ? Orientation.Portrait : Orientation.Landscape;
rotationIndex = 3;
break;
default:
imageOrientation = (width > height) ? Orientation.Landscape : Orientation.Portrait;
rotationIndex = 0;
break;
}
rectTransform.anchorMin = rectTransform.anchorMax = new Vector2(0, 1);
pivot = rectTransform.pivot = new Vector2(0, 1);
}
internal void ResetTransform()
{
rectTransform = GetComponent<RectTransform>();
rectTransform.anchorMin = rectTransform.anchorMax = new Vector2(0, 1);
// rect.pivot = new Vector2(0, 1);
rectTransform.anchoredPosition = new Vector2();
imageSizeOnGrid = new Size(width * InventorySystem.instance.DefaultSizeOnGrid.Width, height * InventorySystem.instance.DefaultSizeOnGrid.Height);
rectTransform.sizeDelta = new Vector2(imageSizeOnGrid.Width, imageSizeOnGrid.Height);
}
private void Awake()
{
rectTransform = GetComponent<RectTransform>();
if (image == null)
{
Image[] images = transform.GetComponentsInChildren<Image>();
2023-01-27 02:16:31 +00:00
for (int i = 0; i < images.Length; i++)
{
2023-01-27 02:16:31 +00:00
if (images[i] == GetComponent<Image>())
{
continue;
}
image = transform.GetComponentInChildren<Image>();
break;
}
}
2023-01-27 02:16:31 +00:00
if (image == null)
{
Debug.LogError("ItemUI: Item needs a child with an Image component.");
}
canvasGroup = GetComponent<CanvasGroup>();
//limitStackItemCapacity = GetComponent<LimitStackItemCapacity>();
if (width <= 0 || height <= 0)
{
Debug.LogError("Inventory ItemUI must contain a positive integer value for Width and Height: " + name);
}
2023-02-15 08:17:26 +00:00
InitializeRectTransform();
}
public Rarity GetRarity()
{
//Debug.Log(rarity);
return InventorySystem.instance.GetRarityFromList(rarity);
}
/// <summary>
/// Returns an integer number if it has a container with a GridUI. the number returned is either -1 if no gridUI exists, or the capacity in terms of 1x1 cells.
/// </summary>
/// <returns></returns>
/* public int ContainerCapacity()
{
GridUI gridUI = null;
2023-01-27 02:16:31 +00:00
if (container != null && container.TryGetComponent<GridUI>(out gridUI))
{
return gridUI.gridSize.Width * gridUI.gridSize.Height;
}
return -1;
}*/
2023-03-13 12:05:53 +00:00
public bool WillExceedMaximumCapacity(int weight = 0)
{
return NestCapacityCount >= NestCapacity || NestCapacityCount + weight > NestCapacity;
}
2023-03-13 12:05:53 +00:00
public bool WillExceedZeroCapacity(int weight = 0)
{
return NestCapacityCount <= 0 || NestCapacityCount - weight < 0;
}
public void IncreaseCapacityCount(ItemUI attachedItem)
{
if (!WillExceedMaximumCapacity(attachedItem.NestCapacityWeight))
{
NestCapacityCount += attachedItem.NestCapacityWeight;
SetRenderItemUIPropertyValue();
}
}
public void DecreaseCapacityCount(ItemUI attachedItem)
{
if (!WillExceedZeroCapacity(attachedItem.NestCapacityWeight))
{
NestCapacityCount -= attachedItem.NestCapacityWeight;
SetRenderItemUIPropertyValue();
}
}
public void FindTextMeshProUGUI()
{
if(titleText == null)
{
Transform titleGameObject = transform.Find("Title");
if(titleGameObject != null)
{
titleText = titleGameObject.GetComponent<TextMeshProUGUI>();
}
}
if (stackText == null)
{
Transform stackTextGameObject = transform.Find("StackCount");
if (stackTextGameObject != null)
{
stackText = stackTextGameObject.GetComponent<TextMeshProUGUI>();
}
}
if (NestCapacityText == null)
{
Transform capacityTextGameObject = transform.Find("PouchCapacity");
if (capacityTextGameObject != null)
{
NestCapacityText = capacityTextGameObject.GetComponent<TextMeshProUGUI>();
}
}
}
private void SetRenderItemUIPropertyValue()
{
if (titleText != null)
{
//Debug.Log($"Set Item name: {itemName}");
titleText.text = (displayName != null && !string.IsNullOrEmpty(displayName)) ? displayName : itemName;
}
if(stackText != null)
{
stackText.text = Count.ToString();
}
if (NestCapacityText != null)
{
NestCapacityText.text = NestCapacityCount.ToString() + " / " + NestCapacity.ToString();
}
}
public SlotUI GetSlotUI()
{
return slot;
}
2023-02-09 11:53:30 +00:00
public bool QuickMove()
{
bool moved = false;
if (Equip())
{
//Debug.Log("Equipped");
moved = true;
}
else if (Store())
{
//Debug.Log("Stored");
moved = true;
}
return moved;
}
public bool Equip()
{
2023-02-09 11:53:30 +00:00
bool equipped = false;
foreach (TagSlotPairing tsp in InventorySystem.instance.TagSlotPairings)
{
2023-02-15 08:17:26 +00:00
Debug.Log($"Equip: {tsp.itemTag}, {tsp.slot.gameObject.name}");
2023-02-09 11:53:30 +00:00
if (tsp.slot == slot)
{
2023-02-15 08:17:26 +00:00
Debug.Log("Could not equip to slot since this item is already occupying the slot.");
2023-02-09 11:53:30 +00:00
continue;
}
2023-01-25 07:14:16 +00:00
if (tsp.CanEquip(this))
2023-01-15 11:39:47 +00:00
{
UnsetSlot();
2023-02-09 11:53:30 +00:00
equipped = tsp.DropOntoSlot(this);
//Debug.Log(tsp.slot.gameObject.name);
2023-02-09 11:53:30 +00:00
if (equipped)
2023-01-15 11:39:47 +00:00
{
2023-02-09 11:53:30 +00:00
break;
2023-01-15 11:39:47 +00:00
}
else
{
2023-02-09 11:53:30 +00:00
//Debug.Log("Returning to slot");
ReturnToSlot();
2023-01-15 11:39:47 +00:00
}
}
}
2023-02-09 11:53:30 +00:00
return equipped;
2023-01-15 11:39:47 +00:00
}
public bool Store()
{
2023-02-09 11:53:30 +00:00
bool stored = false;
foreach (TagSlotGridPairing tsgp in InventorySystem.instance.TagSlotGridPairings)
2023-01-15 11:39:47 +00:00
{
2023-02-15 08:17:26 +00:00
Debug.Log($"Store: {tsgp.itemTag}, {tsgp.ReferencedGrid}");
2023-01-27 02:16:31 +00:00
if (tsgp.CanStore(this))
{
2023-02-09 11:53:30 +00:00
GrabAndDragItem(); // TODO: See if this conflicts with anything
//UnsetSlot();
stored = tsgp.Drop(this);
if (!stored)
{
ReturnToSlot();
}
2022-12-23 03:50:16 +00:00
else
{
2023-01-29 20:36:11 +00:00
// TODO: see if this is needed
if(container != null)
container.SetActive(false);
2023-02-09 11:53:30 +00:00
break;
2022-12-23 03:50:16 +00:00
}
}
}
2023-02-09 11:53:30 +00:00
return stored;
}
2023-01-27 02:16:31 +00:00
public bool DropItemInStorageContainer(ItemUI droppedItem)
{
//Debug.Log("Checking");
2023-01-27 02:16:31 +00:00
if (IsStorageContainer())
{
//Debug.Log("Storage container found");
2023-01-27 02:16:31 +00:00
return container.GetComponent<GridUI>().DropItemOnGrid(droppedItem.gameObject);
}
return false;
}
2023-01-25 07:14:16 +00:00
public void DropItemOntoSlot(bool fitImageInSlot = false)
{
//Debug.Log("OnEndDrag");
if (image != null)
{
canvasGroup.alpha = 1f;
image.maskable = true;
}
canvasGroup.blocksRaycasts = true;
isDragging = false;
2022-12-23 03:50:16 +00:00
if (!slot.useImageAsSlotHolder)
ShowEmptyGrid();
else
HideEmptyGrid();
InventorySystem.instance.DraggedItem = null;
if (slot == null)
{
//Debug.Log("ItemUI: OnEndDrag: Returning to parent");
//ReturnToSlot();
}
else
{
// TODO: this need improvement
Equipped = slot.EquipSlot;
}
2023-01-15 11:39:47 +00:00
if (StorageWindow != null && StorageWindow.gameObject.activeSelf)
{
StorageWindow.dragWindowUI.CloseWindow();
}
if (Inventory == null)
{
InventorySystem.instance.player.inventory.AddOwnership(this, null);
}
else if (Inventory != InventorySystem.instance.player.inventory)
{
Inventory.RemoveOwnership(this, Inventory);
}
2023-01-25 07:14:16 +00:00
if (!fitImageInSlot)
{
ApplyRectTransformResize(); // TODO: Fix this so it maintains rotation later
transform.localRotation = Quaternion.Euler(new Vector3(0, 0, eulerAngle));
2023-01-25 07:14:16 +00:00
}
2023-02-15 08:17:26 +00:00
rectTransform.pivot = pivot;
2023-01-25 07:14:16 +00:00
}
public void ApplyRectTransformResize()
{
ResetTransform();
}
public void GrabAndDragItem()
{
if (!isDragging && interactable)
{
//Debug.Log("GRAB AND DRAG");
//Debug.Log("OnPointerDown");
//Debug.Log("OnBeginDrag");
2023-02-09 11:53:30 +00:00
RemoveItemFromSlot();
2022-12-23 03:50:16 +00:00
2023-02-09 11:53:30 +00:00
isDragging = true;
InventorySystem.instance.DraggedItem = this;
PickedUpOnFrame = true;
}
}
2022-12-23 03:50:16 +00:00
2023-02-09 11:53:30 +00:00
public void RemoveItemFromSlot()
{
canvasGroup.alpha = .7f;
canvasGroup.blocksRaycasts = false;
2023-02-09 11:53:30 +00:00
transform.SetParent(canvas.transform);
2023-02-09 11:53:30 +00:00
rectTransform.anchorMin = new Vector2(0, 1);
rectTransform.anchorMax = new Vector2(0, 1);
//rectTransform.pivot = new Vector2(0, 1);
rectTransform.pivot = pivot;
2022-12-23 03:50:16 +00:00
2023-02-09 11:53:30 +00:00
image.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, oldImageSizeDelta.x);
image.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, oldImageSizeDelta.y);
rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, oldSizeDelta.x);
rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, oldSizeDelta.y);
emptyGridContainer.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, oldSizeDelta.x);
emptyGridContainer.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, oldSizeDelta.y);
backdropImage.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, oldSizeDelta.x);
backdropImage.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, oldSizeDelta.y);
2023-02-09 11:53:30 +00:00
UnsetSlot();
HideEmptyGrid();
// Destroy each associated window, since we won't rely on windows if we are moving this item
for (int i = ContextWindows.Count - 1; i >= 0; i--)
{
ContextWindows[i].SetActive(true);
}
2023-02-09 11:53:30 +00:00
ContextWindows.Clear();
}
public void UnsetSlot()
{
if (slot != null)
{
2023-02-09 11:53:30 +00:00
if(slot.grid != null)
{
slot.grid.RemoveItemFromGrid(this);
}
previousSlot = slot;
slot.RemoveDragDropItem();
slot = null;
}
if (cells != null)
{
foreach (Cell c in cells)
{
if (c != null)
{
c.inUse = false;
2023-01-27 02:16:31 +00:00
c.item = null;
//c.overlapped = false;
//s.ShowImage();
if (c.GetSlot() != null && c.GetSlot() != this.slot)
{
c.GetSlot().UnsetCell();// RemoveDragDropItem(true);
}
}
}
cells = null;
}
}
public void AddToContainedItems(ItemUI item)
{
NestedItems.Add(item);
item.ParentContainer = this;
}
public void RemoveFromContainedItems(ItemUI item)
{
NestedItems.Remove(item);
item.ParentContainer = null;
}
public void FitImageInSlot(Vector2 size)
{
//Debug.Log("FitImageInSlot: " + image.transform.name);
float ratio = size.y / image.rectTransform.sizeDelta.y;
rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, size.x);
rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, size.y);
2022-12-23 03:50:16 +00:00
image.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, size.x);
image.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, size.y);
2022-12-23 03:50:16 +00:00
backdropImage.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, size.x);
backdropImage.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, size.y);
emptyGridContainer.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, size.x);
emptyGridContainer.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, size.y);
/* image.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, size.y);// = new Vector2(image.rectTransform.sizeDelta.x * ratio, size.y);
Debug.Log(oldImageSizeDelta + ", " + oldSizeDelta);
this.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, size.y); ;*/
//image.transform.localScale *= ratio;
//this.scale = scale;
//image.transform.localScale *= scale;
}
public void SetSlot(SlotUI slot)
{
this.slot = slot;
}
// TODO: Make sure it was dropped somewhere, if not, return it to the original parent
public void ReturnToSlot(bool forceDrop = false)
{
if (previousSlot != null && (!isDragging || forceDrop))
{
//Debug.Log("RETURNED: " + previousSlot.gameObject.name);
previousSlot.DropOntoSlot(this.gameObject);
}
}
// Start is called\ before the first frame update
void Start()
{
FindTextMeshProUGUI();
2023-01-15 11:39:47 +00:00
InitializeImageSize();
// TODO: Possibly have item image scale into slot here.
imageSizeOnGrid = new Size(width * InventorySystem.instance.DefaultSizeOnGrid.Width, height * InventorySystem.instance.DefaultSizeOnGrid.Height);
if (canvas == null)
{
canvas = SimpleInventorySystem.InventorySystem.instance.inventoryUI;
}
if (Count == 0)
{
Count = 1;
}
SetRenderItemUIPropertyValue();
Rarity r = GetRarity();
if (backdropImage == null)
{
backdropImage = transform.GetComponent<Image>();
}
if (backdropImage == null)
{
Debug.LogError("ItemUI: Item needs at least an Image component.");
}
else if (r != null)
{
backdropImage.color = new Color(r.color.r, r.color.g, r.color.b, InventorySystem.instance.ItemBackdropTransparency);
}
2022-12-23 03:50:16 +00:00
2023-01-27 02:16:31 +00:00
CreateStorageContainer();
2022-12-23 03:50:16 +00:00
//backdropImage.sprite.rect.
/*overrideSortingCanvas = gameObject.AddComponent<Canvas>();
if(overrideSortingCanvas != null)
{
overrideSortingCanvas.overrideSorting = true;
overrideSortingCanvas.sortingLayerID = 5;
//overrideSortingCanvas.sortingLayerName = "ItemUI";
}*/
}
2023-01-15 11:39:47 +00:00
public void InitializeImageSize()
{
oldImageSizeDelta = image.rectTransform.sizeDelta;
oldSizeDelta = this.rectTransform.sizeDelta;
if (oldImageSizeDelta == Vector2.zero)
{
oldImageSizeDelta = oldSizeDelta;
}
if (oldSizeDelta == Vector2.zero)
{
oldSizeDelta = oldImageSizeDelta;
}
}
public Orientation ImageOrientation()
{
return imageOrientation;
}
public Size SizeAfterOrientation()
{
//Debug.Log(imageOrientation);
if (imageOrientation == Orientation.Landscape)
{
if (width >= height)
{
return new Size(width, height);
}
else
{
return new Size(height, width);
}
}
else
{
if (height >= width)
{
return new Size(width, height);
}
else
{
return new Size(height, width);
}
}
}
public void HideSlots()
{
if (cells != null)
{
2023-01-15 11:39:47 +00:00
Cell previousCell = slot.cell;
foreach (Cell cell in cells)
{
if (cell != null)
{
2023-01-15 11:39:47 +00:00
SlotUI cellSlot = cell.GetSlot();
if (cellSlot != null)
{
// && !slot.useImageAsSlotHolder)
cellSlot.HideImage();
}
}
}
}
}
2022-12-23 03:50:16 +00:00
public void HideEmptyGrid()
{
if (emptyGridContainer != null)
{
emptyGridContainer.gameObject.SetActive(false);
}
}
public void ShowEmptyGrid()
{
if (emptyGridContainer != null)
{
emptyGridContainer.gameObject.SetActive(true);
}
}
public void SetSlots(List<Cell> cellList)
{
cells = new Cell[cellList.Count];
for (int i = 0; i < cellList.Count; i++)
{
if (cellList[i] != null)
{
cells[i] = cellList[i];
cells[i].inUse = true;
2023-01-27 02:16:31 +00:00
cells[i].item = this;
}
}
}
public bool IsSingleCellItem()
{
return width == 1 && height == 1;
}
public bool AddToStack(int value = 1)
{
if (Stackable && Count < StackLimit)
{
Count+=value;
return true;
}
return false;
}
public bool RemoveFromStack(int value = 1)
{
if (Stackable && Count > 0)
{
Count-= value;
return true;
}
return false;
}
2023-01-27 02:16:31 +00:00
void FixedUpdate()
{
}
// Update is called once per frame
void Update()
{
if (isDragging)
{
// TODO: fix this
rectTransform.position = InventorySystem.instance.MouseInCanvasPosition;
}
if (PointerIsHoveredOver && InventorySystem.instance.PressedEquipItemKey(false))
{
2023-02-09 11:53:30 +00:00
QuickMove();
// TODO: see if more needs to be implemented here.
return;
}
if (PointerIsHoveredOver && InventorySystem.instance.PressedDropItemKey(false))
{
//Debug.Log("Should be throwing away...");
DropItemAway();
return;
}
if (PointerIsHoveredOver && !InventorySystem.instance.IsDraggingItem)
{
if (Input.GetMouseButtonDown(0) && !isDragging && InventorySystem.instance.DraggedItem == null && !slot.DroppedOnFrame)
{
Debug.Log("Grab and drag");
GrabAndDragItem();
}
else if (Input.GetMouseButtonDown(2) && !Equipped)
{
ShowStorageWindow();
}
else if (Input.GetMouseButtonDown(1) && !InventorySystem.instance.IsDraggingItem)
{
InventorySystem.instance.OpenContextMenu(this);
}
}
if (Input.GetMouseButtonUp(0))
{
PickedUpOnFrame = false;
}
if (isDragging)
{
if (image != null)
{
image.maskable = false;
}
if(Count <= 0)
{
Destroy(gameObject);
}
if (InventorySystem.instance.PressedKeyRotation(true))
{
//Debug.Log("Rotate");
RectTransform handler = (RectTransform)transform;
eulerAngle = Mathf.Abs(Mathf.CeilToInt(handler.rotation.eulerAngles.z)) - 90;
//Debug.Log("euler" + eulerAngle);
2023-02-14 23:44:55 +00:00
RotationIndex++;
switch (RotationIndex)
{
2023-02-14 23:44:55 +00:00
case 0:
Debug.Log(RotationIndex);
//handler.localPosition = new Vector3(0, 0, 0);
// Item rect transform
pivot = handler.pivot = new Vector2(0, 1);
handler.Rotate(new Vector3(0, 0, 1), -90);
// title rect transform
if (titleText != null)
{
titleText.rectTransform.pivot = new Vector2(1, 1);
titleText.rectTransform.Rotate(new Vector3(0, 0, 1), 90);
titleText.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, imageSizeOnGrid.Width);
}
// stack count transform
if (stackText != null)
{
stackText.rectTransform.pivot = new Vector2(1, 0);
stackText.rectTransform.Rotate(new Vector3(0, 0, 1), 90);
stackText.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, imageSizeOnGrid.Height);
}
// capacity text transform
if (NestCapacityText != null)
{
NestCapacityText.rectTransform.pivot = new Vector2(1, 0);
NestCapacityText.rectTransform.Rotate(new Vector3(0, 0, 1), 90);
NestCapacityText.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, imageSizeOnGrid.Height);
}
2023-02-14 23:44:55 +00:00
// image Orientation
imageOrientation = (width > height) ? Orientation.Landscape : Orientation.Portrait;
break;
case 1:
Debug.Log(RotationIndex);
// Item rect transform
pivot = rectTransform.pivot = new Vector2(0, 0);
rectTransform.Rotate(new Vector3(0, 0, 1), -90);
// title rect transform
if(titleText != null)
{
titleText.rectTransform.pivot = new Vector2(1, 0);
titleText.rectTransform.Rotate(new Vector3(0, 0, 1), 90);
titleText.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, imageSizeOnGrid.Width);
}
// stack count transform
if (stackText != null)
{
stackText.rectTransform.pivot = new Vector2(0, 0);
stackText.rectTransform.Rotate(new Vector3(0, 0, 1), 90);
stackText.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, imageSizeOnGrid.Height);
}
// capacity text transform
if (NestCapacityText != null)
{
NestCapacityText.rectTransform.pivot = new Vector2(0, 0);
NestCapacityText.rectTransform.Rotate(new Vector3(0, 0, 1), 90);
NestCapacityText.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, imageSizeOnGrid.Height);
}
// image Orientation
imageOrientation = (width > height) ? Orientation.Portrait : Orientation.Landscape;
break;
2023-02-14 23:44:55 +00:00
case 2:
Debug.Log(RotationIndex);
// Item rect transform
pivot = rectTransform.pivot = new Vector2(1, 0);
handler.Rotate(new Vector3(0, 0, 1), -90);
// title rect transform
if (titleText != null)
{
titleText.rectTransform.pivot = new Vector2(0, 0);
titleText.rectTransform.Rotate(new Vector3(0, 0, 1), 90);
titleText.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, imageSizeOnGrid.Height);
}
// stack count transform
if (stackText != null)
{
stackText.rectTransform.pivot = new Vector2(0, 1);
stackText.rectTransform.Rotate(new Vector3(0, 0, 1), 90);
stackText.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, imageSizeOnGrid.Height);
}
// capacity text transform
if (NestCapacityText != null)
{
NestCapacityText.rectTransform.pivot = new Vector2(0, 1);
NestCapacityText.rectTransform.Rotate(new Vector3(0, 0, 1), 90);
NestCapacityText.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, imageSizeOnGrid.Height);
}
// image Orientation
imageOrientation = (width > height) ? Orientation.Landscape : Orientation.Portrait;
break;
2023-02-14 23:44:55 +00:00
case 3:
Debug.Log(RotationIndex);
// Item rect transform
pivot = rectTransform.pivot = new Vector2(1, 1);
handler.Rotate(new Vector3(0, 0, 1), -90);
// title rect transform
if (titleText != null)
{
titleText.rectTransform.pivot = new Vector2(0, 1);
titleText.rectTransform.Rotate(new Vector3(0, 0, 1), 90);
titleText.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, imageSizeOnGrid.Height);
}
// stack count transform
if (stackText != null)
{
stackText.rectTransform.pivot = new Vector2(1, 1);
stackText.rectTransform.Rotate(new Vector3(0, 0, 1), 90);
stackText.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, imageSizeOnGrid.Height);
}
// stack count transform
if (NestCapacityText != null)
{
NestCapacityText.rectTransform.pivot = new Vector2(1, 1);
NestCapacityText.rectTransform.Rotate(new Vector3(0, 0, 1), 90);
NestCapacityText.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, imageSizeOnGrid.Height);
}
// image Orientation
imageOrientation = (width > height) ? Orientation.Portrait : Orientation.Landscape;
break;
default:
2023-02-14 23:44:55 +00:00
Debug.Log($"This rotation recieved an error: {RotationIndex}");
break;
}
}
}
2023-01-15 11:39:47 +00:00
}
2023-01-27 02:16:31 +00:00
public void ShowStorageWindow()
2023-01-15 11:39:47 +00:00
{
2023-01-27 02:16:31 +00:00
if(IsStorageContainer() && (StorageWindow == null || !StorageWindow.gameObject.activeSelf))
2023-01-15 11:39:47 +00:00
{
//Debug.Log("Opening Window");
2023-03-15 11:43:15 +00:00
StorageWindow = InventorySystem.instance.OpenWindow(nameof(StorageWindowUI)).GetComponent<StorageWindowUI>();
2023-01-15 11:39:47 +00:00
if(StorageWindow != null && containerUIPrefab != null && !Equipped)
{
//Debug.Log("Opening Window");
2023-01-27 02:16:31 +00:00
2023-01-15 11:39:47 +00:00
if(container.transform.parent != StorageWindow.StorageContainer.transform)
container.transform.SetParent(StorageWindow.StorageContainer.transform, false);
container.SetActive(true);
2023-03-15 11:43:15 +00:00
StorageWindow.ItemUI = this;
2023-01-15 11:39:47 +00:00
StorageWindow.gameObject.SetActive(true);
}
}
}
2023-03-15 11:43:15 +00:00
public void ShowInspectionWindow()
{
if ((InspectionWindow == null || !InspectionWindow.gameObject.activeSelf))
{
//Debug.Log("Opening Window");
InspectionWindow = InventorySystem.instance.OpenWindow(nameof(InspectionWindowUI)).GetComponent<InspectionWindowUI>();
if (InspectionWindow != null)
{
InspectionWindow.ItemUI = this;
InspectionWindow.gameObject.SetActive(true);
}
}
}
2023-01-27 02:16:31 +00:00
public void CreateStorageContainer()
{
if (container == null && IsStorageContainer())
{
//Debug.Log("Item:CreateStorageContainer:" + gameObject.name);
2023-01-27 02:16:31 +00:00
container = Instantiate(containerUIPrefab, this.transform, false);// StorageWindow.StorageContainer.transform, false);
//itemUI.container.name = itemUI.container.name + " " + inCount;
container.GetComponentInChildren<GridUI>().SetAssociatedItemUI(this);
//container.SetActive(true); // TODO: modify this
StartCoroutine(coroutineA());
2023-01-27 02:16:31 +00:00
}
}
IEnumerator coroutineA()
{
// wait for 1 second
Debug.Log("coroutineA created");
yield return new WaitForEndOfFrame();
container.SetActive(false);
Debug.Log("coroutineA running again");
}
public void DropItemAway()
{
if (pickUp == null)
{
// TODO: Create a new pickup for items without a gameobject attached
Debug.LogError("No in-world gameobject previously attached with itemUI");
}
else
{
InventorySystem.instance.player.DetachItemGameObject(pickUp.ItemGameObject, this);
}
isDragging = false;
2022-12-23 03:50:16 +00:00
SetOverrideSortingCanvasEnabled(false);
InventorySystem.instance.DraggedItem = null;
UnsetSlot();
}
2022-12-23 03:50:16 +00:00
public void SetOverrideSortingCanvasEnabled(bool value)
{
/* if(overrideSortingCanvas != null)
{
overrideSortingCanvas.enabled = value;
}*/
}
public void SetInteractable(bool value)
{
interactable = value;
}
2023-03-15 11:43:15 +00:00
/*public void OnPointerExit(PointerEventData eventData)
{
//PointerIsHoveredOver = false;
}
public void OnPointerEnter(PointerEventData eventData)
{
//PointerIsHoveredOver = true;
2023-03-15 11:43:15 +00:00
}*/
2023-01-27 02:16:31 +00:00
public bool IsStorageContainer()
{
return containerUIPrefab != null && containerUIPrefab.GetComponent<GridUI>() != null;
}
}
}