From a15a75a603bb10e1738e0d8051879304c04f3eee Mon Sep 17 00:00:00 2001 From: Ader_Alisma Date: Sun, 7 Sep 2025 22:48:30 +0000 Subject: [PATCH] bugfix/HideUpgradesOnDeselect (#9) Retire le UI du UnitTree quand on clique sur n'importe quoi d'autre Co-authored-by: Ader Alisma 01 Reviewed-on: https://gitea.clubconjure.com/Conjure/gather-and-defend/pulls/9 Reviewed-by: EliaGingras1 --- .../UI/BuyableUnitsView/UpgradeButtons.prefab | 85 ++++++++++++++++++- Assets/Scenes/Game.unity | 13 +++ Assets/Scripts/Ally/AllyUpgrade.cs | 15 ++-- Assets/Scripts/UnitTree/DeselectManager.cs | 48 +++++++++++ .../Scripts/UnitTree/DeselectManager.cs.meta | 11 +++ 5 files changed, 163 insertions(+), 9 deletions(-) create mode 100644 Assets/Scripts/UnitTree/DeselectManager.cs create mode 100644 Assets/Scripts/UnitTree/DeselectManager.cs.meta diff --git a/Assets/Prefabs/UI/BuyableUnitsView/UpgradeButtons.prefab b/Assets/Prefabs/UI/BuyableUnitsView/UpgradeButtons.prefab index 293ec35..1912944 100644 --- a/Assets/Prefabs/UI/BuyableUnitsView/UpgradeButtons.prefab +++ b/Assets/Prefabs/UI/BuyableUnitsView/UpgradeButtons.prefab @@ -30,6 +30,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: + - {fileID: 3501783116545349986} - {fileID: 6716417799655040460} - {fileID: 7628964284593499177} - {fileID: 1691244495608687713} @@ -94,7 +95,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4817988606444742094} - m_RootOrder: 3 + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -127,6 +128,82 @@ MonoBehaviour: m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 m_ReverseArrangement: 0 +--- !u!1 &7208680640146097829 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3501783116545349986} + - component: {fileID: 4692438377285158079} + - component: {fileID: 5060206313964554553} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &3501783116545349986 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7208680640146097829} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 46.65209, y: 30.223253, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4817988606444742094} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4692438377285158079 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7208680640146097829} + m_CullTransparentMesh: 1 +--- !u!114 &5060206313964554553 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7208680640146097829} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 --- !u!1001 &2008641878076503636 PrefabInstance: m_ObjectHideFlags: 0 @@ -156,7 +233,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 907652127959947829, guid: 7a4156822defb3f4bb8a2ed6de7cacdb, type: 3} propertyPath: m_RootOrder - value: 2 + value: 3 objectReference: {fileID: 0} - target: {fileID: 907652127959947829, guid: 7a4156822defb3f4bb8a2ed6de7cacdb, type: 3} propertyPath: m_AnchorMax.x @@ -330,7 +407,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 907652127959947829, guid: 7a4156822defb3f4bb8a2ed6de7cacdb, type: 3} propertyPath: m_RootOrder - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 907652127959947829, guid: 7a4156822defb3f4bb8a2ed6de7cacdb, type: 3} propertyPath: m_AnchorMax.x @@ -500,7 +577,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 907652127959947829, guid: 7a4156822defb3f4bb8a2ed6de7cacdb, type: 3} propertyPath: m_RootOrder - value: 1 + value: 2 objectReference: {fileID: 0} - target: {fileID: 907652127959947829, guid: 7a4156822defb3f4bb8a2ed6de7cacdb, type: 3} propertyPath: m_AnchorMax.x diff --git a/Assets/Scenes/Game.unity b/Assets/Scenes/Game.unity index 29498dc..7676e4b 100644 --- a/Assets/Scenes/Game.unity +++ b/Assets/Scenes/Game.unity @@ -4711,6 +4711,19 @@ MonoBehaviour: m_EditorClassIdentifier: _pauseButton: {fileID: 2019202048} _speedButton: {fileID: 1709530845} +--- !u!114 &1760532844 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 829543639} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4c63e60a445cf4549999d898b25ab0ea, type: 3} + m_Name: + m_EditorClassIdentifier: + _canvas: {fileID: 1092900231} --- !u!1 &1761692192 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/Ally/AllyUpgrade.cs b/Assets/Scripts/Ally/AllyUpgrade.cs index 82616bf..e618912 100644 --- a/Assets/Scripts/Ally/AllyUpgrade.cs +++ b/Assets/Scripts/Ally/AllyUpgrade.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; +using UnityEngine.UI; public class AllyUpgrade : MonoBehaviour, IPointerClickHandler { @@ -28,27 +29,30 @@ public class AllyUpgrade : MonoBehaviour, IPointerClickHandler { _instance = Instantiate(_upgradeUI, Camera.main.WorldToScreenPoint(transform.position), Quaternion.identity, canvas.transform); AssignUpgrades(canvas); + DeselectManager.Instance.SetAllyUpgrade(_instance); } } - } else { Destroy(_instance); + _instance = null; } } } private void AssignUpgrades(Canvas canvas) { - // Assign upgrade Prefabs + // Assign upgrade Prefabs for (int i = 0; i < _instance.transform.childCount - 1; i++) { if (_upgradeList.Count > i && _upgradeList[i] != null) { - GameObject upgradeEnfant = _instance.transform.GetChild(i).gameObject; - UpgradePlacementButton button = upgradeEnfant.GetComponent(); - button.Initialize(_upgradeList[i], gameObject, canvas); + GameObject upgradeEnfant = _instance.transform.Find("Upgrade" + (i + 1)).gameObject; + if (upgradeEnfant.TryGetComponent(out UpgradePlacementButton button)) + { + button.Initialize(_upgradeList[i], gameObject, canvas); + } } } } @@ -58,6 +62,7 @@ public class AllyUpgrade : MonoBehaviour, IPointerClickHandler if (_instance != null) { Destroy(_instance); + _instance = null; } } } diff --git a/Assets/Scripts/UnitTree/DeselectManager.cs b/Assets/Scripts/UnitTree/DeselectManager.cs new file mode 100644 index 0000000..6566685 --- /dev/null +++ b/Assets/Scripts/UnitTree/DeselectManager.cs @@ -0,0 +1,48 @@ +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.EventSystems; +using UnityEngine.UI; + +public class DeselectManager : SingletonBehaviour +{ + private GameObject _allyUpgrade; + [SerializeField] + private Canvas _canvas; + + private void Update() + { + if (Input.GetMouseButton(0) && _allyUpgrade != null) + { + // Vérifie si click est sur un enfant d'AllyUpgrade + PointerEventData pointerData = new PointerEventData(EventSystem.current) + { + position = Input.mousePosition + }; + List results = new List(); + GraphicRaycaster raycaster = _canvas.GetComponent(); + raycaster.Raycast(pointerData, results); + foreach (RaycastResult result in results) + { + if (result.gameObject.transform.IsChildOf(_allyUpgrade.transform)) + { + return; + } + } + SetAllyUpgrade(null); + } + } + + public void SetAllyUpgrade(GameObject allyUpgradeInstance) + { + if (_allyUpgrade == null) + { + _allyUpgrade = allyUpgradeInstance; + + } + else if (_allyUpgrade != allyUpgradeInstance) + { + Destroy(_allyUpgrade); + _allyUpgrade = allyUpgradeInstance; + } + } +} diff --git a/Assets/Scripts/UnitTree/DeselectManager.cs.meta b/Assets/Scripts/UnitTree/DeselectManager.cs.meta new file mode 100644 index 0000000..ee0d9c4 --- /dev/null +++ b/Assets/Scripts/UnitTree/DeselectManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4c63e60a445cf4549999d898b25ab0ea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: