diff --git a/Assets/Prefabs/Items/Items.asset b/Assets/Prefabs/Items/Items.asset index 455d6be..ee01b0d 100644 --- a/Assets/Prefabs/Items/Items.asset +++ b/Assets/Prefabs/Items/Items.asset @@ -14,41 +14,49 @@ MonoBehaviour: m_EditorClassIdentifier: Fruitomation::Fruitomation.Game.Items.SerializedItemInfoRegistry Registry: - Type: 0 + CustomBehaviour: 1 Prefab: {fileID: 4062657912758122058, guid: 23e3bfe33d8c6004c85fd638db567ab6, type: 3} MinMoney: 0.5 MaxMoney: 1.5 - Type: 1 + CustomBehaviour: 1 Prefab: {fileID: 8799415981405337049, guid: c21e0b5539573904cb10d979de4a3f72, type: 3} MinMoney: 3 MaxMoney: 7 - Type: 2 + CustomBehaviour: 1 Prefab: {fileID: 4062657912758122058, guid: 5e1f7f5d4294c1d4fa3e6f88dec0dfa6, type: 3} MinMoney: 12 MaxMoney: 18 - Type: 3 + CustomBehaviour: 1 Prefab: {fileID: 4062657912758122058, guid: b224b6df33529e64d83245d78e0feb9f, type: 3} MinMoney: 40 MaxMoney: 60 - Type: 4 + CustomBehaviour: 1 Prefab: {fileID: 4062657912758122058, guid: 7af455f1c1666e5409156598fe669f74, type: 3} MinMoney: 120 MaxMoney: 160 - Type: 6 + CustomBehaviour: 1 Prefab: {fileID: 4062657912758122058, guid: 13f2740b5ae396e40940587ab2effd65, type: 3} MinMoney: 250 MaxMoney: 350 - Type: 7 + CustomBehaviour: 1 Prefab: {fileID: 4062657912758122058, guid: ebddb1b81a288cc4c993a25bc9efe894, type: 3} MinMoney: 800 MaxMoney: 900 - Type: 5 + CustomBehaviour: 1 Prefab: {fileID: 4062657912758122058, guid: 2cf42dbc57bb6374b9e6ec700aad5854, type: 3} MinMoney: 2000 diff --git a/Assets/Scripts/Game/Items/FruitBehaviour.cs b/Assets/Scripts/Game/Items/FruitBehaviour.cs index 59b591e..a572284 100644 --- a/Assets/Scripts/Game/Items/FruitBehaviour.cs +++ b/Assets/Scripts/Game/Items/FruitBehaviour.cs @@ -1,12 +1,14 @@ +using JetBrains.Annotations; +using UnityEngine.Scripting; using UnityEngine; namespace Fruitomation.Game.Items { - public class FruitBehaviour : ItemBehaviour + [UsedImplicitly, Preserve] public class FruitBehaviour : CustomItemBehaviour { - protected override void OnInitialized() + public override void OnCreation() { - Body2D.linearVelocity = Random.insideUnitCircle * 2.5f; + AttachedItemBehaviour.Body2D.linearVelocity = Random.insideUnitCircle * 2.5f; } } } \ No newline at end of file diff --git a/Assets/Scripts/Game/Items/ICustomItemBehaviour.cs b/Assets/Scripts/Game/Items/ICustomItemBehaviour.cs new file mode 100644 index 0000000..7c8da59 --- /dev/null +++ b/Assets/Scripts/Game/Items/ICustomItemBehaviour.cs @@ -0,0 +1,9 @@ +namespace Fruitomation.Game.Items +{ + public abstract class CustomItemBehaviour + { + public ItemBehaviour AttachedItemBehaviour; + + public abstract void OnCreation(); + } +} \ No newline at end of file diff --git a/Assets/Scripts/Game/Items/ICustomItemBehaviour.cs.meta b/Assets/Scripts/Game/Items/ICustomItemBehaviour.cs.meta new file mode 100644 index 0000000..b79e17d --- /dev/null +++ b/Assets/Scripts/Game/Items/ICustomItemBehaviour.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 77bf10644007434586ed2f8b9e640469 +timeCreated: 1776516125 \ No newline at end of file diff --git a/Assets/Scripts/Game/Items/ItemBehaviour.cs b/Assets/Scripts/Game/Items/ItemBehaviour.cs index 7eb62b3..dcb2dba 100644 --- a/Assets/Scripts/Game/Items/ItemBehaviour.cs +++ b/Assets/Scripts/Game/Items/ItemBehaviour.cs @@ -3,13 +3,15 @@ using UnityEngine; namespace Fruitomation.Game.Items { - public class ItemBehaviour : MonoBehaviour + public sealed class ItemBehaviour : MonoBehaviour { - protected RectTransform RectTransform { get; private set; } - protected Rigidbody2D Body2D { get; private set; } - protected Canvas AttachedCanvas { get; private set; } - protected bool EnteredCanvas { get; private set; } + public RectTransform RectTransform { get; private set; } + public Rigidbody2D Body2D { get; private set; } + + private Canvas AttachedCanvas { get; set; } + private bool EnteredCanvas { get; set; } + private CustomItemBehaviour CustomBehaviour; private GameObject CurrentChild; private ItemType InternalItemType; @@ -23,8 +25,6 @@ namespace Fruitomation.Game.Items OnUpdateItemType(); } } - - protected virtual void OnInitialized() { } public void InitBehaviour(Canvas canvas, ItemType startType) { @@ -35,21 +35,29 @@ namespace Fruitomation.Game.Items CurrentType = startType; EnteredCanvas = false; - OnInitialized(); + CustomBehaviour?.OnCreation(); } private void OnUpdateItemType() { if (CurrentChild is not null) { + CustomBehaviour = null; Destroy(CurrentChild); } ItemInfo info = ItemInfoRegistry.Get(CurrentType); CurrentChild = Instantiate(info.Prefab, transform); + + CustomBehaviour = info.GetCustomBehaviour(); + if (CustomBehaviour is not null) + { + CustomBehaviour.AttachedItemBehaviour = this; + CustomBehaviour.OnCreation(); + } } - protected void Update() + private void Update() { if (!GameStateController.Is(GameState.Simulation)) { diff --git a/Assets/Scripts/Game/Items/SerializedItemInfoRegistry.cs b/Assets/Scripts/Game/Items/SerializedItemInfoRegistry.cs index 34d25ac..04dab1e 100644 --- a/Assets/Scripts/Game/Items/SerializedItemInfoRegistry.cs +++ b/Assets/Scripts/Game/Items/SerializedItemInfoRegistry.cs @@ -3,6 +3,13 @@ using System; namespace Fruitomation.Game.Items { + [Serializable] public enum CustomBehaviourType + { + None, + + FruitBehaviour, + } + [Serializable] public enum ItemType { Apple, @@ -57,10 +64,24 @@ namespace Fruitomation.Game.Items [Serializable] public class ItemInfo { public ItemType Type; - + + [SerializeField] private CustomBehaviourType CustomBehaviour; + public GameObject Prefab; public float MinMoney; public float MaxMoney; + + public CustomItemBehaviour GetCustomBehaviour() + { + return CustomBehaviour switch + { + CustomBehaviourType.None => null, + + CustomBehaviourType.FruitBehaviour => new FruitBehaviour(), + + var _ => throw new ArgumentOutOfRangeException() + }; + } } [CreateAssetMenu] public class SerializedItemInfoRegistry : ScriptableObject