Made clicking harvest the fruit

This commit is contained in:
2026-03-30 12:01:22 +01:00
parent a09a7d8867
commit d0102c52f6
3 changed files with 154 additions and 91 deletions

View File

@@ -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

View File

@@ -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;
[Header("References")] [SerializeField]
private RectTransform RectTransform;
Body2D.velocity = Random.insideUnitCircle * 2.5f;
}
[SerializeField] private Rigidbody2D Body2D;
[SerializeField] private Button Button;
private static bool IsWithinCanvas(RectTransform element, RectTransform canvas)
{
Vector3[] elementCorners = new Vector3[4];
Vector3[] canvasCorners = new Vector3[4];
[Header("Read only")]
[InspectorReadOnly, SerializeField] private Canvas AttachedCanvas;
[InspectorReadOnly, SerializeField] private FruitSpawner Spawner;
[InspectorReadOnly, SerializeField] private bool EnteredCanvas;
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)
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<RectTransform>());
EnteredCanvas = EnteredCanvas || contained;
if (!contained && EnteredCanvas)
{
return true;
TriggerDestruction();
}
}
return false;
}
private void FixedUpdate()
{
bool contained = IsWithinCanvas(RectTransform, AttachedCanvas.GetComponent<RectTransform>());
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;
}
}
}

View File

@@ -20,7 +20,7 @@ namespace Fruitomation
behaviour.InitFruitBehaviour
(
GameCanvas
GameCanvas, this
);
}
}