mirror of
https://github.com/DerTyp7/example-top-down-unity.git
synced 2025-10-30 04:47:09 +01:00
Merge branch 'Inventory' into merge-inventory
This commit is contained in:
10
Assets/Scripts/ButtonEventHandler.cs
Normal file
10
Assets/Scripts/ButtonEventHandler.cs
Normal file
@@ -0,0 +1,10 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class ButtonEventHandler : MonoBehaviour
|
||||
{
|
||||
|
||||
[SerializeField] UI_Inventory inventory;
|
||||
|
||||
}
|
||||
11
Assets/Scripts/ButtonEventHandler.cs.meta
Normal file
11
Assets/Scripts/ButtonEventHandler.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 005d6c21020af7e41813cdc4202c886f
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/Scripts/Identity.cs
Normal file
8
Assets/Scripts/Identity.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class Identity : MonoBehaviour
|
||||
{
|
||||
public int index;
|
||||
}
|
||||
11
Assets/Scripts/Identity.cs.meta
Normal file
11
Assets/Scripts/Identity.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8e3ae0ca7d3fa0f4cb5a877a7f8183ec
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/Scripts/Inventory.meta
Normal file
8
Assets/Scripts/Inventory.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 27c09b7e7d0e7824f882a062a77737c2
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
10
Assets/Scripts/Inventory/FoodItem.cs
Normal file
10
Assets/Scripts/Inventory/FoodItem.cs
Normal file
@@ -0,0 +1,10 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
[CreateAssetMenu(fileName = "FoodItem", menuName = "Items/FoodItem", order = 2)]
|
||||
public class FoodItem : Item
|
||||
{
|
||||
public int health;
|
||||
public int water;
|
||||
public int regeneration;
|
||||
}
|
||||
11
Assets/Scripts/Inventory/FoodItem.cs.meta
Normal file
11
Assets/Scripts/Inventory/FoodItem.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0f6fecdcda7efd84baa350f4c41432a6
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
145
Assets/Scripts/Inventory/Inventory.cs
Normal file
145
Assets/Scripts/Inventory/Inventory.cs
Normal file
@@ -0,0 +1,145 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class Inventory : MonoBehaviour
|
||||
{
|
||||
/// <summary>
|
||||
/// -------------------------------------------------------------------------------///
|
||||
///
|
||||
/// Inventory holds a list of Slots where Items can be added.
|
||||
///
|
||||
///[IMPORTANT]
|
||||
/// !!createEmptyInventory(int numberOfSlots, int maxSpaceOfSlots) : Has to be called after the Inventory has been initialized!!
|
||||
///
|
||||
///[Methods]
|
||||
/// getInventory() : Gets the list of Slots.
|
||||
/// addItemAt(int index, Item itemType,int count) : Adds a number (count) of items of type itemType (itemType) to an item slot(index).
|
||||
/// removeItemAt(int index, int count) : Removes a number of items (count) from a specific slot (index).
|
||||
/// addInventorySlots(int numberOfSlots, int maxSpaceOfSlots = 10)
|
||||
///
|
||||
/// -------------------------------------------------------------------------------///
|
||||
/// </summary>
|
||||
|
||||
|
||||
public delegate void OnItemChanged();
|
||||
public OnItemChanged onItemChangedCallback; //
|
||||
|
||||
List<Slot> inventory = new List<Slot>();
|
||||
|
||||
public List<Slot> getInventory { get => inventory;}
|
||||
public void createEmptyInventory(int numberOfSlots, int maxSpaceOfSlots = 10)
|
||||
{
|
||||
// Initializes the inventory with a specific number of slots and slotsize.
|
||||
// !!!Has to be called bevore adding any items!!!
|
||||
// Example createEmptyInventory(5, 10) : 5 Slots with space for 10 items each
|
||||
inventory = new List<Slot>();
|
||||
for (int i = 0; i < numberOfSlots; i++)
|
||||
{
|
||||
inventory.Add(new Slot(maxSpaceOfSlots));
|
||||
}
|
||||
if (onItemChangedCallback != null)
|
||||
onItemChangedCallback.Invoke();
|
||||
}
|
||||
public void addInventorySlots(int numberOfSlots, int maxSpaceOfSlots = 10)
|
||||
{
|
||||
// Adds a specific number of slots and slotsize to the inventory.
|
||||
// Example addInventorySlots(5, 10) : Adds 5 Slots with space for 10 items each
|
||||
for (int i = 0; i < numberOfSlots; i++)
|
||||
{
|
||||
inventory.Add(new Slot(maxSpaceOfSlots));
|
||||
}
|
||||
if (onItemChangedCallback != null)
|
||||
onItemChangedCallback.Invoke();
|
||||
}
|
||||
public int addItemAt(int index, Item itemType,int count)
|
||||
{
|
||||
// Adds a number (count = 7) of items of type itemType (itemType = Stone) to an item slot(index = 3).
|
||||
//Returns the number of items that could not be added because of unsufficent space in the specefied slot
|
||||
//or Return -1 if the index is out of bound or the item slot is already filled with a different itemType.
|
||||
//
|
||||
// Example inventory.addItemAt(3,Stone,7);
|
||||
|
||||
if (indexIsInRange(index) && (inventory[index].ItemType == null || inventory[index].ItemType.id == itemType.id))
|
||||
{
|
||||
if (inventory[index].ItemType == null)
|
||||
{
|
||||
inventory[index].ItemType = Instantiate(itemType); // Set the itemType if the slot was empty.
|
||||
}
|
||||
|
||||
if (inventory[index].MaxItems == inventory[index].Count)
|
||||
{
|
||||
|
||||
if (onItemChangedCallback != null)
|
||||
onItemChangedCallback.Invoke();
|
||||
return count; // Can't add any items if the slot is full.
|
||||
}
|
||||
else if (inventory[index].MaxItems >= inventory[index].Count + count)
|
||||
{
|
||||
inventory[index].addItem(count); // Adds all items if there is enought space.
|
||||
if(onItemChangedCallback != null)
|
||||
onItemChangedCallback.Invoke();
|
||||
return 0;
|
||||
} else
|
||||
{
|
||||
int rest = count - inventory[index].MaxItems - inventory[index].Count;
|
||||
inventory[index].addItem(inventory[index].MaxItems - inventory[index].Count); // Adds the number of items until the slot is full and returns the number of items that didn't fit.
|
||||
if (onItemChangedCallback != null)
|
||||
onItemChangedCallback.Invoke();
|
||||
return rest;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
return -1;//Wrong item or index not in range.
|
||||
}
|
||||
}
|
||||
public int removeItemAt(int index, int count)
|
||||
{
|
||||
// Removes a number of items (count = 5) from a specific slot (index = 4).
|
||||
// Example inventory.removeItemAt(4,5)
|
||||
if (indexIsInRange(index))
|
||||
{
|
||||
if (inventory[index].ItemType == null)
|
||||
{
|
||||
return count;// Can't remove any items if the slot is empty.
|
||||
}
|
||||
else if (inventory[index].Count > count)
|
||||
{
|
||||
inventory[index].removeItem(count);// Removes the number of items if there are more or equal items in the slot.
|
||||
return 0;
|
||||
}
|
||||
else if (inventory[index].Count <= count)
|
||||
{
|
||||
int rest = count - inventory[index].Count;
|
||||
inventory[index].Count = 0; // Removes all the items from the slot and returns the number of items that could not be removed.
|
||||
inventory[index].ItemType = null; // When the slot is empty the itemType can also be removed.
|
||||
return rest;
|
||||
}
|
||||
else
|
||||
{
|
||||
return -1; // Something went wrong (you should never end up in here).
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
return -1;//Index not in range.
|
||||
}
|
||||
}
|
||||
private bool indexIsInRange(int index)
|
||||
{
|
||||
// Returns true if a given index is in the bounds of the inventory.
|
||||
// Example (maxSize = 10) index = -10 : false , index = 100: false, index = 7 : true
|
||||
|
||||
if (index < inventory.Count && index >= 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Assets/Scripts/Inventory/Inventory.cs.meta
Normal file
11
Assets/Scripts/Inventory/Inventory.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ee2fcb6d299019740bbede78bbc6a1d7
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
39
Assets/Scripts/Inventory/InventoryController.cs
Normal file
39
Assets/Scripts/Inventory/InventoryController.cs
Normal file
@@ -0,0 +1,39 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class InventoryController : MonoBehaviour
|
||||
{
|
||||
[SerializeField] Item item1;// not needed
|
||||
[SerializeField] Item item2;// not needed
|
||||
public Inventory inventory;
|
||||
[SerializeField] UI_Inventory uiInventory;
|
||||
private void Awake()
|
||||
{
|
||||
inventory = transform.GetComponent<Inventory>();
|
||||
inventory.createEmptyInventory(8,10);
|
||||
|
||||
inventory.addItemAt(0, item1, 8);
|
||||
inventory.addItemAt(0, item1, 1);
|
||||
inventory.addItemAt(3, item2, 15);
|
||||
inventory.addItemAt(4, item1, 3);
|
||||
|
||||
/*
|
||||
Debug.Log(inventory.addItemAt(0, item2, 15));
|
||||
Debug.Log(inventory.getInventory[0].Count);
|
||||
Debug.Log(inventory.removeItemAt(0, 10));
|
||||
Debug.Log(inventory.getInventory[0].Count);
|
||||
*/
|
||||
uiInventory.setInventory(inventory);
|
||||
}
|
||||
void Start()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
11
Assets/Scripts/Inventory/InventoryController.cs.meta
Normal file
11
Assets/Scripts/Inventory/InventoryController.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cff3b5ce3863a7442a86b400700ff131
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
12
Assets/Scripts/Inventory/Item.cs
Normal file
12
Assets/Scripts/Inventory/Item.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
[CreateAssetMenu(fileName = "Item", menuName = "Items/Item", order = 1)]
|
||||
public class Item : ScriptableObject
|
||||
{
|
||||
public new string name;
|
||||
public int id;
|
||||
public bool isStackable;
|
||||
public Sprite sprite;
|
||||
}
|
||||
11
Assets/Scripts/Inventory/Item.cs.meta
Normal file
11
Assets/Scripts/Inventory/Item.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: de55e2e3081d4ee4a9d0737e718a5b3b
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
19
Assets/Scripts/Inventory/ItemAtlas.cs
Normal file
19
Assets/Scripts/Inventory/ItemAtlas.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class ItemAtlas : MonoBehaviour
|
||||
{
|
||||
public static ItemAtlas Instance { get; private set; }
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
Instance = this;
|
||||
}
|
||||
enum ItemTypes {
|
||||
STONE,TOMATO
|
||||
|
||||
}
|
||||
public Sprite stoneSprite;
|
||||
public Sprite woodSprite;
|
||||
}
|
||||
11
Assets/Scripts/Inventory/ItemAtlas.cs.meta
Normal file
11
Assets/Scripts/Inventory/ItemAtlas.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 362c4fe8229e41c46b489ad07bfa9133
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/Scripts/Inventory/Items.meta
Normal file
8
Assets/Scripts/Inventory/Items.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: db274161008cc6a4a8c92d42b6a81832
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
237
Assets/Scripts/Inventory/Items/ContainerTemplate.prefab
Normal file
237
Assets/Scripts/Inventory/Items/ContainerTemplate.prefab
Normal file
@@ -0,0 +1,237 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &1031884711933943707
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2917703646420147887}
|
||||
- component: {fileID: 9007524712572810876}
|
||||
- component: {fileID: 5255690316907466923}
|
||||
- component: {fileID: 2310262034725730047}
|
||||
m_Layer: 0
|
||||
m_Name: Button
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &2917703646420147887
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1031884711933943707}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 4215392545672552190}
|
||||
m_Father: {fileID: 4215392545969358082}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: -0, y: 0}
|
||||
m_SizeDelta: {x: 85, y: 85}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &9007524712572810876
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1031884711933943707}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &5255690316907466923
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1031884711933943707}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 21300000, guid: 0543fd6b654bedd4fa82b563887c0609, type: 3}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!114 &2310262034725730047
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1031884711933943707}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Navigation:
|
||||
m_Mode: 0
|
||||
m_WrapAround: 0
|
||||
m_SelectOnUp: {fileID: 0}
|
||||
m_SelectOnDown: {fileID: 0}
|
||||
m_SelectOnLeft: {fileID: 0}
|
||||
m_SelectOnRight: {fileID: 0}
|
||||
m_Transition: 1
|
||||
m_Colors:
|
||||
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_HighlightedColor: {r: 0.4811321, g: 0.4811321, b: 0.4811321, a: 1}
|
||||
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
|
||||
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
|
||||
m_ColorMultiplier: 1
|
||||
m_FadeDuration: 0.1
|
||||
m_SpriteState:
|
||||
m_HighlightedSprite: {fileID: 0}
|
||||
m_PressedSprite: {fileID: 0}
|
||||
m_SelectedSprite: {fileID: 0}
|
||||
m_DisabledSprite: {fileID: 0}
|
||||
m_AnimationTriggers:
|
||||
m_NormalTrigger: Normal
|
||||
m_HighlightedTrigger: Highlighted
|
||||
m_PressedTrigger: Pressed
|
||||
m_SelectedTrigger: Selected
|
||||
m_DisabledTrigger: Disabled
|
||||
m_Interactable: 1
|
||||
m_TargetGraphic: {fileID: 5255690316907466923}
|
||||
m_OnClick:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
--- !u!1 &4215392545672552185
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4215392545672552190}
|
||||
- component: {fileID: 4215392545672552188}
|
||||
- component: {fileID: 4215392545672552191}
|
||||
m_Layer: 0
|
||||
m_Name: Icon
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &4215392545672552190
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4215392545672552185}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 2917703646420147887}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 70, y: 70}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &4215392545672552188
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4215392545672552185}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &4215392545672552191
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4215392545672552185}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 21300000, guid: 475f050511847c0499c1ca4f47fcaefa, type: 3}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 1
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &4215392545969358109
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4215392545969358082}
|
||||
m_Layer: 0
|
||||
m_Name: ContainerTemplate
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &4215392545969358082
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4215392545969358109}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 2917703646420147887}
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: -443, y: 131.1}
|
||||
m_SizeDelta: {x: 100, y: 100}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ac29b266608f92b419b28a16d8ee7c1b
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
18
Assets/Scripts/Inventory/Items/Lumber.asset
Normal file
18
Assets/Scripts/Inventory/Items/Lumber.asset
Normal file
@@ -0,0 +1,18 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: de55e2e3081d4ee4a9d0737e718a5b3b, type: 3}
|
||||
m_Name: Lumber
|
||||
m_EditorClassIdentifier:
|
||||
name: Lumber
|
||||
id: 3
|
||||
isStackable: 1
|
||||
sprite: {fileID: 21300000, guid: 636c61591a702914dadb6abf17d92f6f, type: 3}
|
||||
8
Assets/Scripts/Inventory/Items/Lumber.asset.meta
Normal file
8
Assets/Scripts/Inventory/Items/Lumber.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 90fd8b1738596514f860a4ce5adaba88
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
18
Assets/Scripts/Inventory/Items/Stone.asset
Normal file
18
Assets/Scripts/Inventory/Items/Stone.asset
Normal file
@@ -0,0 +1,18 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: de55e2e3081d4ee4a9d0737e718a5b3b, type: 3}
|
||||
m_Name: Stone
|
||||
m_EditorClassIdentifier:
|
||||
name: Stone
|
||||
id: 0
|
||||
isStackable: 1
|
||||
sprite: {fileID: 21300000, guid: 475f050511847c0499c1ca4f47fcaefa, type: 3}
|
||||
8
Assets/Scripts/Inventory/Items/Stone.asset.meta
Normal file
8
Assets/Scripts/Inventory/Items/Stone.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e04039a6cbed5e5439b605aeee90485f
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
21
Assets/Scripts/Inventory/Items/Tomato.asset
Normal file
21
Assets/Scripts/Inventory/Items/Tomato.asset
Normal file
@@ -0,0 +1,21 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 0f6fecdcda7efd84baa350f4c41432a6, type: 3}
|
||||
m_Name: Tomato
|
||||
m_EditorClassIdentifier:
|
||||
name: Tomato
|
||||
id: 1
|
||||
isStackable: 1
|
||||
sprite: {fileID: 21300000, guid: 5ee3152fa9663e94092921b0bd6b4821, type: 3}
|
||||
health: 15
|
||||
water: 10
|
||||
regeneration: 2
|
||||
8
Assets/Scripts/Inventory/Items/Tomato.asset.meta
Normal file
8
Assets/Scripts/Inventory/Items/Tomato.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a29513e23691eb0408e3b0e1a8e99148
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
18
Assets/Scripts/Inventory/Items/Wood.asset
Normal file
18
Assets/Scripts/Inventory/Items/Wood.asset
Normal file
@@ -0,0 +1,18 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: de55e2e3081d4ee4a9d0737e718a5b3b, type: 3}
|
||||
m_Name: Wood
|
||||
m_EditorClassIdentifier:
|
||||
name: Wood
|
||||
id: 2
|
||||
isStackable: 1
|
||||
sprite: {fileID: 21300000, guid: 30728ae26107dfe438d180ab175fdaca, type: 3}
|
||||
8
Assets/Scripts/Inventory/Items/Wood.asset.meta
Normal file
8
Assets/Scripts/Inventory/Items/Wood.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8ac3fa2505f8292498c5c20cf4fea84d
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
54
Assets/Scripts/Inventory/Slot.cs
Normal file
54
Assets/Scripts/Inventory/Slot.cs
Normal file
@@ -0,0 +1,54 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class Slot
|
||||
{
|
||||
/// <summary>
|
||||
/// Holds an itemType the number of items and the number of maxItems
|
||||
/// this has no logic so everything has to be done from the outside
|
||||
/// [Get/Set]
|
||||
/// ItemType
|
||||
/// Count
|
||||
/// MaxItems
|
||||
/// [Methods]
|
||||
/// void addItem(int count = 1)
|
||||
/// void removeItem(int count = 1)
|
||||
/// void clear()
|
||||
/// </summary>
|
||||
|
||||
Item item;
|
||||
int maxItems = 1;
|
||||
int count = 0;
|
||||
public Item ItemType { get => item; set => item = value; }
|
||||
public int Count { get => count; set => count = value; }
|
||||
public int MaxItems { get => maxItems; set => maxItems = value; }
|
||||
public Slot(int maxItems = 1)
|
||||
{
|
||||
item = null;
|
||||
this.maxItems = maxItems;
|
||||
}
|
||||
public void addItem(int count = 1)
|
||||
{
|
||||
// adds any number of items to the slot will also go over the max items
|
||||
this.count += count;
|
||||
}
|
||||
public void removeItem(int count = 1)
|
||||
{
|
||||
// removes any number of items from the slot will also go negative
|
||||
this.count -= count;
|
||||
}
|
||||
public void clear()
|
||||
{
|
||||
item = null;
|
||||
count = 0;
|
||||
}
|
||||
public Slot copy()
|
||||
{
|
||||
Slot slot = new Slot(maxItems);
|
||||
slot.count = count;
|
||||
slot.ItemType = ItemType;
|
||||
|
||||
return slot;
|
||||
}
|
||||
}
|
||||
11
Assets/Scripts/Inventory/Slot.cs.meta
Normal file
11
Assets/Scripts/Inventory/Slot.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 497c0b5449a4c3141b273db4d97546c3
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
136
Assets/Scripts/Inventory/UI_Inventory.cs
Normal file
136
Assets/Scripts/Inventory/UI_Inventory.cs
Normal file
@@ -0,0 +1,136 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
public class UI_Inventory : MonoBehaviour
|
||||
{
|
||||
Inventory playerInventory;
|
||||
public Transform inventoryContainer;
|
||||
public Transform itemSlotTemplate;
|
||||
private RectTransform[] UIItemSlots;
|
||||
private Button[] buttons;
|
||||
private Slot pickedItem = new Slot();
|
||||
private RectTransform pickedItemSlot;
|
||||
private void Awake()
|
||||
{
|
||||
//itemSlotTemplate = inventoryContainer.Find("containerTemplate");
|
||||
pickedItemSlot = Instantiate(itemSlotTemplate, this.transform).GetComponent<RectTransform>();
|
||||
}
|
||||
|
||||
void pickItem(int index)
|
||||
{
|
||||
pickedItem = playerInventory.getInventory[index].copy();
|
||||
playerInventory.getInventory[index].clear();
|
||||
UIItemSlots[index].GetChild(0).Find("Icon").gameObject.SetActive(false);
|
||||
}
|
||||
void placeItem()
|
||||
{
|
||||
|
||||
}
|
||||
public void buttonEvent(int index)
|
||||
{
|
||||
if (pickedItem.ItemType == null && playerInventory.getInventory[index].ItemType != null)
|
||||
{
|
||||
pickItem(index);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (pickedItem.ItemType != null)
|
||||
{
|
||||
int rest = playerInventory.addItemAt(index, pickedItem.ItemType, pickedItem.Count);
|
||||
if (rest == 0)
|
||||
{
|
||||
pickedItem.clear();
|
||||
}
|
||||
else
|
||||
{
|
||||
pickedItem.Count = rest;
|
||||
}
|
||||
//placeItem(index);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//Debug.Log("button " + index + " has been pressed!");
|
||||
}
|
||||
public void setInventory(Inventory inventory)
|
||||
{
|
||||
playerInventory = inventory;
|
||||
inventory.onItemChangedCallback += updateInventory;
|
||||
updateInventory();
|
||||
}
|
||||
private void Update()
|
||||
{
|
||||
//buttons[index] = itemSlotRectTransform.Find("Button").GetComponent<Button>();
|
||||
//itemSlotRectTransform.Find("Button").GetComponent<Identity>().index = index;
|
||||
//buttons[index].onClick.AddListener(() => buttonEvent(itemSlotRectTransform.Find("Button").GetComponent<Identity>().index));
|
||||
pickedItemSlot.anchoredPosition = new Vector2(Input.mousePosition.x, 0);
|
||||
pickedItemSlot.gameObject.SetActive(true);
|
||||
pickedItemSlot.gameObject.name = "pickedItem";
|
||||
|
||||
if (pickedItem.ItemType != null)
|
||||
{
|
||||
Transform item = pickedItemSlot.GetChild(0).Find("Icon");
|
||||
item.gameObject.SetActive(true);
|
||||
item.GetComponent<Image>().sprite = pickedItem.ItemType.sprite;
|
||||
}
|
||||
else
|
||||
{
|
||||
Transform item = pickedItemSlot.GetChild(0).Find("Icon");
|
||||
item.gameObject.SetActive(false);
|
||||
}
|
||||
}
|
||||
private void updateInventory()
|
||||
{
|
||||
|
||||
int rows = 2;
|
||||
int columns = 4;
|
||||
float slotSize = 95;
|
||||
int x = 0;
|
||||
int y = 0;
|
||||
int index = 0;
|
||||
if (UIItemSlots != null) {
|
||||
foreach (RectTransform ItemSLot in UIItemSlots)
|
||||
{
|
||||
Destroy(ItemSLot.gameObject);
|
||||
}
|
||||
}
|
||||
|
||||
UIItemSlots = new RectTransform[playerInventory.getInventory.Count];
|
||||
buttons = new Button[playerInventory.getInventory.Count];
|
||||
//inventoryContainer.GetComponent<RectTransform>().
|
||||
foreach (Slot slot in playerInventory.getInventory)
|
||||
{
|
||||
RectTransform itemSlotRectTransform = Instantiate(itemSlotTemplate, inventoryContainer).GetComponent<RectTransform>();
|
||||
buttons[index] = itemSlotRectTransform.Find("Button").GetComponent<Button>();
|
||||
itemSlotRectTransform.Find("Button").GetComponent<Identity>().index = index;
|
||||
buttons[index].onClick.AddListener(() => buttonEvent(itemSlotRectTransform.Find("Button").GetComponent<Identity>().index));
|
||||
itemSlotRectTransform.anchoredPosition = new Vector2(x* slotSize + slotSize * 0.5f,y * slotSize - slotSize * 0.5f );
|
||||
itemSlotRectTransform.gameObject.SetActive(true);
|
||||
itemSlotRectTransform.gameObject.name = "ItemSlot" + index;
|
||||
|
||||
if (slot.ItemType != null)
|
||||
{
|
||||
Transform item = itemSlotRectTransform.GetChild(0).Find("Icon");
|
||||
Transform itemCount = itemSlotRectTransform.GetChild(0).Find("Count");
|
||||
item.gameObject.SetActive(true);
|
||||
item.GetComponent<Image>().sprite = slot.ItemType.sprite;
|
||||
if (slot.Count > 1)
|
||||
{
|
||||
itemCount.gameObject.SetActive(true);
|
||||
itemCount.GetComponent<TextMeshProUGUI>().text = slot.Count.ToString();
|
||||
}
|
||||
}
|
||||
x++;
|
||||
if (x > 3)
|
||||
{
|
||||
x = 0;
|
||||
y--;
|
||||
}
|
||||
UIItemSlots[index] = itemSlotRectTransform;
|
||||
index++;
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Assets/Scripts/Inventory/UI_Inventory.cs.meta
Normal file
11
Assets/Scripts/Inventory/UI_Inventory.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2270781166138a84fa19eefc3f92bda6
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user