This commit is contained in:
Janis
2023-03-01 22:28:06 +01:00
parent 36337c8a72
commit ae0b21f9e9
19 changed files with 600 additions and 455 deletions

View File

@@ -0,0 +1,27 @@
%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: f00df81b4ec12f844a6f928d013437b2, type: 3}
m_Name: Apple
m_EditorClassIdentifier:
uuid: apple
itemName: Apple Crop
sprite: {fileID: -992969038, guid: 81f3e7dd6e7b15747a4a5c1923fb8521, type: 3}
stackable: 0
maxStackSize: 1
daysToGrow: 6
sprites:
- {fileID: -1568493089, guid: 81f3e7dd6e7b15747a4a5c1923fb8521, type: 3}
- {fileID: 1918686608, guid: 81f3e7dd6e7b15747a4a5c1923fb8521, type: 3}
- {fileID: -400346732, guid: 81f3e7dd6e7b15747a4a5c1923fb8521, type: 3}
- {fileID: -1058307475, guid: 81f3e7dd6e7b15747a4a5c1923fb8521, type: 3}
- {fileID: -1664452952, guid: 81f3e7dd6e7b15747a4a5c1923fb8521, type: 3}
- {fileID: 1402415594, guid: 81f3e7dd6e7b15747a4a5c1923fb8521, type: 3}

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 4ce577b0996dc314ab1b42f42614e3a2
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -142,7 +142,7 @@ GameObject:
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 0
--- !u!224 &153338328 --- !u!224 &153338328
RectTransform: RectTransform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -215,6 +215,9 @@ MonoBehaviour:
m_EditorClassIdentifier: m_EditorClassIdentifier:
panelName: Hotbar panelName: Hotbar
hotbarSlotPrefab: {fileID: 1989902681405785901, guid: 9bed75a8e605a864fb4b41f3e0ae9517, type: 3} hotbarSlotPrefab: {fileID: 1989902681405785901, guid: 9bed75a8e605a864fb4b41f3e0ae9517, type: 3}
slots: []
playerController: {fileID: 0}
hotbarSlotCount: 9
--- !u!114 &153338332 --- !u!114 &153338332
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -318,7 +321,6 @@ GameObject:
- component: {fileID: 224768190} - component: {fileID: 224768190}
- component: {fileID: 224768189} - component: {fileID: 224768189}
- component: {fileID: 224768188} - component: {fileID: 224768188}
- component: {fileID: 224768193}
- component: {fileID: 224768187} - component: {fileID: 224768187}
- component: {fileID: 224768191} - component: {fileID: 224768191}
- component: {fileID: 224768192} - component: {fileID: 224768192}
@@ -468,21 +470,6 @@ CapsuleCollider2D:
m_Offset: {x: 0.005384445, y: -0.8123081} m_Offset: {x: 0.005384445, y: -0.8123081}
m_Size: {x: 0.3146143, y: 0.3146143} m_Size: {x: 0.3146143, y: 0.3146143}
m_Direction: 0 m_Direction: 0
--- !u!114 &224768193
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 224768186}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d50a6d9f6c7ba0e49a308d097eb64fb7, type: 3}
m_Name:
m_EditorClassIdentifier:
isPlayerInventory: 1
maxSlots: 36
items: []
--- !u!114 &224768194 --- !u!114 &224768194
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -495,12 +482,90 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: fd29210254821be4dab438ab0312df18, type: 3} m_Script: {fileID: 11500000, guid: fd29210254821be4dab438ab0312df18, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
testItem1: {fileID: 11400000, guid: 601d7a33a6c338d49a35134d5c772940, type: 2} --- !u!1 &518922041
testItem2: {fileID: 11400000, guid: cbbbe8384f7ec2845b4145744d51ecf8, type: 2} GameObject:
interactionDistance: 2 m_ObjectHideFlags: 0
hotbarSlotCount: 9 m_CorrespondingSourceObject: {fileID: 0}
activeHotbarSlot: 0 m_PrefabInstance: {fileID: 0}
playerInventory: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 518922043}
- component: {fileID: 518922042}
m_Layer: 0
m_Name: Crops
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!212 &518922042
SpriteRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 518922041}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 0
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 0
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 949894591
m_SortingLayer: -1
m_SortingOrder: 1
m_Sprite: {fileID: 109301499, guid: 81f3e7dd6e7b15747a4a5c1923fb8521, type: 3}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_FlipX: 0
m_FlipY: 0
m_DrawMode: 2
m_Size: {x: 10, y: 10}
m_AdaptiveModeThreshold: 0.5
m_SpriteTileMode: 0
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!4 &518922043
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 518922041}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.1, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1047402456}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &519420028 --- !u!1 &519420028
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -817,6 +882,90 @@ Tilemap:
e31: 0 e31: 0
e32: 0 e32: 0
e33: 1 e33: 1
--- !u!1 &531540402
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 531540404}
- component: {fileID: 531540403}
m_Layer: 0
m_Name: Background
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!212 &531540403
SpriteRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 531540402}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 0
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 0
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 949894591
m_SortingLayer: -1
m_SortingOrder: 0
m_Sprite: {fileID: 2046970518, guid: 705252b03b9874148b86d73e7eb692ac, type: 3}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_FlipX: 0
m_FlipY: 0
m_DrawMode: 2
m_Size: {x: 10, y: 10}
m_AdaptiveModeThreshold: 0.5
m_SpriteTileMode: 0
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!4 &531540404
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 531540402}
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: 1047402456}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &550426624 --- !u!1 &550426624
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -1087,6 +1236,7 @@ GameObject:
- component: {fileID: 727688472} - component: {fileID: 727688472}
- component: {fileID: 727688471} - component: {fileID: 727688471}
- component: {fileID: 727688473} - component: {fileID: 727688473}
- component: {fileID: 727688474}
m_Layer: 0 m_Layer: 0
m_Name: ---GameManager--- m_Name: ---GameManager---
m_TagString: GameController m_TagString: GameController
@@ -1106,7 +1256,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: efc6be5d380533e4bb0a0179bec47c77, type: 3} m_Script: {fileID: 11500000, guid: efc6be5d380533e4bb0a0179bec47c77, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
minuteToRealTime: 0.5 minuteToRealTime: 0.05
--- !u!4 &727688472 --- !u!4 &727688472
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -1134,6 +1284,22 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 7f6b0f7d7d44d8a4c9fa79d01ee4ec53, type: 3} m_Script: {fileID: 11500000, guid: 7f6b0f7d7d44d8a4c9fa79d01ee4ec53, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
--- !u!114 &727688474
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 727688470}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7465a8b99db65d04a862b423ae2ccdf3, type: 3}
m_Name:
m_EditorClassIdentifier:
cropInventory:
maxSlots: 0
maxStackSize: 0
items: []
--- !u!1 &789509403 --- !u!1 &789509403
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -56771,7 +56937,7 @@ GameObject:
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 0
--- !u!224 &1027537965 --- !u!224 &1027537965
RectTransform: RectTransform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -56847,6 +57013,60 @@ MonoBehaviour:
slotPrefab: {fileID: 9079120991637034566, guid: 9fb7f575f90d73343b4841c421d17567, type: 3} slotPrefab: {fileID: 9079120991637034566, guid: 9fb7f575f90d73343b4841c421d17567, type: 3}
slotListObj: {fileID: 1707136373} slotListObj: {fileID: 1707136373}
slotUIList: [] slotUIList: []
--- !u!1 &1047402454
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1047402456}
- component: {fileID: 1047402455}
m_Layer: 0
m_Name: Field
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1047402455
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1047402454}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d700e4905ee3fd2408f52a4e3ecb48e8, type: 3}
m_Name:
m_EditorClassIdentifier:
isPlaced: 1
placeableObject: {fileID: 0}
TESTCROP: {fileID: 11400000, guid: 4ce577b0996dc314ab1b42f42614e3a2, type: 2}
crop: {fileID: 0}
currentCropSprite: {fileID: 518922042}
daysSincePlanted: 0
isWatered: 1
state: 0
--- !u!4 &1047402456
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1047402454}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -25, y: -5, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 518922043}
- {fileID: 531540404}
m_Father: {fileID: 0}
m_RootOrder: 6
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1507699183 --- !u!1 &1507699183
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0

View File

@@ -12,6 +12,6 @@ public class Clock : MonoBehaviour
} }
private void GetTime() private void GetTime()
{ {
text.SetText($"{TimeManager.Day:00}D | {TimeManager.Hour:00}:{TimeManager.Minute:00}"); text.SetText($"{TimeManager.Hour:00}:{TimeManager.Minute:00}<br>{TimeManager.Day:00}.{TimeManager.Month:00}.{TimeManager.Year:00}");
} }
} }

View File

@@ -0,0 +1,10 @@
using UnityEngine;
public class FarmManager : MonoBehaviour
{
public Inventory<Crop> cropInventory;
private void Start()
{
cropInventory = new Inventory<Crop>(2, 200);
}
}

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: ab99e668aa1ba5a469eef680f3bb4b45 guid: 7465a8b99db65d04a862b423ae2ccdf3
MonoImporter: MonoImporter:
externalObjects: {} externalObjects: {}
serializedVersion: 2 serializedVersion: 2

View File

@@ -1,5 +1,12 @@
using UnityEngine; using UnityEngine;
using UnityEngine.Tilemaps;
public enum FieldState
{
EMPTY,
DEAD,
GROWING,
HARVESTABLE,
}
public class Field : Building public class Field : Building
{ {
@@ -8,18 +15,22 @@ public class Field : Building
public SpriteRenderer currentCropSprite; public SpriteRenderer currentCropSprite;
public int daysSincePlanted; public int daysSincePlanted;
public bool isWatered; public bool isWatered = false;
public bool isDead = false; public FieldState state = FieldState.EMPTY;
private void Start() private void Start()
{ {
TimeManager.OnDayChanged += AddDay; TimeManager.OnDayChanged += AddDay;
//! DEBUG
OnPlace();
} }
private void AddDay() private void AddDay()
{ {
if (crop && isPlaced && !isDead) if (crop && isPlaced && state != FieldState.DEAD)
{ {
if (!isWatered) if (!isWatered)
isDead = true; state = FieldState.DEAD;
else else
{ {
daysSincePlanted++; daysSincePlanted++;
@@ -32,14 +43,14 @@ public class Field : Building
public void Plant(Crop newCrop) public void Plant(Crop newCrop)
{ {
daysSincePlanted = 0; daysSincePlanted = 0;
isDead = false; state = FieldState.GROWING;
crop = newCrop; crop = newCrop;
} }
public override void OnPlace() public override void OnPlace()
{ {
daysSincePlanted = 0; daysSincePlanted = 0;
isDead = false; state = FieldState.GROWING;
Plant(TESTCROP); Plant(TESTCROP);
} }
} }

View File

@@ -1,26 +1,39 @@
using System.Collections.Generic;
using UnityEngine; using UnityEngine;
using System; using System;
public class Inventory : MonoBehaviour
[System.Serializable]
public class Inventory<TItem> where TItem : Item
{ {
public static Action OnPlayerInventoryChanged; [SerializeField]
private int maxSlots;
public int maxStackSize;
public bool isPlayerInventory = false; [SerializeField]
public int maxSlots = 20; // maximum number of slots in the inventory private InventoryItem<TItem>[] items;
public InventoryItem[] items; // list of items in the inventory
public Inventory(int maxSlots = 1, int maxStackSize = 100)
private void Awake()
{ {
items = new InventoryItem[maxSlots]; this.maxSlots = maxSlots;
for (int i = 0; i < maxSlots; i++) this.maxStackSize = maxStackSize;
items = new InventoryItem<TItem>[maxSlots];
generateEmtpySlots();
}
public void setMaxSlots(int newMaxSlots)
{
maxSlots = newMaxSlots;
generateEmtpySlots();
}
private void generateEmtpySlots()
{
for (int i = items.Length > 0 ? items.Length - 1 : 0; i < maxSlots; i++)
{ {
items[i] = null; items[i] = null;
} }
} }
// adds an item to the inventory, returns the quantity of items which could not be added // adds an item to the inventory, returns the quantity of items which could not be added
public int Add(Item item, int count) public int Add(TItem item, int count)
{ {
int remainingCount = count; int remainingCount = count;
@@ -31,11 +44,11 @@ public class Inventory : MonoBehaviour
// look for an existing stack of the same item in the inventory // look for an existing stack of the same item in the inventory
for (int i = 0; i < items.Length; i++) for (int i = 0; i < items.Length; i++)
{ {
InventoryItem invItem = items[i]; InventoryItem<TItem> invItem = items[i];
if (invItem != null && invItem.item == item && invItem.count < item.maxStackSize) if (invItem != null && invItem.item == item && invItem.count < maxStackSize)
{ {
// add as many items as possible to the stack // add as many items as possible to the stack
int space = item.maxStackSize - invItem.count; int space = maxStackSize - invItem.count;
int toAdd = Mathf.Min(space, remainingCount); int toAdd = Mathf.Min(space, remainingCount);
invItem.count += toAdd; invItem.count += toAdd;
remainingCount -= toAdd; remainingCount -= toAdd;
@@ -43,10 +56,6 @@ public class Inventory : MonoBehaviour
// exit the loop if all items have been added // exit the loop if all items have been added
if (remainingCount == 0) if (remainingCount == 0)
{ {
if (isPlayerInventory)
{
OnPlayerInventoryChanged?.Invoke();
}
return 0; return 0;
} }
@@ -58,35 +67,23 @@ public class Inventory : MonoBehaviour
for (int i = 0; i < items.Length; i++) for (int i = 0; i < items.Length; i++)
{ {
InventoryItem invItem = items[i]; InventoryItem<TItem> invItem = items[i];
Debug.Log(invItem); Debug.Log(invItem);
if (invItem?.item == null) if (invItem?.item == null)
{ {
int toAdd = Mathf.Min(item.maxStackSize, remainingCount); int toAdd = Mathf.Min(maxStackSize, remainingCount);
items[i] = new InventoryItem(item, toAdd); items[i] = new InventoryItem<TItem>(item, toAdd);
remainingCount -= toAdd; remainingCount -= toAdd;
// exit the loop if all items have been added // exit the loop if all items have been added
if (remainingCount == 0) if (remainingCount == 0)
{ {
if (isPlayerInventory)
{
OnPlayerInventoryChanged?.Invoke();
}
return 0; return 0;
} }
} }
} }
// return the quantity of items which could not be added
if (isPlayerInventory)
{
OnPlayerInventoryChanged?.Invoke();
}
return remainingCount; return remainingCount;
} }
@@ -99,7 +96,7 @@ public class Inventory : MonoBehaviour
// look for an existing stack of the item in the inventory // look for an existing stack of the item in the inventory
for (int i = 0; i < items.Length; i++) for (int i = 0; i < items.Length; i++)
{ {
InventoryItem invItem = items[i]; InventoryItem<TItem> invItem = items[i];
if (invItem != null && invItem.item == item) if (invItem != null && invItem.item == item)
{ {
// remove as many items as possible from the stack // remove as many items as possible from the stack
@@ -116,32 +113,22 @@ public class Inventory : MonoBehaviour
// exit the loop if all items have been removed // exit the loop if all items have been removed
if (remainingCount == 0) if (remainingCount == 0)
{ {
if (isPlayerInventory)
{
OnPlayerInventoryChanged?.Invoke();
}
return 0; return 0;
} }
} }
} }
// return the quantity of items which could not be removed // return the quantity of items which could not be removed
if (isPlayerInventory)
{
OnPlayerInventoryChanged?.Invoke();
}
return remainingCount; return remainingCount;
} }
public void SwapItems(int index1, int index2) public void SwapItems(int index1, int index2)
{ {
InventoryItem temp = items[index1]; InventoryItem<TItem> temp = items[index1];
items[index1] = items[index2]; items[index1] = items[index2];
items[index2] = temp; items[index2] = temp;
if (isPlayerInventory)
{
OnPlayerInventoryChanged?.Invoke();
}
} }
} }

View File

@@ -5,12 +5,12 @@ using System.Collections.Generic;
// represents an item in the inventory and its count // represents an item in the inventory and its count
[System.Serializable] [System.Serializable]
public class InventoryItem public class InventoryItem<TItem> where TItem : Item
{ {
public Item item; public TItem item;
public int count; public int count;
public InventoryItem(Item item, int count) public InventoryItem(TItem item, int count)
{ {
this.item = item; this.item = item;
this.count = count; this.count = count;

View File

@@ -1,32 +0,0 @@
using UnityEngine;
[CreateAssetMenu(fileName = "Hoe", menuName = "Harvestdale/Tools/Hoe", order = 0)]
public class Hoe : Tool
{
GameObject player;
private void Start()
{
player = GameObject.FindGameObjectWithTag("Player");
}
private Vector3 GetVector3IntInMouseDirection()
{
Vector3 direction = (player.transform.position - GridBuildingSystem.Instance.GetSnappedMousePosition()).normalized;
Debug.Log(direction);
return direction;
}
public override void OnUse()
{
Debug.Log("Hoe on use");
GetVector3IntInMouseDirection();
}
public override void Use()
{
Debug.Log("Hoe use");
OnUse();
}
}

View File

@@ -1,14 +0,0 @@
using UnityEngine;
public abstract class Tool : Item
{
public abstract void Use();
public abstract void OnUse();
private void Awake()
{
stackable = false;
maxStackSize = 1;
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 943c595a7de78d44eae1ff08651910a2
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -6,100 +6,14 @@ using System;
public class PlayerController : MonoBehaviour public class PlayerController : MonoBehaviour
{ {
public static Action OnActiveSlotChanged;
public Item testItem1;
public Item testItem2;
public float interactionDistance = 2.5f;
public int hotbarSlotCount = 9;
public int activeHotbarSlot = 0;
[SerializeField] private Inventory playerInventory;
// Start is called before the first frame update // Start is called before the first frame update
void Start() void Start()
{ {
playerInventory = GetComponent<Inventory>();
GuiManager.Instance.OpenPanel("Hotbar");
} }
// Update is called once per frame // Update is called once per frame
void Update() void Update()
{ {
float scroll = Input.GetAxis("Mouse ScrollWheel");
if (scroll != 0)
{
activeHotbarSlot += (int)Mathf.Sign(scroll);
if (activeHotbarSlot < 0)
{
activeHotbarSlot = hotbarSlotCount - 1;
}
else if (activeHotbarSlot >= hotbarSlotCount)
{
activeHotbarSlot = 0;
}
OnActiveSlotChanged?.Invoke();
}
if (Input.GetKeyDown(KeyCode.Tab))
{
GuiManager.Instance.TogglePanel("Inventory");
}
if (Input.GetMouseButtonDown(0))
{
Vector3Int snappedMousePosition = GridBuildingSystem.Instance.GetSnappedMousePosition();
Vector3Int snappedPlayerPosition = GridBuildingSystem.Instance.GetSnappedPosition(gameObject.transform.position);
if (Vector3Int.Distance(snappedMousePosition, snappedPlayerPosition) <= interactionDistance)
{
if (playerInventory.items[activeHotbarSlot]?.item is Tool)
{
Tool tool = playerInventory.items[activeHotbarSlot].item as Tool;
tool.Use();
}
}
else
{
Debug.Log("Not in range");
}
}
//! DEBUG
if (Input.GetKeyDown(KeyCode.U))
{
// add 5 apples
int remainingCount = playerInventory.Add(testItem1, 5);
Debug.Log("Added " + (5 - remainingCount) + " apples to playerInventory.");
}
if (Input.GetKeyDown(KeyCode.I))
{ // add 15 more apples
int remainingCount = playerInventory.Add(testItem1, 15);
Debug.Log("Added " + (15 - remainingCount) + " apples to playerInventory.");
}
if (Input.GetKeyDown(KeyCode.O))
{
// add 10 bananas
int remainingCount = playerInventory.Add(testItem2, 10);
Debug.Log("Added " + (10 - remainingCount) + " bananas to playerInventory.");
}
if (Input.GetKeyDown(KeyCode.J))
{
int count = 3;
int applesRemaining = playerInventory.Remove(testItem1, count);
Debug.Log("Removed " + (count - applesRemaining) + " apples.");
}
if (Input.GetKeyDown(KeyCode.K))
{
int count = 5;
int bananasRemaining = playerInventory.Remove(testItem2, count);
Debug.Log("Removed " + (count - bananasRemaining) + " bananas.");
}
} }

View File

@@ -1,25 +1,33 @@
using UnityEngine; using UnityEngine;
using System; using System;
using System.Collections;
using System.Collections.Generic;
public class TimeManager : MonoBehaviour public class TimeManager : MonoBehaviour
{ {
public static Action OnMinuteChanged; public static Action OnMinuteChanged;
public static Action OnHourChanged; public static Action OnHourChanged;
public static Action OnDayChanged; public static Action OnDayChanged;
public static Action OnMonthChanged;
public static Action OnYearChanged;
public static int Minute { get; private set; } public static int Minute { get; private set; }
public static int Hour { get; private set; } public static int Hour { get; private set; }
public static int Day { get; private set; } public static int Day { get; private set; }
public static int Month { get; private set; }
public static int Year { get; private set; }
public float minuteToRealTime = .2f; [SerializeField]
[Range(.05f, 10f)]
private float minuteToRealTime = .05f;
private float timer; private float timer;
private void Start() private void Start()
{ {
Minute = 0; Minute = 0;
Hour = 10; Hour = 10;
Day = 1; Day = 25;
Month = 4;
Year = 1;
timer = minuteToRealTime; timer = minuteToRealTime;
} }
@@ -29,17 +37,34 @@ public class TimeManager : MonoBehaviour
if (timer <= 0) if (timer <= 0)
{ {
// Increase minute
Minute++; Minute++;
OnMinuteChanged?.Invoke(); OnMinuteChanged?.Invoke();
if (Minute >= 60) if (Minute >= 60)
{ {
// Increase hour
Hour++; Hour++;
Minute = 0; Minute = 0;
if (Hour >= 24) if (Hour >= 24)
{ {
// Increase day
Day++; Day++;
Hour = 0; Hour = 0;
OnDayChanged?.Invoke(); OnDayChanged?.Invoke();
if (Day > 28)
{
// Increase month
Month++;
Day = 1;
OnMonthChanged?.Invoke();
if (Month > 4)
{
// Increase year
Year++;
Month = 1;
OnYearChanged?.Invoke();
}
}
} }
OnHourChanged?.Invoke(); OnHourChanged?.Invoke();

View File

@@ -1,33 +1,33 @@
using UnityEngine; // using UnityEngine;
using UnityEngine.EventSystems; // using UnityEngine.EventSystems;
using UnityEngine.UI; // using UnityEngine.UI;
public class DraggableSlotContentUI : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler // public class DraggableSlotContentUI : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{ // {
public int slotIndex; // slotIndex is set by SlotUI // public int slotIndex; // slotIndex is set by SlotUI
[HideInInspector] public Transform parentAfterDrag; // [HideInInspector] public Transform parentAfterDrag;
public Image image; // public Image image;
public void OnBeginDrag(PointerEventData eventData) // public void OnBeginDrag(PointerEventData eventData)
{ // {
parentAfterDrag = transform.parent; // parentAfterDrag = transform.parent;
slotIndex = parentAfterDrag.GetComponent<SlotUI>().slotIndex; // Set slotIndex again to be safe, but should be already set // slotIndex = parentAfterDrag.GetComponent<SlotUI>().slotIndex; // Set slotIndex again to be safe, but should be already set
transform.SetParent(transform.root); // transform.SetParent(transform.root);
transform.SetAsLastSibling(); // transform.SetAsLastSibling();
image.raycastTarget = false; // image.raycastTarget = false;
} // }
public void OnDrag(PointerEventData eventData) // public void OnDrag(PointerEventData eventData)
{ // {
Debug.Log("Dragging"); // Debug.Log("Dragging");
transform.position = Input.mousePosition; // transform.position = Input.mousePosition;
} // }
public void OnEndDrag(PointerEventData eventData) // public void OnEndDrag(PointerEventData eventData)
{ // {
transform.SetParent(parentAfterDrag); // transform.SetParent(parentAfterDrag);
image.raycastTarget = true; // image.raycastTarget = true;
// invoke // // invoke
Inventory.OnPlayerInventoryChanged?.Invoke(); // Inventory.OnPlayerInventoryChanged?.Invoke();
} // }
} // }

View File

@@ -1,56 +1,56 @@
using System.Collections; // using System.Collections;
using UnityEngine.UI; // using UnityEngine.UI;
using System.Collections.Generic; // using System.Collections.Generic;
using UnityEngine; // using UnityEngine;
using TMPro; // using TMPro;
public class HotbarSlotUI : MonoBehaviour // public class HotbarSlotUI : MonoBehaviour
{ // {
public int slotIndex; // public int slotIndex;
private PlayerController playerController; // private PlayerController playerController;
private InventoryItem invItem; // private InventoryItem invItem;
[SerializeField] private Image border; // [SerializeField] private Image border;
[SerializeField] private Image image; // [SerializeField] private Image image;
[SerializeField] private TextMeshProUGUI quantityText; // [SerializeField] private TextMeshProUGUI quantityText;
private void Start() // private void Start()
{ // {
playerController = GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerController>(); // playerController = GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerController>();
PlayerController.OnActiveSlotChanged += CheckSelectedSlot; // PlayerController.OnActiveSlotChanged += CheckSelectedSlot;
CheckSelectedSlot(); // CheckSelectedSlot();
} // }
private void CheckSelectedSlot() // private void CheckSelectedSlot()
{ // {
if (playerController.activeHotbarSlot == slotIndex) // if (playerController.activeHotbarSlot == slotIndex)
{ // {
border.gameObject.SetActive(true); // border.gameObject.SetActive(true);
} // }
else // else
{ // {
border.gameObject.SetActive(false); // border.gameObject.SetActive(false);
} // }
} // }
public void SetInventoryItem(InventoryItem newInvItem) // public void SetInventoryItem(InventoryItem newInvItem)
{ // {
invItem = newInvItem; // invItem = newInvItem;
UpdateSlot(); // UpdateSlot();
} // }
private void UpdateSlot() // private void UpdateSlot()
{ // {
image.sprite = invItem?.item?.sprite ?? null; // image.sprite = invItem?.item?.sprite ?? null;
quantityText.SetText(invItem?.count.ToString() ?? ""); // quantityText.SetText(invItem?.count.ToString() ?? "");
if (image.sprite == null) // if (image.sprite == null)
{ // {
image.color = new Color(0, 0, 0, 0); // image.color = new Color(0, 0, 0, 0);
} // }
else // else
{ // {
image.color = Color.white; // image.color = Color.white;
} // }
} // }
} // }

View File

@@ -1,52 +1,52 @@
using System.Collections; // using System.Collections;
using System.Collections.Generic; // using System.Collections.Generic;
using UnityEngine; // using UnityEngine;
using UnityEngine.UI; // using UnityEngine.UI;
public class HotbarUI : GuiPanel // public class HotbarUI : GuiPanel
{ // {
[SerializeField] private GameObject hotbarSlotPrefab; // [SerializeField] private GameObject hotbarSlotPrefab;
private List<HotbarSlotUI> slots = new List<HotbarSlotUI>(); // private List<HotbarSlotUI> slots = new List<HotbarSlotUI>();
private Inventory playerInventory; // private Inventory playerInventory;
private PlayerController playerController; // private PlayerController playerController;
private int hotbarSlotCount = 9; // private int hotbarSlotCount = 9;
private void Start() // private void Start()
{ // {
Inventory.OnPlayerInventoryChanged += UpdateSlots; // Inventory.OnPlayerInventoryChanged += UpdateSlots;
} // }
public override void OnOpen() // public override void OnOpen()
{ // {
if (slots.Count == 0) // if (slots.Count == 0)
{ // {
playerInventory = GameObject.FindGameObjectWithTag("Player").GetComponent<Inventory>(); // playerInventory = GameObject.FindGameObjectWithTag("Player").GetComponent<Inventory>();
playerController = GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerController>(); // playerController = GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerController>();
hotbarSlotCount = playerController.hotbarSlotCount; // hotbarSlotCount = playerController.hotbarSlotCount;
CreateSlots(); // CreateSlots();
} // }
UpdateSlots(); // UpdateSlots();
} // }
public override void OnClose() // public override void OnClose()
{ // {
} // }
private void CreateSlots() // private void CreateSlots()
{ // {
for (int i = 0; i < hotbarSlotCount; i++) // for (int i = 0; i < hotbarSlotCount; i++)
{ // {
HotbarSlotUI newSlot = Instantiate(hotbarSlotPrefab, Vector3.zero, Quaternion.identity, transform).GetComponent<HotbarSlotUI>(); // HotbarSlotUI newSlot = Instantiate(hotbarSlotPrefab, Vector3.zero, Quaternion.identity, transform).GetComponent<HotbarSlotUI>();
newSlot.slotIndex = i; // newSlot.slotIndex = i;
slots.Add(newSlot); // slots.Add(newSlot);
} // }
} // }
private void UpdateSlots() // private void UpdateSlots()
{ // {
for (int i = 0; i < slots.Count; i++) // for (int i = 0; i < slots.Count; i++)
{ // {
slots[i].SetInventoryItem(playerInventory.items[i] ?? null); // slots[i].SetInventoryItem(playerInventory.items[i] ?? null);
} // }
} // }
} // }

View File

@@ -1,53 +1,53 @@
using System.Collections; // using System.Collections;
using System.Collections.Generic; // using System.Collections.Generic;
using UnityEngine; // using UnityEngine;
public class InventoryUI : GuiPanel // public class InventoryUI : GuiPanel
{ // {
[SerializeField] private GameObject slotPrefab; // [SerializeField] private GameObject slotPrefab;
[SerializeField] private GameObject slotListObj; // [SerializeField] private GameObject slotListObj;
[SerializeField] private List<SlotUI> slotUIList; // [SerializeField] private List<SlotUI> slotUIList;
private Inventory playerInventory; // private Inventory playerInventory;
private void Start() // private void Start()
{ // {
Inventory.OnPlayerInventoryChanged += UpdateSlots; // Inventory.OnPlayerInventoryChanged += UpdateSlots;
} // }
public override void OnOpen() // public override void OnOpen()
{ // {
if (slotUIList.Count == 0) // if (slotUIList.Count == 0)
{ // {
playerInventory = GameObject.FindGameObjectWithTag("Player").GetComponent<Inventory>(); // playerInventory = GameObject.FindGameObjectWithTag("Player").GetComponent<Inventory>();
CreateSlots(); // CreateSlots();
} // }
UpdateSlots(); // UpdateSlots();
GuiManager.Instance.ClosePanel("Hotbar"); // GuiManager.Instance.ClosePanel("Hotbar");
} // }
public override void OnClose() // public override void OnClose()
{ // {
GuiManager.Instance.OpenPanel("Hotbar"); // GuiManager.Instance.OpenPanel("Hotbar");
} // }
private void CreateSlots() // private void CreateSlots()
{ // {
playerInventory = GameObject.FindGameObjectWithTag("Player").GetComponent<Inventory>(); // playerInventory = GameObject.FindGameObjectWithTag("Player").GetComponent<Inventory>();
for (int i = 0; i < playerInventory.maxSlots; i++) // for (int i = 0; i < playerInventory.maxSlots; i++)
{ // {
SlotUI newSlot = Instantiate(slotPrefab, Vector3.zero, Quaternion.identity, slotListObj.transform).GetComponent<SlotUI>(); // SlotUI newSlot = Instantiate(slotPrefab, Vector3.zero, Quaternion.identity, slotListObj.transform).GetComponent<SlotUI>();
newSlot.slotIndex = i; // newSlot.slotIndex = i;
slotUIList.Add(newSlot); // slotUIList.Add(newSlot);
} // }
} // }
private void UpdateSlots() // private void UpdateSlots()
{ // {
int i = 0; // int i = 0;
foreach (SlotUI slotUi in slotUIList) // foreach (SlotUI slotUi in slotUIList)
{ // {
slotUi.SetInventoryItem(playerInventory.items[i]); // slotUi.SetInventoryItem(playerInventory.items[i]);
i++; // i++;
} // }
} // }
} // }

View File

@@ -1,60 +1,60 @@
using System.Collections; // using System.Collections;
using System.Collections.Generic; // using System.Collections.Generic;
using UnityEngine; // using UnityEngine;
using UnityEngine.UI; // using UnityEngine.UI;
using UnityEngine.EventSystems; // using UnityEngine.EventSystems;
public class SlotUI : MonoBehaviour, IDropHandler // public class SlotUI : MonoBehaviour, IDropHandler
{ // {
public int slotIndex; // public int slotIndex;
[SerializeField] private GameObject contentObject; // [SerializeField] private GameObject contentObject;
[SerializeField] private InventoryItem inventoryItem; // [SerializeField] private InventoryItem inventoryItem;
[SerializeField] private Image itemSpriteImage; // [SerializeField] private Image itemSpriteImage;
[SerializeField] private TMPro.TextMeshProUGUI quantityText; // [SerializeField] private TMPro.TextMeshProUGUI quantityText;
private Inventory playerInventory; // private Inventory playerInventory;
private void Start() // private void Start()
{ // {
UpdateSlot(); // UpdateSlot();
playerInventory = GameObject.FindGameObjectWithTag("Player").GetComponent<Inventory>(); // playerInventory = GameObject.FindGameObjectWithTag("Player").GetComponent<Inventory>();
} // }
public void SetInventoryItem(InventoryItem newInventoryItem) // public void SetInventoryItem(InventoryItem newInventoryItem)
{ // {
inventoryItem = newInventoryItem; // inventoryItem = newInventoryItem;
UpdateSlot(); // UpdateSlot();
} // }
private void UpdateSlot() // private void UpdateSlot()
{ // {
if (inventoryItem != null) // if (inventoryItem != null)
{ // {
itemSpriteImage.sprite = inventoryItem?.item?.sprite ?? null; // itemSpriteImage.sprite = inventoryItem?.item?.sprite ?? null;
if (itemSpriteImage.sprite == null) // if (itemSpriteImage.sprite == null)
{ // {
itemSpriteImage.color = new Color(0, 0, 0, 0); // itemSpriteImage.color = new Color(0, 0, 0, 0);
} // }
else // else
{ // {
itemSpriteImage.color = new Color(255, 255, 255, 1); // itemSpriteImage.color = new Color(255, 255, 255, 1);
} // }
quantityText.SetText(inventoryItem.count != 0 ? inventoryItem.count.ToString() : ""); // quantityText.SetText(inventoryItem.count != 0 ? inventoryItem.count.ToString() : "");
} // }
else // else
{ // {
itemSpriteImage.sprite = null; // itemSpriteImage.sprite = null;
quantityText.SetText(""); // quantityText.SetText("");
itemSpriteImage.color = new Color(0, 0, 0, 0); // itemSpriteImage.color = new Color(0, 0, 0, 0);
} // }
} // }
public void OnDrop(PointerEventData eventData) // public void OnDrop(PointerEventData eventData)
{ // {
Debug.Log("DROP"); // Debug.Log("DROP");
DraggableSlotContentUI dropped = eventData.pointerDrag.GetComponent<DraggableSlotContentUI>(); // DraggableSlotContentUI dropped = eventData.pointerDrag.GetComponent<DraggableSlotContentUI>();
playerInventory.SwapItems(dropped.slotIndex, slotIndex); // playerInventory.SwapItems(dropped.slotIndex, slotIndex);
} // }
} // }