Commit d4cfc2fc authored by Mahmoud Aglan's avatar Mahmoud Aglan

"Add MCQ gate pooling, road mesh combining, fix tick audio & navigation guards"

parent c59801ad
......@@ -31,6 +31,26 @@ public class AppRouter : MonoBehaviour
DontDestroyOnLoad(gameObject);
Application.targetFrameRate = Screen.currentResolution.refreshRate;
Screen.orientation = ScreenOrientation.Portrait;
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.Escape))
HandleBackButton();
}
private void HandleBackButton()
{
// Don't interrupt active challenges
if (ChallengeManager.Instance != null && ChallengeManager.Instance.IsChallengeRunning)
return;
var scene = SceneManager.GetActiveScene().name;
if (scene == "MainMenu")
Application.Quit();
else if (scene != "Login" && scene != "Boot")
GoToHome();
}
private async void Start()
......
......@@ -30,6 +30,9 @@ public class HomeController : MonoBehaviour
private VisualElement menuPanel;
// Navigation guard — prevents concurrent Challenge + Practice clicks
public static bool IsNavigating { get; private set; }
void Start()
{
var root = mainMenuDocument.rootVisualElement.Q("Home");
......@@ -135,6 +138,12 @@ public class HomeController : MonoBehaviour
private void OnChallengeButtonClicked()
{
if (IsNavigating) return;
IsNavigating = true;
challengeButton.SetEnabled(false);
if (practiceButton != null) practiceButton.SetEnabled(false);
var challenge = Instantiate(challengePrefab);
var challengeManager = challenge.GetComponent<ChallengeManager>();
......@@ -143,6 +152,7 @@ public class HomeController : MonoBehaviour
private void OnDestroy()
{
IsNavigating = false;
UserService.Instance.OnUserChanged -= OnUserChange;
challengeButton.clicked -= OnChallengeButtonClicked;
}
......
......@@ -105,6 +105,7 @@ public class MainmenuAnimation : MonoBehaviour
openPracticeButton.clicked += () =>
{
if (HomeController.IsNavigating) return;
SelectGamePanel.style.display = DisplayStyle.Flex;
SelectGamePanel.experimental.animation.Start(0, 1, 200, (v, t) =>
{
......
{"TestSuite":"","Date":0,"Player":{"Development":false,"ScreenWidth":0,"ScreenHeight":0,"ScreenRefreshRate":0,"Fullscreen":false,"Vsync":0,"AntiAliasing":0,"Batchmode":false,"RenderThreadingMode":"MultiThreaded","MtRendering":false,"GraphicsJobs":false,"GpuSkinning":true,"Platform":"","ColorSpace":"","AnisotropicFiltering":"","BlendWeights":"","GraphicsApi":"","ScriptingBackend":"IL2CPP","AndroidTargetSdkVersion":"AndroidApiLevelAuto","AndroidBuildSystem":"Gradle","BuildTarget":"Android","StereoRenderingPath":"MultiPass"},"Hardware":{"OperatingSystem":"","DeviceModel":"","DeviceName":"","ProcessorType":"","ProcessorCount":0,"GraphicsDeviceName":"","SystemMemorySizeMB":0},"Editor":{"Version":"6000.3.9f1","Branch":"6000.3/staging","Changeset":"7a9955a4f2fa","Date":1770746648},"Dependencies":["com.cysharp.unitask@2.5.10","com.github-glitchenzo.nugetforunity@4.5.0","com.unity.2d.sprite@1.0.0","com.unity.ai.navigation@2.0.11","com.unity.cinemachine@3.1.6","com.unity.collab-proxy@2.11.4","com.unity.ide.rider@3.0.39","com.unity.ide.visualstudio@2.0.26","com.unity.inputsystem@1.19.0","com.unity.multiplayer.center@1.0.1","com.unity.nuget.newtonsoft-json@3.2.2","com.unity.postprocessing@3.5.4","com.unity.recorder@5.1.6","com.unity.render-pipelines.universal@17.3.0","com.unity.shadergraph@17.3.0","com.unity.test-framework@1.6.0","com.unity.timeline@1.8.11","com.unity.ugui@2.0.0","com.unity.visualeffectgraph@17.3.0","com.unity.visualscripting@1.9.11","media.lightside.unitext@1.0.0","com.unity.modules.accessibility@1.0.0","com.unity.modules.adaptiveperformance@1.0.0","com.unity.modules.ai@1.0.0","com.unity.modules.androidjni@1.0.0","com.unity.modules.animation@1.0.0","com.unity.modules.assetbundle@1.0.0","com.unity.modules.audio@1.0.0","com.unity.modules.cloth@1.0.0","com.unity.modules.director@1.0.0","com.unity.modules.imageconversion@1.0.0","com.unity.modules.imgui@1.0.0","com.unity.modules.jsonserialize@1.0.0","com.unity.modules.particlesystem@1.0.0","com.unity.modules.physics@1.0.0","com.unity.modules.physics2d@1.0.0","com.unity.modules.screencapture@1.0.0","com.unity.modules.terrain@1.0.0","com.unity.modules.terrainphysics@1.0.0","com.unity.modules.tilemap@1.0.0","com.unity.modules.ui@1.0.0","com.unity.modules.uielements@1.0.0","com.unity.modules.umbra@1.0.0","com.unity.modules.unityanalytics@1.0.0","com.unity.modules.unitywebrequest@1.0.0","com.unity.modules.unitywebrequestassetbundle@1.0.0","com.unity.modules.unitywebrequestaudio@1.0.0","com.unity.modules.unitywebrequesttexture@1.0.0","com.unity.modules.unitywebrequestwww@1.0.0","com.unity.modules.vectorgraphics@1.0.0","com.unity.modules.vehicles@1.0.0","com.unity.modules.video@1.0.0","com.unity.modules.vr@1.0.0","com.unity.modules.wind@1.0.0","com.unity.modules.xr@1.0.0","com.unity.modules.subsystems@1.0.0","com.unity.modules.hierarchycore@1.0.0","com.unity.render-pipelines.core@17.3.0","com.unity.ext.nunit@2.0.5","com.unity.searcher@4.9.4","com.unity.render-pipelines.universal-config@17.0.3","com.unity.collections@2.6.2","com.unity.bindings.openimageio@1.0.2","com.unity.splines@2.8.2","com.unity.burst@1.8.28","com.unity.mathematics@1.3.3","com.unity.nuget.mono-cecil@1.11.6","com.unity.test-framework.performance@3.2.0","com.unity.settings-manager@2.1.1"],"Results":[]}
\ No newline at end of file
{"MeasurementCount":-1}
\ No newline at end of file
......@@ -398,6 +398,8 @@ namespace com.al_arcade.cs
// ─── End sequences ────────────────────────────────────────────────────
protected override IEnumerator SharedVictorySequence()
{
if (_isTicking) { _isTicking = false; SSAudioManager.Instance?.Tick(false); }
var audio = SSAudioManager.Instance;
audio.PlayVictory();
......@@ -427,6 +429,8 @@ namespace com.al_arcade.cs
protected override IEnumerator SharedLoseSequence()
{
if (_isTicking) { _isTicking = false; SSAudioManager.Instance?.Tick(false); }
SSAudioManager.Instance.PlayDefeat();
onGameComplete?.Invoke(_score);
SSAudioManager.Instance.StopMusic();
......
......@@ -629,6 +629,8 @@ namespace com.al_arcade.mcq
// ─── End Sequences ───────────────────────────────────────────────────
protected override IEnumerator SharedVictorySequence()
{
if (_isTicking) { _isTicking = false; SSAudioManager.Instance?.Tick(false); }
var audio = SSAudioManager.Instance;
if (audio != null)
{
......@@ -653,6 +655,8 @@ namespace com.al_arcade.mcq
protected override IEnumerator SharedLoseSequence()
{
if (_isTicking) { _isTicking = false; SSAudioManager.Instance?.Tick(false); }
StopPlayerAndCompetitor();
var audio = SSAudioManager.Instance;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment