From 30a743cdbfc9d6b8a30da5fbe766f0980cc7d189 Mon Sep 17 00:00:00 2001 From: Pasha Bibko <156938226+PashaBibko@users.noreply.github.com> Date: Tue, 21 Apr 2026 10:20:15 +0100 Subject: [PATCH] Made only X dir count as off-screen --- Assets/Scenes/GameScene.unity | 2 +- Assets/Scripts/Game/Items/ItemBehaviour.cs | 37 ++++++++++++---------- ProjectSettings/TagManager.asset | 2 +- 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/Assets/Scenes/GameScene.unity b/Assets/Scenes/GameScene.unity index 476aaa4..0ccd177 100644 --- a/Assets/Scenes/GameScene.unity +++ b/Assets/Scenes/GameScene.unity @@ -2708,7 +2708,7 @@ RectTransform: m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} m_AnchoredPosition: {x: 0, y: -980} - m_SizeDelta: {x: 3840, y: 200} + m_SizeDelta: {x: 6000, y: 200} m_Pivot: {x: 0.5, y: 0.5} --- !u!61 &2112507920 BoxCollider2D: diff --git a/Assets/Scripts/Game/Items/ItemBehaviour.cs b/Assets/Scripts/Game/Items/ItemBehaviour.cs index fc376f7..013d9d1 100644 --- a/Assets/Scripts/Game/Items/ItemBehaviour.cs +++ b/Assets/Scripts/Game/Items/ItemBehaviour.cs @@ -1,6 +1,8 @@ +using System.Numerics; using Fruitomation.Global; using PashaBibko.Pacore.Attributes; using UnityEngine; +using Vector3 = UnityEngine.Vector3; namespace Fruitomation.Game.Items { @@ -72,16 +74,13 @@ namespace Fruitomation.Game.Items private void FixedUpdate() { - bool contained = IsWithinCanvas(RectTransform, AttachedCanvas.GetComponent()); - EnteredCanvas = EnteredCanvas || contained; - - if (!contained && EnteredCanvas) + if (IsNotWithinCanvas(RectTransform, AttachedCanvas.GetComponent())) { TriggerDestruction(); } } - private static bool IsWithinCanvas(RectTransform element, RectTransform canvas) + private static bool IsNotWithinCanvas(RectTransform element, RectTransform canvas) { Vector3[] elementCorners = new Vector3[4]; Vector3[] canvasCorners = new Vector3[4]; @@ -89,23 +88,27 @@ namespace Fruitomation.Game.Items 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 - ); + float aMin = float.MaxValue; + float aMax = float.MinValue; + + foreach (Vector3 corner in canvasCorners) + { + aMin = Mathf.Min(aMin, corner.x); + aMax = Mathf.Max(aMax, corner.x); + } + + float bMin = float.MaxValue; + float bMax = float.MinValue; foreach (Vector3 corner in elementCorners) { - if (bounds.Contains(corner)) - { - return true; - } + bMin = Mathf.Min(bMin, corner.x); + bMax = Mathf.Max(bMax, corner.x); } - return false; + return + !(bMin > (aMin - 1f)) || + !(bMax < (aMax + 1f)); } public void TriggerDestruction(bool harvest = true) diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset index 8e4aa6f..dfac122 100644 --- a/ProjectSettings/TagManager.asset +++ b/ProjectSettings/TagManager.asset @@ -17,7 +17,7 @@ TagManager: - - Buildings - Items - - + - BuildingNoRaycast - - -