Added item registry

This commit is contained in:
2026-04-18 12:52:28 +01:00
parent 1908024332
commit cd7f16f021
29 changed files with 187 additions and 53 deletions

View File

@@ -50,11 +50,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: ed414fdac7005b54db4dc1ec26e16bd6, type: 3} m_Script: {fileID: 11500000, guid: ed414fdac7005b54db4dc1ec26e16bd6, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: Fruitomation::Fruitomation.Game.FruitBehaviour m_EditorClassIdentifier: Fruitomation::Fruitomation.Game.FruitBehaviour
RectTransform: {fileID: 1401800242719993207} OverridenItemType: 2
Body2D: {fileID: 8517387188847136902}
AttachedCanvas: {fileID: 0}
Spawner: {fileID: 0}
EnteredCanvas: 0
--- !u!50 &8517387188847136902 --- !u!50 &8517387188847136902
Rigidbody2D: Rigidbody2D:
serializedVersion: 5 serializedVersion: 5

View File

@@ -50,11 +50,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: ed414fdac7005b54db4dc1ec26e16bd6, type: 3} m_Script: {fileID: 11500000, guid: ed414fdac7005b54db4dc1ec26e16bd6, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: Fruitomation::Fruitomation.Game.FruitBehaviour m_EditorClassIdentifier: Fruitomation::Fruitomation.Game.FruitBehaviour
RectTransform: {fileID: 1401800242719993207} OverridenItemType: 7
Body2D: {fileID: 8517387188847136902}
AttachedCanvas: {fileID: 0}
Spawner: {fileID: 0}
EnteredCanvas: 0
--- !u!50 &8517387188847136902 --- !u!50 &8517387188847136902
Rigidbody2D: Rigidbody2D:
serializedVersion: 5 serializedVersion: 5

View File

@@ -50,11 +50,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: ed414fdac7005b54db4dc1ec26e16bd6, type: 3} m_Script: {fileID: 11500000, guid: ed414fdac7005b54db4dc1ec26e16bd6, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: Fruitomation::Fruitomation.Game.FruitBehaviour m_EditorClassIdentifier: Fruitomation::Fruitomation.Game.FruitBehaviour
RectTransform: {fileID: 1401800242719993207} OverridenItemType: 6
Body2D: {fileID: 8517387188847136902}
AttachedCanvas: {fileID: 0}
Spawner: {fileID: 0}
EnteredCanvas: 0
--- !u!50 &8517387188847136902 --- !u!50 &8517387188847136902
Rigidbody2D: Rigidbody2D:
serializedVersion: 5 serializedVersion: 5

View File

@@ -162,11 +162,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: ed414fdac7005b54db4dc1ec26e16bd6, type: 3} m_Script: {fileID: 11500000, guid: ed414fdac7005b54db4dc1ec26e16bd6, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: Fruitomation::Fruitomation.Game.FruitBehaviour m_EditorClassIdentifier: Fruitomation::Fruitomation.Game.FruitBehaviour
RectTransform: {fileID: 632342871567537671} OverridenItemType: 1
Body2D: {fileID: -7341975215906076796}
AttachedCanvas: {fileID: 0}
Spawner: {fileID: 0}
EnteredCanvas: 0
--- !u!50 &-7341975215906076796 --- !u!50 &-7341975215906076796
Rigidbody2D: Rigidbody2D:
serializedVersion: 5 serializedVersion: 5

View File

@@ -0,0 +1,15 @@
%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: 92f10d0327354ede9d9b3cf77e1c2d30, type: 3}
m_Name: Items
m_EditorClassIdentifier: Fruitomation::Fruitomation.Game.Items.SerializedItemInfoRegistry
Registry: []

View File

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

View File

@@ -50,11 +50,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: ed414fdac7005b54db4dc1ec26e16bd6, type: 3} m_Script: {fileID: 11500000, guid: ed414fdac7005b54db4dc1ec26e16bd6, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: Fruitomation::Fruitomation.Game.FruitBehaviour m_EditorClassIdentifier: Fruitomation::Fruitomation.Game.FruitBehaviour
RectTransform: {fileID: 1401800242719993207} OverridenItemType: 3
Body2D: {fileID: 8517387188847136902}
AttachedCanvas: {fileID: 0}
Spawner: {fileID: 0}
EnteredCanvas: 0
--- !u!50 &8517387188847136902 --- !u!50 &8517387188847136902
Rigidbody2D: Rigidbody2D:
serializedVersion: 5 serializedVersion: 5

View File

@@ -50,11 +50,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: ed414fdac7005b54db4dc1ec26e16bd6, type: 3} m_Script: {fileID: 11500000, guid: ed414fdac7005b54db4dc1ec26e16bd6, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: Fruitomation::Fruitomation.Game.FruitBehaviour m_EditorClassIdentifier: Fruitomation::Fruitomation.Game.FruitBehaviour
RectTransform: {fileID: 1401800242719993207} OverridenItemType: 4
Body2D: {fileID: 8517387188847136902}
AttachedCanvas: {fileID: 0}
Spawner: {fileID: 0}
EnteredCanvas: 0
--- !u!50 &8517387188847136902 --- !u!50 &8517387188847136902
Rigidbody2D: Rigidbody2D:
serializedVersion: 5 serializedVersion: 5

View File

@@ -50,11 +50,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: ed414fdac7005b54db4dc1ec26e16bd6, type: 3} m_Script: {fileID: 11500000, guid: ed414fdac7005b54db4dc1ec26e16bd6, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: Fruitomation::Fruitomation.Game.FruitBehaviour m_EditorClassIdentifier: Fruitomation::Fruitomation.Game.FruitBehaviour
RectTransform: {fileID: 1401800242719993207} OverridenItemType: 5
Body2D: {fileID: 8517387188847136902}
AttachedCanvas: {fileID: 0}
Spawner: {fileID: 0}
EnteredCanvas: 0
--- !u!50 &8517387188847136902 --- !u!50 &8517387188847136902
Rigidbody2D: Rigidbody2D:
serializedVersion: 5 serializedVersion: 5

View File

@@ -2148,6 +2148,51 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1511006084} m_GameObject: {fileID: 1511006084}
m_CullTransparentMesh: 1 m_CullTransparentMesh: 1
--- !u!1 &1618062727
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1618062728}
- component: {fileID: 1618062729}
m_Layer: 0
m_Name: ItemRegistry
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1618062728
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1618062727}
serializedVersion: 2
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: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1618062729
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1618062727}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: dcb8b502e5b94a72b37a6e77e4770d05, type: 3}
m_Name:
m_EditorClassIdentifier: Fruitomation::Fruitomation.Game.Items.ItemInfoRegistry
SerializedRegistry: {fileID: 11400000, guid: b518751a8b5ee0942af68ec87eeba0c5, type: 2}
--- !u!1 &1935863237 --- !u!1 &1935863237
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -2836,3 +2881,4 @@ SceneRoots:
- {fileID: 1165634414} - {fileID: 1165634414}
- {fileID: 525386540} - {fileID: 525386540}
- {fileID: 1935863238} - {fileID: 1935863238}
- {fileID: 1618062728}

View File

@@ -4,9 +4,12 @@ namespace Fruitomation.Game.Items
{ {
public class FruitBehaviour : ItemBehaviour public class FruitBehaviour : ItemBehaviour
{ {
[SerializeField] private ItemType OverridenItemType;
protected override void OnInitialized() protected override void OnInitialized()
{ {
Body2D.linearVelocity = Random.insideUnitCircle * 2.5f; Body2D.linearVelocity = Random.insideUnitCircle * 2.5f;
CurrentType = OverridenItemType;
} }
} }
} }

View File

@@ -1,21 +1,8 @@
using System;
using Fruitomation.Global; using Fruitomation.Global;
using UnityEngine; using UnityEngine;
namespace Fruitomation.Game.Items namespace Fruitomation.Game.Items
{ {
public enum ItemType
{
Apple,
Grape,
Banana,
Kiwi,
Mango,
Pitaya,
Durian,
BuddhasHand
}
public class ItemBehaviour : MonoBehaviour public class ItemBehaviour : MonoBehaviour
{ {
protected RectTransform RectTransform { get; private set; } protected RectTransform RectTransform { get; private set; }
@@ -99,6 +86,13 @@ namespace Fruitomation.Game.Items
public void TriggerDestruction(bool harvest = true) public void TriggerDestruction(bool harvest = true)
{ {
if (harvest)
{
ItemInfo info = ItemInfoRegistry.Get(CurrentType);
float money = Random.Range(info.MinMoney, info.MaxMoney);
MoneyController.Add(money);
}
Destroy(gameObject); Destroy(gameObject);
} }
} }

View File

@@ -0,0 +1,62 @@
using PashaBibko.Pacore.Attributes;
using System.Collections.Generic;
using UnityEngine;
using System;
namespace Fruitomation.Game.Items
{
public class ItemInfoRegistry : MonoBehaviour
{
[Header("References")]
[SerializeField] private SerializedItemInfoRegistry SerializedRegistry;
private Dictionary<ItemType, ItemInfo> Dictionary;
private static ItemInfoRegistry Instance;
private void Awake()
{
/* Sets as the global instance */
if (Instance is not null)
{
Debug.LogError("Multiple instances of ItemInfoRegistry found");
return;
}
LoadFromRegistry();
Instance = this;
}
private void OnDestroy()
{
if (Instance == this)
{
Instance = null;
}
}
[InspectorCallable("Load Registry")] private void LoadFromRegistry()
{
Dictionary = new Dictionary<ItemType, ItemInfo>();
foreach (ItemInfo info in SerializedRegistry.Registry)
{
Dictionary.Add(info.Type, info);
}
#if UNITY_EDITOR
ItemType[] types = Enum.GetValues(typeof(ItemType)) as ItemType[];
Debug.Assert(types != null, nameof(types) + " != null");
foreach (ItemType type in types)
{
bool contained = Dictionary.ContainsKey(type);
if (!contained)
{
Debug.LogWarning($"Type [{type}] is not contained in the registry");
}
}
#endif // UNITY_EDITOR
}
public static ItemInfo Get(ItemType type) => Instance.Dictionary[type];
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: dcb8b502e5b94a72b37a6e77e4770d05
timeCreated: 1776511113

View File

@@ -0,0 +1,29 @@
using UnityEngine;
using System;
namespace Fruitomation.Game.Items
{
[Serializable] public enum ItemType
{
Apple,
Grape,
Banana,
Kiwi,
Mango,
Pitaya,
Durian,
BuddhasHand
}
[Serializable] public class ItemInfo
{
public ItemType Type;
public float MinMoney;
public float MaxMoney;
}
[CreateAssetMenu] public class SerializedItemInfoRegistry : ScriptableObject
{
[SerializeField] public ItemInfo[] Registry;
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 92f10d0327354ede9d9b3cf77e1c2d30
timeCreated: 1776512220

View File

@@ -70,7 +70,6 @@ namespace Fruitomation.Game
UnlockedUpgrades upgrades = new(); UnlockedUpgrades upgrades = new();
foreach (BasicUpgrade upgrade in BasicUpgrades) foreach (BasicUpgrade upgrade in BasicUpgrades)
{ {
Debug.Log($"Restored [{upgrade}] upgrade");
upgrades.Unlocks.Add(upgrade); upgrades.Unlocks.Add(upgrade);
} }

View File

@@ -7,15 +7,15 @@ namespace Fruitomation.Global
{ {
private static MoneyController Instance; private static MoneyController Instance;
[SerializeField, InspectorReadOnly("Game State")] private ulong InternalCurrentMoney; [SerializeField, InspectorReadOnly("Game State")] private double InternalCurrentMoney;
public static ulong Current public static double Current
{ {
get => Instance.InternalCurrentMoney; get => Instance.InternalCurrentMoney;
set => Instance.InternalCurrentMoney = value; set => Instance.InternalCurrentMoney = value;
} }
public static void Add(ulong amount) => Instance.InternalCurrentMoney += amount; public static void Add(double amount) => Instance.InternalCurrentMoney += amount;
private void Awake() private void Awake()
{ {

View File

@@ -46,7 +46,7 @@ namespace Fruitomation.UI
private void Update() private void Update()
{ {
MoneyText.text = $"Current Money: ${MoneyController.Current}"; MoneyText.text = $"Current Money: ${MoneyController.Current:F1}";
} }
} }
} }