diff --git a/Assets/Prefabs/Fruit.meta b/Assets/Prefabs/Items.meta similarity index 100% rename from Assets/Prefabs/Fruit.meta rename to Assets/Prefabs/Items.meta diff --git a/Assets/Prefabs/Fruit/Apple.prefab b/Assets/Prefabs/Items/Apple.prefab similarity index 100% rename from Assets/Prefabs/Fruit/Apple.prefab rename to Assets/Prefabs/Items/Apple.prefab diff --git a/Assets/Prefabs/Fruit/Apple.prefab.meta b/Assets/Prefabs/Items/Apple.prefab.meta similarity index 100% rename from Assets/Prefabs/Fruit/Apple.prefab.meta rename to Assets/Prefabs/Items/Apple.prefab.meta diff --git a/Assets/Prefabs/Fruit/Banana.prefab b/Assets/Prefabs/Items/Banana.prefab similarity index 97% rename from Assets/Prefabs/Fruit/Banana.prefab rename to Assets/Prefabs/Items/Banana.prefab index acff063..3c506a0 100644 --- a/Assets/Prefabs/Fruit/Banana.prefab +++ b/Assets/Prefabs/Items/Banana.prefab @@ -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 diff --git a/Assets/Prefabs/Fruit/Banana.prefab.meta b/Assets/Prefabs/Items/Banana.prefab.meta similarity index 100% rename from Assets/Prefabs/Fruit/Banana.prefab.meta rename to Assets/Prefabs/Items/Banana.prefab.meta diff --git a/Assets/Prefabs/Fruit/BuddhasHand.prefab b/Assets/Prefabs/Items/BuddhasHand.prefab similarity index 97% rename from Assets/Prefabs/Fruit/BuddhasHand.prefab rename to Assets/Prefabs/Items/BuddhasHand.prefab index 6ecead7..2a8dfb5 100644 --- a/Assets/Prefabs/Fruit/BuddhasHand.prefab +++ b/Assets/Prefabs/Items/BuddhasHand.prefab @@ -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 diff --git a/Assets/Prefabs/Fruit/BuddhasHand.prefab.meta b/Assets/Prefabs/Items/BuddhasHand.prefab.meta similarity index 100% rename from Assets/Prefabs/Fruit/BuddhasHand.prefab.meta rename to Assets/Prefabs/Items/BuddhasHand.prefab.meta diff --git a/Assets/Prefabs/Fruit/Durian.prefab b/Assets/Prefabs/Items/Durian.prefab similarity index 97% rename from Assets/Prefabs/Fruit/Durian.prefab rename to Assets/Prefabs/Items/Durian.prefab index 126200c..91f19b6 100644 --- a/Assets/Prefabs/Fruit/Durian.prefab +++ b/Assets/Prefabs/Items/Durian.prefab @@ -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 diff --git a/Assets/Prefabs/Fruit/Durian.prefab.meta b/Assets/Prefabs/Items/Durian.prefab.meta similarity index 100% rename from Assets/Prefabs/Fruit/Durian.prefab.meta rename to Assets/Prefabs/Items/Durian.prefab.meta diff --git a/Assets/Prefabs/Fruit/Grape.prefab b/Assets/Prefabs/Items/Grape.prefab similarity index 97% rename from Assets/Prefabs/Fruit/Grape.prefab rename to Assets/Prefabs/Items/Grape.prefab index 2d01e5a..8f14f49 100644 --- a/Assets/Prefabs/Fruit/Grape.prefab +++ b/Assets/Prefabs/Items/Grape.prefab @@ -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 diff --git a/Assets/Prefabs/Fruit/Grape.prefab.meta b/Assets/Prefabs/Items/Grape.prefab.meta similarity index 100% rename from Assets/Prefabs/Fruit/Grape.prefab.meta rename to Assets/Prefabs/Items/Grape.prefab.meta diff --git a/Assets/Prefabs/Items/Items.asset b/Assets/Prefabs/Items/Items.asset new file mode 100644 index 0000000..ee31454 --- /dev/null +++ b/Assets/Prefabs/Items/Items.asset @@ -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: [] diff --git a/Assets/Prefabs/Items/Items.asset.meta b/Assets/Prefabs/Items/Items.asset.meta new file mode 100644 index 0000000..b262e53 --- /dev/null +++ b/Assets/Prefabs/Items/Items.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b518751a8b5ee0942af68ec87eeba0c5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Fruit/Kiwi.prefab b/Assets/Prefabs/Items/Kiwi.prefab similarity index 97% rename from Assets/Prefabs/Fruit/Kiwi.prefab rename to Assets/Prefabs/Items/Kiwi.prefab index b535ebe..7cafdfc 100644 --- a/Assets/Prefabs/Fruit/Kiwi.prefab +++ b/Assets/Prefabs/Items/Kiwi.prefab @@ -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 diff --git a/Assets/Prefabs/Fruit/Kiwi.prefab.meta b/Assets/Prefabs/Items/Kiwi.prefab.meta similarity index 100% rename from Assets/Prefabs/Fruit/Kiwi.prefab.meta rename to Assets/Prefabs/Items/Kiwi.prefab.meta diff --git a/Assets/Prefabs/Fruit/Mango.prefab b/Assets/Prefabs/Items/Mango.prefab similarity index 97% rename from Assets/Prefabs/Fruit/Mango.prefab rename to Assets/Prefabs/Items/Mango.prefab index 83db37c..c2c9ed3 100644 --- a/Assets/Prefabs/Fruit/Mango.prefab +++ b/Assets/Prefabs/Items/Mango.prefab @@ -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 diff --git a/Assets/Prefabs/Fruit/Mango.prefab.meta b/Assets/Prefabs/Items/Mango.prefab.meta similarity index 100% rename from Assets/Prefabs/Fruit/Mango.prefab.meta rename to Assets/Prefabs/Items/Mango.prefab.meta diff --git a/Assets/Prefabs/Fruit/Pitaya.prefab b/Assets/Prefabs/Items/Pitaya.prefab similarity index 97% rename from Assets/Prefabs/Fruit/Pitaya.prefab rename to Assets/Prefabs/Items/Pitaya.prefab index ee066c7..34a6a7a 100644 --- a/Assets/Prefabs/Fruit/Pitaya.prefab +++ b/Assets/Prefabs/Items/Pitaya.prefab @@ -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 diff --git a/Assets/Prefabs/Fruit/Pitaya.prefab.meta b/Assets/Prefabs/Items/Pitaya.prefab.meta similarity index 100% rename from Assets/Prefabs/Fruit/Pitaya.prefab.meta rename to Assets/Prefabs/Items/Pitaya.prefab.meta diff --git a/Assets/Scenes/GameScene.unity b/Assets/Scenes/GameScene.unity index 2dc27a8..b36fb97 100644 --- a/Assets/Scenes/GameScene.unity +++ b/Assets/Scenes/GameScene.unity @@ -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} diff --git a/Assets/Scripts/Game/Items/FruitBehaviour.cs b/Assets/Scripts/Game/Items/FruitBehaviour.cs index 59b591e..98f3c4b 100644 --- a/Assets/Scripts/Game/Items/FruitBehaviour.cs +++ b/Assets/Scripts/Game/Items/FruitBehaviour.cs @@ -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; } } } \ No newline at end of file diff --git a/Assets/Scripts/Game/Items/ItemBehaviour.cs b/Assets/Scripts/Game/Items/ItemBehaviour.cs index 425628c..5112437 100644 --- a/Assets/Scripts/Game/Items/ItemBehaviour.cs +++ b/Assets/Scripts/Game/Items/ItemBehaviour.cs @@ -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); } } diff --git a/Assets/Scripts/Game/Items/ItemInfoRegistry.cs b/Assets/Scripts/Game/Items/ItemInfoRegistry.cs new file mode 100644 index 0000000..c4a8381 --- /dev/null +++ b/Assets/Scripts/Game/Items/ItemInfoRegistry.cs @@ -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 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(); + 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]; + } +} \ No newline at end of file diff --git a/Assets/Scripts/Game/Items/ItemInfoRegistry.cs.meta b/Assets/Scripts/Game/Items/ItemInfoRegistry.cs.meta new file mode 100644 index 0000000..ff27157 --- /dev/null +++ b/Assets/Scripts/Game/Items/ItemInfoRegistry.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: dcb8b502e5b94a72b37a6e77e4770d05 +timeCreated: 1776511113 \ No newline at end of file diff --git a/Assets/Scripts/Game/Items/SerializedItemInfoRegistry.cs b/Assets/Scripts/Game/Items/SerializedItemInfoRegistry.cs new file mode 100644 index 0000000..90c4f89 --- /dev/null +++ b/Assets/Scripts/Game/Items/SerializedItemInfoRegistry.cs @@ -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; + } +} \ No newline at end of file diff --git a/Assets/Scripts/Game/Items/SerializedItemInfoRegistry.cs.meta b/Assets/Scripts/Game/Items/SerializedItemInfoRegistry.cs.meta new file mode 100644 index 0000000..2adf91b --- /dev/null +++ b/Assets/Scripts/Game/Items/SerializedItemInfoRegistry.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 92f10d0327354ede9d9b3cf77e1c2d30 +timeCreated: 1776512220 \ No newline at end of file diff --git a/Assets/Scripts/Game/UpgradeManager.cs b/Assets/Scripts/Game/UpgradeManager.cs index a8a46ad..682a640 100644 --- a/Assets/Scripts/Game/UpgradeManager.cs +++ b/Assets/Scripts/Game/UpgradeManager.cs @@ -70,7 +70,6 @@ namespace Fruitomation.Game UnlockedUpgrades upgrades = new(); foreach (BasicUpgrade upgrade in BasicUpgrades) { - Debug.Log($"Restored [{upgrade}] upgrade"); upgrades.Unlocks.Add(upgrade); } diff --git a/Assets/Scripts/Global/MoneyController.cs b/Assets/Scripts/Global/MoneyController.cs index f54d9ec..f77dd99 100644 --- a/Assets/Scripts/Global/MoneyController.cs +++ b/Assets/Scripts/Global/MoneyController.cs @@ -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() { diff --git a/Assets/Scripts/UI/FruitBowlController.cs b/Assets/Scripts/UI/FruitBowlController.cs index 8e02e2a..56e4a49 100644 --- a/Assets/Scripts/UI/FruitBowlController.cs +++ b/Assets/Scripts/UI/FruitBowlController.cs @@ -46,7 +46,7 @@ namespace Fruitomation.UI private void Update() { - MoneyText.text = $"Current Money: ${MoneyController.Current}"; + MoneyText.text = $"Current Money: ${MoneyController.Current:F1}"; } } }