diff --git a/Assets/Prefabs/Fruit.prefab b/Assets/Prefabs/Fruit.prefab index 7bfd5fa..193a118 100644 --- a/Assets/Prefabs/Fruit.prefab +++ b/Assets/Prefabs/Fruit.prefab @@ -10,7 +10,9 @@ GameObject: m_Component: - component: {fileID: 5459288295520796107} - component: {fileID: 7354729621375102571} - - component: {fileID: 1864694910910877678} + - component: {fileID: 4856511816064388395} + - component: {fileID: 1572770211658593958} + - component: {fileID: 1030068666342984902} m_Layer: 0 m_Name: Sprite m_TagString: Untagged @@ -45,7 +47,7 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2456106081754027966} m_CullTransparentMesh: 1 ---- !u!114 &1864694910910877678 +--- !u!114 &4856511816064388395 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -75,6 +77,95 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!114 &1572770211658593958 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2456106081754027966} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 4856511816064388395} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!61 &1030068666342984902 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2456106081754027966} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_ForceSendLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_ForceReceiveLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_ContactCaptureLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_CallbackLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 100, y: 100} + m_EdgeRadius: 0 --- !u!1 &8732739964968511634 GameObject: m_ObjectHideFlags: 0 @@ -86,7 +177,6 @@ GameObject: - component: {fileID: 3605213539719865219} - component: {fileID: 1754222534141843334} - component: {fileID: 5645363082347469150} - - component: {fileID: 8128872912203902378} m_Layer: 0 m_Name: Fruit m_TagString: Untagged @@ -128,6 +218,7 @@ MonoBehaviour: m_EditorClassIdentifier: RectTransform: {fileID: 3605213539719865219} Body2D: {fileID: 5645363082347469150} + Button: {fileID: 1572770211658593958} AttachedCanvas: {fileID: 0} EnteredCanvas: 0 --- !u!50 &5645363082347469150 @@ -157,48 +248,3 @@ Rigidbody2D: m_SleepingMode: 1 m_CollisionDetection: 1 m_Constraints: 0 ---- !u!61 &8128872912203902378 -BoxCollider2D: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8732739964968511634} - m_Enabled: 1 - m_Density: 1 - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_ForceSendLayers: - serializedVersion: 2 - m_Bits: 4294967295 - m_ForceReceiveLayers: - serializedVersion: 2 - m_Bits: 4294967295 - m_ContactCaptureLayers: - serializedVersion: 2 - m_Bits: 4294967295 - m_CallbackLayers: - serializedVersion: 2 - m_Bits: 4294967295 - m_IsTrigger: 0 - m_UsedByEffector: 0 - m_UsedByComposite: 0 - m_Offset: {x: 0, y: 0} - m_SpriteTilingProperty: - border: {x: 0, y: 0, z: 0, w: 0} - pivot: {x: 0, y: 0} - oldSize: {x: 0, y: 0} - newSize: {x: 0, y: 0} - adaptiveTilingThreshold: 0 - drawMode: 0 - adaptiveTiling: 0 - m_AutoTiling: 0 - serializedVersion: 2 - m_Size: {x: 100, y: 100} - m_EdgeRadius: 0 diff --git a/Assets/Scripts/FruitBehaviour.cs b/Assets/Scripts/FruitBehaviour.cs index a981dcb..d605259 100644 --- a/Assets/Scripts/FruitBehaviour.cs +++ b/Assets/Scripts/FruitBehaviour.cs @@ -1,59 +1,76 @@ using PashaBibko.Pacore.Attributes; +using UnityEngine.UI; using UnityEngine; -public class FruitBehaviour : MonoBehaviour +namespace Fruitomation { - [Header("References")] - [SerializeField] private RectTransform RectTransform; - [SerializeField] private Rigidbody2D Body2D; - - [Header("Read only")] - [InspectorReadOnly, SerializeField] private Canvas AttachedCanvas; - [InspectorReadOnly, SerializeField] private bool EnteredCanvas; - - public void InitFruitBehaviour(Canvas canvas) + public class FruitBehaviour : MonoBehaviour { - AttachedCanvas = canvas; - EnteredCanvas = false; - - Body2D.velocity = Random.insideUnitCircle * 2.5f; - } + [Header("References")] [SerializeField] + private RectTransform RectTransform; - private static bool IsWithinCanvas(RectTransform element, RectTransform canvas) - { - Vector3[] elementCorners = new Vector3[4]; - Vector3[] canvasCorners = new Vector3[4]; - - element.GetWorldCorners(elementCorners); - canvas.GetWorldCorners(canvasCorners); + [SerializeField] private Rigidbody2D Body2D; + [SerializeField] private Button Button; - Rect bounds = new - ( - canvasCorners[0].x, - canvasCorners[0].y, - canvasCorners[2].x - canvasCorners[0].x, - canvasCorners[2].y - canvasCorners[0].y - ); + [Header("Read only")] + [InspectorReadOnly, SerializeField] private Canvas AttachedCanvas; + [InspectorReadOnly, SerializeField] private FruitSpawner Spawner; + [InspectorReadOnly, SerializeField] private bool EnteredCanvas; - foreach (Vector3 corner in elementCorners) + public void InitFruitBehaviour(Canvas canvas, FruitSpawner spawner) { - if (bounds.Contains(corner)) + AttachedCanvas = canvas; + EnteredCanvas = false; + Spawner = spawner; + + Body2D.velocity = Random.insideUnitCircle * 2.5f; + + Button.onClick.AddListener(OnPlayerClicked); + } + + private void OnPlayerClicked() => TriggerDestruction(); + + private void FixedUpdate() + { + bool contained = IsWithinCanvas(RectTransform, AttachedCanvas.GetComponent()); + EnteredCanvas = EnteredCanvas || contained; + + if (!contained && EnteredCanvas) { - return true; + TriggerDestruction(); } } - return false; - } - - private void FixedUpdate() - { - bool contained = IsWithinCanvas(RectTransform, AttachedCanvas.GetComponent()); - EnteredCanvas = EnteredCanvas || contained; - - if (!contained && EnteredCanvas) + private void TriggerDestruction() { Destroy(gameObject); } + + private static bool IsWithinCanvas(RectTransform element, RectTransform canvas) + { + Vector3[] elementCorners = new Vector3[4]; + Vector3[] canvasCorners = new Vector3[4]; + + element.GetWorldCorners(elementCorners); + canvas.GetWorldCorners(canvasCorners); + + Rect bounds = new + ( + canvasCorners[0].x, + canvasCorners[0].y, + canvasCorners[2].x - canvasCorners[0].x, + canvasCorners[2].y - canvasCorners[0].y + ); + + foreach (Vector3 corner in elementCorners) + { + if (bounds.Contains(corner)) + { + return true; + } + } + + return false; + } } -} +} \ No newline at end of file diff --git a/Assets/Scripts/FruitSpawner.cs b/Assets/Scripts/FruitSpawner.cs index 1cab86b..2815694 100644 --- a/Assets/Scripts/FruitSpawner.cs +++ b/Assets/Scripts/FruitSpawner.cs @@ -20,7 +20,7 @@ namespace Fruitomation behaviour.InitFruitBehaviour ( - GameCanvas + GameCanvas, this ); } }