From 916a06b9289ab5d0fd79e91623faa9a085e93cd7 Mon Sep 17 00:00:00 2001 From: Harrison Bruhl Date: Thu, 5 Mar 2026 21:01:31 -0500 Subject: [PATCH 1/2] feat(ui): add game over restart screen controller --- Assets/_Project/Art/UI/GameOverScreen.meta | 8 ++ .../Art/UI/GameOverScreen/RestartButtonUI.png | Bin 0 -> 1139 bytes .../GameOverScreen/RestartButtonUI.png.meta | 127 ++++++++++++++++++ Assets/_Project/Scenes/MainPrototype.unity | 30 ++++- Assets/_Project/Scenes/SampleScene.unity | 20 ++- .../_Project.Gameplay/Managers/GameManager.cs | 55 +++++++- .../UI/GameOverScreenController.cs | 123 +++++++++++++++++ .../UI/GameOverScreenController.cs.meta | 11 ++ 8 files changed, 363 insertions(+), 11 deletions(-) create mode 100644 Assets/_Project/Art/UI/GameOverScreen.meta create mode 100644 Assets/_Project/Art/UI/GameOverScreen/RestartButtonUI.png create mode 100644 Assets/_Project/Art/UI/GameOverScreen/RestartButtonUI.png.meta create mode 100644 Assets/_Project/Scripts/_Project.Gameplay/UI/GameOverScreenController.cs create mode 100644 Assets/_Project/Scripts/_Project.Gameplay/UI/GameOverScreenController.cs.meta diff --git a/Assets/_Project/Art/UI/GameOverScreen.meta b/Assets/_Project/Art/UI/GameOverScreen.meta new file mode 100644 index 0000000..ab700c5 --- /dev/null +++ b/Assets/_Project/Art/UI/GameOverScreen.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 366ce872bdd59184ba04a24fd12b4677 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Art/UI/GameOverScreen/RestartButtonUI.png b/Assets/_Project/Art/UI/GameOverScreen/RestartButtonUI.png new file mode 100644 index 0000000000000000000000000000000000000000..6f2227706c68ff178147b71f72728a042271cda2 GIT binary patch literal 1139 zcmV-(1dRKMP)d`(&)xW zA_)oqv^G0L2ucqSv{OM!rAM*X%m+1V3i+O)GXXx)Y zLf#Ica=HCaP0#KNfqH#%uU6sbagKKWkFAa9`i+U`<%^a0HCG!0vU9ok+vzC)eB2P- zB#U44m>dnjZ)X4d*6uS0z}ot1w7av@eD2!@>BJPjp#~u#ZG#ZChQCiT1%Nh$ivP~9 z_tE2lv1sVTx%l-E3gEE6(Z>dXgUr6yVV`gNJaqt=6zo5KJT87cZtreK(bnJhLkIzc z%h&duX#}8xpP9IS=zAfa7XVzBDF6oh2Rpt`2*77Pw(Z=$2GqvktT^D7OaU-->P%6e z13(2*2SC~$p2GmZ9n1s-0+wq4m{9_w0Kg5I<^iNZ;REi-Gyzko}RoG-TL{e`Mllb z`Dt|=0nqyccF-Y!kvs%As9F9aoctP)a}x-aieK_to6xxc zp!gB8yxYE00lx>s0kF2d+Vz&?Nz4`mvavb$Xf6}47D?KS~| z;s<(XZ2%;vKqf7$JZv5o6m@|F5DIGpz)%QiHPqxtfWimzVPyblSg(RNy}$l_`Ro;n z9>|$>0bq{lRq#U51I4i}01OHrD4vx8K=A|RurdGul*6h3U?v|>E^7jSb^n0!SrY(4 z?+=vAiU45f4^+d7002;p$^syH%x`P&&&UM6t0Vxpf)B7mX#wCuj}P}TYRjgS0C2I# zXE|~=nRWHqZ|M{s04^6li;=oV`>co?X!xqOv^XD4P0tqg3x-EV3;Wqcaq%(); + if (gameOverScreenController == null) + gameOverScreenController = gameOverUI.AddComponent(); + + gameOverScreenController.SetRestartHandler(RequestRestart); + } } diff --git a/Assets/_Project/Scripts/_Project.Gameplay/UI/GameOverScreenController.cs b/Assets/_Project/Scripts/_Project.Gameplay/UI/GameOverScreenController.cs new file mode 100644 index 0000000..8775ffe --- /dev/null +++ b/Assets/_Project/Scripts/_Project.Gameplay/UI/GameOverScreenController.cs @@ -0,0 +1,123 @@ +using TMPro; +using UnityEngine; +using UnityEngine.Events; +using UnityEngine.UI; + +namespace Castlebound.Gameplay.UI +{ + public class GameOverScreenController : MonoBehaviour + { + [SerializeField] private Button restartButton; + [SerializeField] private Sprite restartButtonSprite; + [SerializeField] private string restartButtonText = "Rise Again"; + [SerializeField] private Color restartButtonTextColor = new Color(0.84f, 0.95f, 1f, 1f); + + private UnityAction restartHandler; + + private void OnEnable() + { + EnsureRestartButton(); + ApplyVisuals(); + BindRestartHandler(); + } + + private void OnDisable() + { + if (restartButton != null && restartHandler != null) + { + restartButton.onClick.RemoveListener(restartHandler); + } + } + + public void SetRestartHandler(UnityAction handler) + { + if (restartButton != null && restartHandler != null) + { + restartButton.onClick.RemoveListener(restartHandler); + } + + restartHandler = handler; + EnsureRestartButton(); + ApplyVisuals(); + BindRestartHandler(); + } + + public void Show() + { + gameObject.SetActive(true); + } + + private void BindRestartHandler() + { + if (restartButton == null || restartHandler == null) + { + return; + } + + restartButton.onClick.RemoveListener(restartHandler); + restartButton.onClick.AddListener(restartHandler); + } + + private void EnsureRestartButton() + { + if (restartButton == null) + { + restartButton = GetComponentInChildren