167 lines
5.9 KiB
C#
167 lines
5.9 KiB
C#
using System;
|
|
using UnityEngine;
|
|
using UnityEngine.EventSystems;
|
|
using UnityEngine.Serialization;
|
|
|
|
public class InventorySlotDisplayController : MonoBehaviour, IDropHandler
|
|
{
|
|
// public Image icon;
|
|
// public Text itemName;
|
|
[FormerlySerializedAs("inventoryItem")]
|
|
public InventoryManager inventoryManager;
|
|
|
|
public GameObject inventoryItemPrefab;
|
|
|
|
// private Transform inventoryItemContainer;
|
|
private int _slotId;
|
|
|
|
public void OnDrop(PointerEventData eventData)
|
|
{
|
|
Debug.Log("Dropped on internal slot: " + _slotId);
|
|
inventoryManager = GameObject.Find("InventoryManager").GetComponent<InventoryManager>();
|
|
|
|
var destinationSlot = inventoryManager.GetSlot(_slotId);
|
|
var destinationItem = inventoryManager.GetItemFromSlot(destinationSlot.slotId);
|
|
var draggedSlotController = eventData.pointerDrag.GetComponentInParent<InventorySlotDisplayController>();
|
|
var draggedComponent = eventData.pointerDrag.GetComponent<InventoryItemDisplayController>();
|
|
var draggedItem = draggedComponent.gameItem;
|
|
|
|
var draggedSlotId = draggedSlotController._slotId;
|
|
|
|
Debug.Log("Dropped item: " + draggedItem.itemName);
|
|
|
|
// var sourceSlot = eventData.pointerDrag.GetComponentInParent<InventorySlotDisplayController>();
|
|
|
|
if (eventData.pointerDrag != null)
|
|
{
|
|
if (draggedItem == null)
|
|
{
|
|
Debug.Log("inventory item does not exist");
|
|
// Delete visual representation of dragged item
|
|
Destroy(eventData.pointerDrag);
|
|
return;
|
|
}
|
|
|
|
// Place the dragged item in this slot
|
|
// draggedComponent.GetComponent<RectTransform>().anchoredPosition =
|
|
// GetComponent<RectTransform>().anchoredPosition;
|
|
|
|
|
|
if (destinationItem == null)
|
|
{
|
|
Debug.Log("Destination slot is empty");
|
|
inventoryManager.SwapItems(destinationSlot.slotId, draggedSlotId);
|
|
|
|
// Re parent to this slot
|
|
draggedComponent.transform.SetParent(transform, false);
|
|
draggedComponent.GetComponent<RectTransform>().anchoredPosition = Vector2.zero;
|
|
draggedComponent.GetComponent<RectTransform>().offsetMin = Vector2.zero;
|
|
draggedComponent.GetComponent<RectTransform>().offsetMax = Vector2.zero;
|
|
}
|
|
else
|
|
{
|
|
Debug.Log("Destination slot is not empty");
|
|
inventoryManager.SwapItems(draggedSlotId, destinationSlot.slotId);
|
|
|
|
// Get the parent of the dragged component
|
|
|
|
// originalSlot.SetSlotDetails();
|
|
|
|
|
|
var selfItem = transform.Find("InventoryItem(Clone)").GetComponent<InventoryItemDisplayController>();
|
|
|
|
if (selfItem == null) Debug.Log("Self item is null");
|
|
|
|
|
|
selfItem.transform.SetParent(draggedSlotController.transform, false);
|
|
selfItem.GetComponent<RectTransform>().anchoredPosition = Vector2.zero;
|
|
selfItem.GetComponent<RectTransform>().offsetMin = Vector2.zero;
|
|
selfItem.GetComponent<RectTransform>().offsetMax = Vector2.zero;
|
|
|
|
// Re parent to this slot
|
|
draggedComponent.transform.SetParent(transform, false);
|
|
draggedComponent.GetComponent<RectTransform>().anchoredPosition = Vector2.zero;
|
|
draggedComponent.GetComponent<RectTransform>().offsetMin = Vector2.zero;
|
|
draggedComponent.GetComponent<RectTransform>().offsetMax = Vector2.zero;
|
|
}
|
|
}
|
|
}
|
|
|
|
public void SetSlotId(int id)
|
|
{
|
|
_slotId = id;
|
|
}
|
|
|
|
private void SwapItems(InventoryItemDisplayController draggedItemDisplayController)
|
|
{
|
|
inventoryManager = GameObject.Find("InventoryManager").GetComponent<InventoryManager>();
|
|
|
|
Debug.Log("!!!!!Swapping items");
|
|
var destinationSlot = inventoryManager.GetSlot(_slotId);
|
|
var originalSlot = draggedItemDisplayController.GetComponentInParent<InventorySlotDisplayController>();
|
|
var tempItem = destinationSlot.item;
|
|
|
|
// assigns to the destination slot the dragged item
|
|
AssignInventoryItem(draggedItemDisplayController.gameItem);
|
|
|
|
|
|
// If this slot had an item, move it to the dragged item's original slot
|
|
if (destinationSlot.item != null)
|
|
{
|
|
originalSlot.AssignInventoryItem(tempItem);
|
|
UIManager.Instance.InventoryUIController.UpdateUI();
|
|
}
|
|
else
|
|
{
|
|
Destroy(draggedItemDisplayController.gameObject);
|
|
}
|
|
}
|
|
|
|
public void AssignInventoryItem(GameItem newItem)
|
|
{
|
|
// Remove any existing InventoryItem(Clone) from this slot
|
|
try
|
|
{
|
|
Destroy(transform.Find("InventoryItem(Clone)")?.gameObject);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Debug.Log("No item to destroy");
|
|
}
|
|
|
|
if (inventoryItemPrefab == null)
|
|
{
|
|
Debug.LogError("InventoryItemPrefab not set");
|
|
return;
|
|
}
|
|
|
|
// Instantiate the new item in this slot
|
|
var newItemInstance = Instantiate(inventoryItemPrefab, transform);
|
|
var itemDisplay = newItemInstance.GetComponent<InventoryItemDisplayController>();
|
|
itemDisplay.SetItem(newItem);
|
|
}
|
|
|
|
public void SetInventoryItemPrefab(GameObject prefab)
|
|
{
|
|
inventoryItemPrefab = prefab;
|
|
}
|
|
|
|
public void DeleteInventoryItem()
|
|
{
|
|
Destroy(transform.Find("InventoryItem(Clone)")?.gameObject);
|
|
}
|
|
|
|
public void SetSlotDetails(InventorySlot slotDetails)
|
|
{
|
|
inventoryManager = GameObject.Find("InventoryManager").GetComponent<InventoryManager>();
|
|
|
|
_slotId = slotDetails.slotId;
|
|
if (slotDetails.item != null) AssignInventoryItem(slotDetails.item);
|
|
if (slotDetails.item == null) DeleteInventoryItem();
|
|
}
|
|
|
|
|
|
public void UpdateUI()
|
|
{
|
|
}
|
|
} |