Commit 754a039e authored by Yousef Sameh's avatar Yousef Sameh

waiting for network UI

parent 6f28f351
......@@ -7,6 +7,7 @@ using Supabase.Gotrue.Interfaces;
using UnityEngine;
using UnityEngine.SceneManagement;
using TMPro;
using DG.Tweening;
public class AppRouter : MonoBehaviour
{
......@@ -15,8 +16,7 @@ public class AppRouter : MonoBehaviour
[Header("Splash UI (Boot Scene Only)")]
[SerializeField] private GameObject splashScreen;
[SerializeField] private GameObject errorPanel;
[SerializeField] private TextMeshProUGUI statusText;
[SerializeField] private CanvasGroup noInternetPanel;
[Header("Settings")]
public TransitionSettings transitionSettings;
......@@ -25,6 +25,8 @@ public class AppRouter : MonoBehaviour
[Tooltip("Check this in the Inspector to simulate network loss and test the 'Waiting' loop.")]
[SerializeField] private bool simulateNetworkFailure;
private bool hasInetnertPanelAnimatedIn = false;
private void Awake()
{
if (_instance != null)
......@@ -63,7 +65,11 @@ public class AppRouter : MonoBehaviour
private async void Start()
{
if (splashScreen != null) splashScreen.SetActive(true);
if (errorPanel != null) errorPanel.SetActive(false);
if (noInternetPanel != null)
{
noInternetPanel.alpha = 0f;
noInternetPanel.gameObject.SetActive(false);
}
await Boot();
}
......@@ -121,6 +127,36 @@ public class AppRouter : MonoBehaviour
);
}
private void AnimateNoInternetPanel()
{
if (noInternetPanel == null || hasInetnertPanelAnimatedIn) return;
hasInetnertPanelAnimatedIn = true;
noInternetPanel.gameObject.SetActive(true);
noInternetPanel.DOFade(1f, 0.5f).SetEase(Ease.OutSine);
var rect = noInternetPanel.GetComponent<RectTransform>();
// Heartbeat scale animation
rect.DOScale(1.05f, 1.5f).SetEase(Ease.InOutSine).SetLoops(-1, LoopType.Yoyo);
var originalPos = rect.anchoredPosition;
rect.anchoredPosition = new Vector2(originalPos.x, originalPos.y - 20f);
rect.DOAnchorPosY(originalPos.y, 1.5f).SetEase(Ease.InOutSine).SetLoops(-1, LoopType.Yoyo);
hasInetnertPanelAnimatedIn = true;
}
private void AnimateOut()
{
noInternetPanel.DOFade(0f, 0.5f).SetEase(Ease.OutSine).OnComplete(() =>
{
noInternetPanel.gameObject.SetActive(false);
hasInetnertPanelAnimatedIn = false;
});
}
private async UniTask EnsureNetworkConnection()
{
bool isConnected = false;
......@@ -128,6 +164,7 @@ public class AppRouter : MonoBehaviour
while (!isConnected)
{
attempts++;
UpdateStatus(attempts == 1 ? "Connecting..." : "Waiting for network...");
......@@ -147,6 +184,17 @@ public class AppRouter : MonoBehaviour
// Uses the object's token to stop if the user quits the app
await UniTask.Delay(TimeSpan.FromSeconds(3), cancellationToken: this.GetCancellationTokenOnDestroy());
}
if (noInternetPanel != null && !isConnected)
{
AnimateNoInternetPanel();
}
if (isConnected && noInternetPanel != null)
{
AnimateOut();
}
}
UpdateStatus("Connected!");
......@@ -155,9 +203,6 @@ public class AppRouter : MonoBehaviour
private void UpdateStatus(string message)
{
if (statusText != null)
statusText.text = message;
Debug.Log($"[AppRouter] {message}");
}
......@@ -214,7 +259,6 @@ public class AppRouter : MonoBehaviour
private void ShowError(string message)
{
if (splashScreen != null) splashScreen.SetActive(false);
if (errorPanel != null) errorPanel.SetActive(true);
Debug.LogError($"[Boot Error] {message}");
}
}
\ No newline at end of file
......@@ -119,6 +119,96 @@ NavMeshSettings:
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &241925289
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 241925290}
- component: {fileID: 241925292}
- component: {fileID: 241925291}
- component: {fileID: 241925293}
m_Layer: 5
m_Name: NoInternet
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &241925290
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 241925289}
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:
- {fileID: 1539251302}
- {fileID: 821608368}
m_Father: {fileID: 3875778254585832864}
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.000006198883, y: -0.000015258789}
m_SizeDelta: {x: 738.3563, y: 787.8052}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &241925291
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 241925289}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 0.99607843, g: 0.84313726, b: 0, a: 1}
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: 21300000, guid: b94ad4425888548039a8c69d289a39d6, type: 3}
m_Type: 1
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!222 &241925292
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 241925289}
m_CullTransparentMesh: 1
--- !u!225 &241925293
CanvasGroup:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 241925289}
m_Enabled: 1
m_Alpha: 1
m_Interactable: 1
m_BlocksRaycasts: 1
m_IgnoreParentGroups: 0
--- !u!1 &284121875
GameObject:
m_ObjectHideFlags: 0
......@@ -165,8 +255,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::AppRouter
splashScreen: {fileID: 90795484556287063}
errorPanel: {fileID: 0}
statusText: {fileID: 0}
noInternetPanel: {fileID: 241925293}
transitionSettings: {fileID: 11400000, guid: 91673b50629b1ae4f938d0b25135d085, type: 2}
simulateNetworkFailure: 0
--- !u!1 &787965442
......@@ -182,7 +271,7 @@ GameObject:
- component: {fileID: 787965445}
- component: {fileID: 787965444}
m_Layer: 0
m_Name: 2
m_Name: Logo
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
......@@ -304,6 +393,100 @@ SpriteRenderer:
m_SpriteTileMode: 0
m_WasSpriteAssigned: 1
m_SpriteSortPoint: 0
--- !u!1 &821608367
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 821608368}
- component: {fileID: 821608370}
- component: {fileID: 821608369}
m_Layer: 5
m_Name: Text (1)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &821608368
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 821608367}
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: 241925290}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0}
m_AnchorMax: {x: 0.5, y: 0}
m_AnchoredPosition: {x: 0, y: 210.14386}
m_SizeDelta: {x: 738, y: 420.28772}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &821608369
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 821608367}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: beaa34cb0e58d624bb3a264b28600785, type: 3}
m_Name:
m_EditorClassIdentifier: LightSide.UniText::LightSide.UniText
m_Material: {fileID: 0}
m_Color: {r: 0, g: 0, b: 0, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
text: "\u062C\u0627\u0631\u064A \u0627\u0644\u0627\u0646\u062A\u0638\u0627\u0631..."
fontStack: {fileID: 11400000, guid: 0029e5efb4c7a12f1ac9136de794e6dc, type: 2}
appearance: {fileID: 11400000, guid: 3a559cf5d653f05ea807e1be5655df92, type: 2}
fontSize: 150
baseDirection: 2
wordWrap: 1
horizontalAlignment: 1
verticalAlignment: 1
overEdge: 0
underEdge: 0
leadingDistribution: 0
autoSize: 1
minFontSize: 10
maxFontSize: 100
modRegisters:
items: []
modRegisterConfigs:
items: []
highlighter:
rid: 4850213259033706739
references:
version: 2
RefIds:
- rid: 4850213259033706739
type: {class: DefaultTextHighlighter, ns: LightSide, asm: LightSide.UniText}
data:
clickColor: {r: 0.2, g: 0.5, b: 1, a: 0.6}
fadeDuration: 0.25
hoverColor: {r: 0.2, g: 0.5, b: 1, a: 0.1}
--- !u!222 &821608370
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 821608367}
m_CullTransparentMesh: 1
--- !u!1 &877571984
GameObject:
m_ObjectHideFlags: 0
......@@ -477,6 +660,100 @@ MonoBehaviour:
m_VarianceClampScale: 0.9
m_ContrastAdaptiveSharpening: 0
m_Version: 2
--- !u!1 &1539251301
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1539251302}
- component: {fileID: 1539251304}
- component: {fileID: 1539251303}
m_Layer: 5
m_Name: Text
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1539251302
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1539251301}
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: 241925290}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 1}
m_AnchorMax: {x: 0.5, y: 1}
m_AnchoredPosition: {x: 0, y: -210.1438}
m_SizeDelta: {x: 738, y: 420.28772}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1539251303
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1539251301}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: beaa34cb0e58d624bb3a264b28600785, type: 3}
m_Name:
m_EditorClassIdentifier: LightSide.UniText::LightSide.UniText
m_Material: {fileID: 0}
m_Color: {r: 0, g: 0, b: 0, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
text: "\u0644\u0627 \u064A\u0648\u062C\u062F \u0627\u062A\u0635\u0627\u0644 \u0628\u0627\u0644\u0627\u0646\u062A\u0631\u0646\u062A\n"
fontStack: {fileID: 11400000, guid: 657d8db1dabff4325ae70686887b629b, type: 2}
appearance: {fileID: 11400000, guid: 3a559cf5d653f05ea807e1be5655df92, type: 2}
fontSize: 150
baseDirection: 2
wordWrap: 1
horizontalAlignment: 1
verticalAlignment: 1
overEdge: 0
underEdge: 0
leadingDistribution: 0
autoSize: 1
minFontSize: 10
maxFontSize: 100
modRegisters:
items: []
modRegisterConfigs:
items: []
highlighter:
rid: 4850213259033706739
references:
version: 2
RefIds:
- rid: 4850213259033706739
type: {class: DefaultTextHighlighter, ns: LightSide, asm: LightSide.UniText}
data:
clickColor: {r: 0.2, g: 0.5, b: 1, a: 0.6}
fadeDuration: 0.25
hoverColor: {r: 0.2, g: 0.5, b: 1, a: 0.1}
--- !u!222 &1539251304
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1539251301}
m_CullTransparentMesh: 1
--- !u!1 &90795484556287063
GameObject:
m_ObjectHideFlags: 0
......@@ -526,6 +803,7 @@ RectTransform:
m_Children:
- {fileID: 4601489637093293263}
- {fileID: 787965443}
- {fileID: 241925290}
m_Father: {fileID: 284121876}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
......
......@@ -225,7 +225,7 @@ Camera:
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
far clip plane: 100
field of view: 80
orthographic: 0
orthographic size: 5
......@@ -705,6 +705,9 @@ MonoBehaviour:
classCode:
runSpeed: 8
lives: 5
startTime: 30
correctAnswerBonusTime: 3
wrongAnswerPenaltyTime: 2
useOfflineTestData: 0
--- !u!1001 &2052974453
PrefabInstance:
......
......@@ -20,7 +20,7 @@ namespace com.al_arcade.cs
[SerializeField] protected CanvasGroup _optionsPanel, _feedbackGroup;
[SerializeField] protected UniText _progressText;
[SerializeField] protected UniText _hintText, _scoreText, _streakText , _scoreLbl;
[SerializeField] protected UniText _hintText, _scoreText, _streakText, _scoreLbl;
[SerializeField] protected UniText _feedbackText;
[SerializeField] protected Image _feedbackBg, _timerFill;
......@@ -53,10 +53,10 @@ namespace com.al_arcade.cs
void Start()
{
_pointImages = _pointsContainer.GetComponentsInChildren<Image>().ToList();
_speakerColor = _speaker.color;
// _speakerColor = _speaker.color;
_timerDefaultColor = _timerFill.color;
_speaker.GetComponent<Button>().onClick.AddListener(ToggleMusic);
// _speaker.GetComponent<Button>().onClick.AddListener(ToggleMusic);
_restartButton.onClick.AddListener(() =>
{
......
......@@ -21,9 +21,9 @@ MonoBehaviour:
m_DefaultRendererIndex: 0
m_RequireDepthTexture: 1
m_RequireOpaqueTexture: 1
m_OpaqueDownsampling: 1
m_SupportsTerrainHoles: 1
m_SupportsHDR: 1
m_OpaqueDownsampling: 0
m_SupportsTerrainHoles: 0
m_SupportsHDR: 0
m_HDRColorBufferPrecision: 0
m_MSAA: 1
m_RenderScale: 1
......@@ -63,7 +63,7 @@ MonoBehaviour:
m_ShadowDepthBias: 0.1
m_ShadowNormalBias: 0.5
m_AnyShadowsSupported: 1
m_SoftShadowsSupported: 1
m_SoftShadowsSupported: 0
m_ConservativeEnclosingSphere: 1
m_NumIterationsEnclosingSphere: 64
m_SoftShadowQuality: 3
......
......@@ -67,7 +67,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: f62c9c65cf3354c93be831c8bc075510, type: 3}
m_Name: ScreenSpaceAmbientOcclusion
m_EditorClassIdentifier:
m_Active: 1
m_Active: 0
m_Settings:
AOMethod: 0
Downsample: 0
......
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