From 586c4768512118e09d550ed203f888df61f3cd00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C5=A1a=20Ceviel?= Date: Tue, 27 Jan 2026 19:03:15 +0300 Subject: [PATCH] added race management --- Assets/Code/Gameplay/FinishTrigger.cs | 16 + Assets/Code/Gameplay/FinishTrigger.cs.meta | 3 + Assets/Code/Gameplay/RaceManager.cs | 125 ++ Assets/Code/Gameplay/RaceManager.cs.meta | 3 + Assets/Code/UI/MainMenuController.cs | 1 + Assets/Resources/Scenes/Gameplay.unity | 1271 +++++++++++++++++++- 6 files changed, 1410 insertions(+), 9 deletions(-) create mode 100644 Assets/Code/Gameplay/FinishTrigger.cs create mode 100644 Assets/Code/Gameplay/FinishTrigger.cs.meta create mode 100644 Assets/Code/Gameplay/RaceManager.cs create mode 100644 Assets/Code/Gameplay/RaceManager.cs.meta diff --git a/Assets/Code/Gameplay/FinishTrigger.cs b/Assets/Code/Gameplay/FinishTrigger.cs new file mode 100644 index 0000000..b9f2576 --- /dev/null +++ b/Assets/Code/Gameplay/FinishTrigger.cs @@ -0,0 +1,16 @@ +using UnityEngine; + +namespace Code.Gameplay +{ + public class FinishTrigger : MonoBehaviour + { + private void OnTriggerEnter(Collider other) + { + if (other.CompareTag("Player")) + { + var raceManager = FindFirstObjectByType(); + raceManager?.OnFinish(); + } + } + } +} \ No newline at end of file diff --git a/Assets/Code/Gameplay/FinishTrigger.cs.meta b/Assets/Code/Gameplay/FinishTrigger.cs.meta new file mode 100644 index 0000000..ae263e6 --- /dev/null +++ b/Assets/Code/Gameplay/FinishTrigger.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4cb191c0886a4eabb5d7a94ff5200e09 +timeCreated: 1769527096 \ No newline at end of file diff --git a/Assets/Code/Gameplay/RaceManager.cs b/Assets/Code/Gameplay/RaceManager.cs new file mode 100644 index 0000000..b70d072 --- /dev/null +++ b/Assets/Code/Gameplay/RaceManager.cs @@ -0,0 +1,125 @@ +using Code.DI; +using Code.Input; +using TMPro; +using UnityEngine; +using UnityEngine.SceneManagement; +using UnityEngine.UI; + +namespace Code.Gameplay +{ + public class RaceManager : MonoBehaviour + { + [Header("UI")] + [SerializeField] private TMP_Text countdownText; + [SerializeField] private TMP_Text timerText; + [SerializeField] private GameObject resultsWrapper; + + [Header("Settings")] + [SerializeField] private float countdownDuration = 3f; + [SerializeField] private float startDelayAfterGo = 0.5f; + + private float _startTime; + private float _elapsedTime; + private bool _isRaceActive = false; + private IInputService _inputService; + + private TMP_Text _resultText; + private TMP_InputField _nameField; + private Button _restartButton; + private Button _toMenuButton; + + private void Awake() + { + var container = FindFirstObjectByType(); + _inputService = container.Resolve(); + + _resultText = resultsWrapper.transform.Find("Text Area")?.Find("Text")?.GetComponent(); + _nameField = resultsWrapper.transform.Find("EnterNameField")?.GetComponent(); + _restartButton = resultsWrapper.transform.Find("RestartButton")?.GetComponent