From effe4ca2ccedfb7c3b338f8437596cad9f012e6d Mon Sep 17 00:00:00 2001 From: Felix Boucher Date: Sun, 18 Feb 2024 11:11:03 -0500 Subject: [PATCH] unit cooldown MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #Le besoin addressé par le commit les unités et bâtiments devrait avoir un temps de cooldown avant de pouvoir être spawné à nouveau #Comment le besoin est-il addressé? (modifications) les unités et bâtiments prennent maintenant 3 secondes avant de redevenir interactif après avoir été spawné --- .../GameObjectPlacementButton.prefab | 79 +++++++++++++++++++ .../TilePlacementButton.prefab | 79 +++++++++++++++++++ Assets/Scripts/Drag&Drop/UnitPlaceholder.cs | 3 + .../Scripts/Drag&Drop/UnitPlacementButton.cs | 39 ++++++++- 4 files changed, 199 insertions(+), 1 deletion(-) diff --git a/Assets/Prefabs/UI/BuyableUnitsView/GameObjectPlacementButton.prefab b/Assets/Prefabs/UI/BuyableUnitsView/GameObjectPlacementButton.prefab index fd6a1c7..429b13e 100644 --- a/Assets/Prefabs/UI/BuyableUnitsView/GameObjectPlacementButton.prefab +++ b/Assets/Prefabs/UI/BuyableUnitsView/GameObjectPlacementButton.prefab @@ -112,6 +112,7 @@ RectTransform: - {fileID: 578448310312278818} - {fileID: 907652128235033330} - {fileID: 7424225105167539335} + - {fileID: 5501162456977524028} m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -203,9 +204,11 @@ MonoBehaviour: _wood: 0 _rock: 0 _food: 0 + _cooldownInSeconds: 3 _foodLabel: {fileID: 907652129260736055} _woodLabel: {fileID: 2551561112895533431} _rockLabel: {fileID: 3195941792010457804} + _cooldownIndicator: {fileID: 5207475109691974292} _prefab: {fileID: 0} --- !u!225 &6913755812382793111 CanvasGroup: @@ -941,6 +944,82 @@ CanvasGroup: m_Interactable: 0 m_BlocksRaycasts: 0 m_IgnoreParentGroups: 0 +--- !u!1 &5828230984884335261 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5501162456977524028} + - component: {fileID: 8338249668523744596} + - component: {fileID: 5207475109691974292} + m_Layer: 5 + m_Name: CooldownIndicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &5501162456977524028 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5828230984884335261} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 907652127959947829} + m_RootOrder: 3 + 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 &8338249668523744596 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5828230984884335261} + m_CullTransparentMesh: 1 +--- !u!114 &5207475109691974292 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5828230984884335261} + 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.3018868, g: 0, b: 0, a: 0.6901961} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 3 + 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!1 &7114462096084942491 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Prefabs/UI/BuyableUnitsView/TilePlacementButton.prefab b/Assets/Prefabs/UI/BuyableUnitsView/TilePlacementButton.prefab index 60013ab..250b5b3 100644 --- a/Assets/Prefabs/UI/BuyableUnitsView/TilePlacementButton.prefab +++ b/Assets/Prefabs/UI/BuyableUnitsView/TilePlacementButton.prefab @@ -125,6 +125,7 @@ RectTransform: - {fileID: 7042708939576806788} - {fileID: 7287691806885839956} - {fileID: 1059349486317029921} + - {fileID: 1217819425183827895} m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -216,9 +217,11 @@ MonoBehaviour: _wood: 30 _rock: 0 _food: 0 + _cooldownInSeconds: 3 _foodLabel: {fileID: 7287691807974070417} _woodLabel: {fileID: 5391726344234182609} _rockLabel: {fileID: 5035571921358210154} + _cooldownIndicator: {fileID: 1268446567353174613} tile: {fileID: 11400000, guid: 7568f730b2ba3754297a7612452482e2, type: 2} --- !u!225 &2889836282219012120 CanvasGroup: @@ -1178,6 +1181,82 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!1 &8638014914632680632 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1217819425183827895} + - component: {fileID: 7644251973362524053} + - component: {fileID: 1268446567353174613} + m_Layer: 5 + m_Name: CooldownIndicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1217819425183827895 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8638014914632680632} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 907652127959947829} + m_RootOrder: 3 + 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 &7644251973362524053 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8638014914632680632} + m_CullTransparentMesh: 1 +--- !u!114 &1268446567353174613 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8638014914632680632} + 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.3018868, g: 0, b: 0, a: 0.6901961} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 3 + 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!1 &8965017596094456768 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/Drag&Drop/UnitPlaceholder.cs b/Assets/Scripts/Drag&Drop/UnitPlaceholder.cs index 2b786c4..b553a1f 100644 --- a/Assets/Scripts/Drag&Drop/UnitPlaceholder.cs +++ b/Assets/Scripts/Drag&Drop/UnitPlaceholder.cs @@ -8,10 +8,13 @@ public abstract class UnitPlaceholder : DraggablePlaceholder public override void Place() { ResourceManager.Instance.Remove(Rock, Wood, Food); + WasPlaced?.Invoke(this); } + public override bool CanBePlacedHere() { return base.CanBePlacedHere() && ResourceManager.Instance.EnoughFor(Rock, Wood, Food) && !LevelManager.Instance.Has(obj => obj.Position.IsContainedIn(transform.position)); } + public event System.Action WasPlaced; } \ No newline at end of file diff --git a/Assets/Scripts/Drag&Drop/UnitPlacementButton.cs b/Assets/Scripts/Drag&Drop/UnitPlacementButton.cs index d497f5e..6339fb1 100644 --- a/Assets/Scripts/Drag&Drop/UnitPlacementButton.cs +++ b/Assets/Scripts/Drag&Drop/UnitPlacementButton.cs @@ -1,3 +1,5 @@ +using GatherAndDefend.Events; +using System.Collections; using TMPro; using UnityEngine; using UnityEngine.EventSystems; @@ -14,6 +16,8 @@ public abstract class UnitPlacementButton : PlacementButton protected int _rock; [SerializeField] protected int _food; + [SerializeField] + protected int _cooldownInSeconds = 3; [SerializeField] private TMP_Text _foodLabel; @@ -22,7 +26,10 @@ public abstract class UnitPlacementButton : PlacementButton [SerializeField] private TMP_Text _rockLabel; - + [SerializeField] + protected Image _cooldownIndicator; + protected bool _lockedByCooldown; + protected override void Update() { base.Update(); @@ -44,6 +51,36 @@ public abstract class UnitPlacementButton : PlacementButton placeHolder.Rock = _rock; placeHolder.Wood = _wood; placeHolder.Food = _food; + placeHolder.WasPlaced += HandleCooldown; + } + + } + + private void HandleCooldown(UnitPlaceholder unitPlaceholder) + { + unitPlaceholder.WasPlaced -= HandleCooldown; + StartCoroutine(HandleCooldownCoroutine()); + + + IEnumerator HandleCooldownCoroutine() + { + var countDown = 0f; + _lockedByCooldown = true; + _cooldownIndicator.gameObject.SetActive(true); + while (countDown < _cooldownInSeconds) + { + countDown += Time.deltaTime; + var percentDone = countDown / _cooldownInSeconds; + _cooldownIndicator.fillAmount = 1 - percentDone; + yield return null; + } + _cooldownIndicator.gameObject.SetActive(false); + _lockedByCooldown = false; } } + + protected override bool CanPlace() + { + return base.CanPlace() && !_lockedByCooldown; + } }