Added item registry
This commit is contained in:
@@ -50,11 +50,7 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: ed414fdac7005b54db4dc1ec26e16bd6, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Fruitomation::Fruitomation.Game.FruitBehaviour
|
||||
RectTransform: {fileID: 1401800242719993207}
|
||||
Body2D: {fileID: 8517387188847136902}
|
||||
AttachedCanvas: {fileID: 0}
|
||||
Spawner: {fileID: 0}
|
||||
EnteredCanvas: 0
|
||||
OverridenItemType: 2
|
||||
--- !u!50 &8517387188847136902
|
||||
Rigidbody2D:
|
||||
serializedVersion: 5
|
||||
@@ -50,11 +50,7 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: ed414fdac7005b54db4dc1ec26e16bd6, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Fruitomation::Fruitomation.Game.FruitBehaviour
|
||||
RectTransform: {fileID: 1401800242719993207}
|
||||
Body2D: {fileID: 8517387188847136902}
|
||||
AttachedCanvas: {fileID: 0}
|
||||
Spawner: {fileID: 0}
|
||||
EnteredCanvas: 0
|
||||
OverridenItemType: 7
|
||||
--- !u!50 &8517387188847136902
|
||||
Rigidbody2D:
|
||||
serializedVersion: 5
|
||||
@@ -50,11 +50,7 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: ed414fdac7005b54db4dc1ec26e16bd6, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Fruitomation::Fruitomation.Game.FruitBehaviour
|
||||
RectTransform: {fileID: 1401800242719993207}
|
||||
Body2D: {fileID: 8517387188847136902}
|
||||
AttachedCanvas: {fileID: 0}
|
||||
Spawner: {fileID: 0}
|
||||
EnteredCanvas: 0
|
||||
OverridenItemType: 6
|
||||
--- !u!50 &8517387188847136902
|
||||
Rigidbody2D:
|
||||
serializedVersion: 5
|
||||
@@ -162,11 +162,7 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: ed414fdac7005b54db4dc1ec26e16bd6, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Fruitomation::Fruitomation.Game.FruitBehaviour
|
||||
RectTransform: {fileID: 632342871567537671}
|
||||
Body2D: {fileID: -7341975215906076796}
|
||||
AttachedCanvas: {fileID: 0}
|
||||
Spawner: {fileID: 0}
|
||||
EnteredCanvas: 0
|
||||
OverridenItemType: 1
|
||||
--- !u!50 &-7341975215906076796
|
||||
Rigidbody2D:
|
||||
serializedVersion: 5
|
||||
15
Assets/Prefabs/Items/Items.asset
Normal file
15
Assets/Prefabs/Items/Items.asset
Normal 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: []
|
||||
8
Assets/Prefabs/Items/Items.asset.meta
Normal file
8
Assets/Prefabs/Items/Items.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b518751a8b5ee0942af68ec87eeba0c5
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -50,11 +50,7 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: ed414fdac7005b54db4dc1ec26e16bd6, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Fruitomation::Fruitomation.Game.FruitBehaviour
|
||||
RectTransform: {fileID: 1401800242719993207}
|
||||
Body2D: {fileID: 8517387188847136902}
|
||||
AttachedCanvas: {fileID: 0}
|
||||
Spawner: {fileID: 0}
|
||||
EnteredCanvas: 0
|
||||
OverridenItemType: 3
|
||||
--- !u!50 &8517387188847136902
|
||||
Rigidbody2D:
|
||||
serializedVersion: 5
|
||||
@@ -50,11 +50,7 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: ed414fdac7005b54db4dc1ec26e16bd6, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Fruitomation::Fruitomation.Game.FruitBehaviour
|
||||
RectTransform: {fileID: 1401800242719993207}
|
||||
Body2D: {fileID: 8517387188847136902}
|
||||
AttachedCanvas: {fileID: 0}
|
||||
Spawner: {fileID: 0}
|
||||
EnteredCanvas: 0
|
||||
OverridenItemType: 4
|
||||
--- !u!50 &8517387188847136902
|
||||
Rigidbody2D:
|
||||
serializedVersion: 5
|
||||
@@ -50,11 +50,7 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: ed414fdac7005b54db4dc1ec26e16bd6, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Fruitomation::Fruitomation.Game.FruitBehaviour
|
||||
RectTransform: {fileID: 1401800242719993207}
|
||||
Body2D: {fileID: 8517387188847136902}
|
||||
AttachedCanvas: {fileID: 0}
|
||||
Spawner: {fileID: 0}
|
||||
EnteredCanvas: 0
|
||||
OverridenItemType: 5
|
||||
--- !u!50 &8517387188847136902
|
||||
Rigidbody2D:
|
||||
serializedVersion: 5
|
||||
@@ -2148,6 +2148,51 @@ CanvasRenderer:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1511006084}
|
||||
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
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -2836,3 +2881,4 @@ SceneRoots:
|
||||
- {fileID: 1165634414}
|
||||
- {fileID: 525386540}
|
||||
- {fileID: 1935863238}
|
||||
- {fileID: 1618062728}
|
||||
|
||||
@@ -4,9 +4,12 @@ namespace Fruitomation.Game.Items
|
||||
{
|
||||
public class FruitBehaviour : ItemBehaviour
|
||||
{
|
||||
[SerializeField] private ItemType OverridenItemType;
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
Body2D.linearVelocity = Random.insideUnitCircle * 2.5f;
|
||||
CurrentType = OverridenItemType;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,21 +1,8 @@
|
||||
using System;
|
||||
using Fruitomation.Global;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Fruitomation.Game.Items
|
||||
{
|
||||
public enum ItemType
|
||||
{
|
||||
Apple,
|
||||
Grape,
|
||||
Banana,
|
||||
Kiwi,
|
||||
Mango,
|
||||
Pitaya,
|
||||
Durian,
|
||||
BuddhasHand
|
||||
}
|
||||
|
||||
public class ItemBehaviour : MonoBehaviour
|
||||
{
|
||||
protected RectTransform RectTransform { get; private set; }
|
||||
@@ -99,6 +86,13 @@ namespace Fruitomation.Game.Items
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
62
Assets/Scripts/Game/Items/ItemInfoRegistry.cs
Normal file
62
Assets/Scripts/Game/Items/ItemInfoRegistry.cs
Normal 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];
|
||||
}
|
||||
}
|
||||
3
Assets/Scripts/Game/Items/ItemInfoRegistry.cs.meta
Normal file
3
Assets/Scripts/Game/Items/ItemInfoRegistry.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dcb8b502e5b94a72b37a6e77e4770d05
|
||||
timeCreated: 1776511113
|
||||
29
Assets/Scripts/Game/Items/SerializedItemInfoRegistry.cs
Normal file
29
Assets/Scripts/Game/Items/SerializedItemInfoRegistry.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 92f10d0327354ede9d9b3cf77e1c2d30
|
||||
timeCreated: 1776512220
|
||||
@@ -70,7 +70,6 @@ namespace Fruitomation.Game
|
||||
UnlockedUpgrades upgrades = new();
|
||||
foreach (BasicUpgrade upgrade in BasicUpgrades)
|
||||
{
|
||||
Debug.Log($"Restored [{upgrade}] upgrade");
|
||||
upgrades.Unlocks.Add(upgrade);
|
||||
}
|
||||
|
||||
|
||||
@@ -7,15 +7,15 @@ namespace Fruitomation.Global
|
||||
{
|
||||
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;
|
||||
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()
|
||||
{
|
||||
|
||||
@@ -46,7 +46,7 @@ namespace Fruitomation.UI
|
||||
|
||||
private void Update()
|
||||
{
|
||||
MoneyText.text = $"Current Money: ${MoneyController.Current}";
|
||||
MoneyText.text = $"Current Money: ${MoneyController.Current:F1}";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user