Update Audio
This commit is contained in:
@@ -19,6 +19,9 @@ namespace Hallucinate.UI
|
||||
|
||||
// Đảm bảo ban đầu ẩn hết
|
||||
Hide();
|
||||
|
||||
// Tự động gán âm thanh phản hồi cho các UI elements
|
||||
UIAudioHelper.BindFeedback(root);
|
||||
}
|
||||
|
||||
public virtual void Show()
|
||||
|
||||
@@ -10,6 +10,11 @@ namespace Hallucinate.UI
|
||||
private Label _rank;
|
||||
private ProgressBar _winRateBar;
|
||||
private Label _winRateText;
|
||||
private Button _logoutBtn;
|
||||
|
||||
// Future authentication schema placeholders
|
||||
private string _googleIdPlaceholder = "";
|
||||
private string _avatarUrlPlaceholder = "";
|
||||
|
||||
public override void Initialize(VisualElement uxmlRoot, UIManager manager)
|
||||
{
|
||||
@@ -19,19 +24,60 @@ namespace Hallucinate.UI
|
||||
_rank = root.Q<Label>("Rank");
|
||||
_winRateBar = root.Q<ProgressBar>("WinRateBar");
|
||||
_winRateText = root.Q<Label>("WinRateText");
|
||||
_logoutBtn = root.Q<Button>("LogoutBtn");
|
||||
|
||||
root.Q<Button>("BackBtn").clicked += async () => await uiManager.Pop();
|
||||
|
||||
|
||||
if (_logoutBtn != null)
|
||||
{
|
||||
_logoutBtn.clicked += Logout;
|
||||
}
|
||||
|
||||
LoadProfileData();
|
||||
}
|
||||
|
||||
public override async Task PlayTransitionIn()
|
||||
{
|
||||
LoadProfileData(); // Refresh data every time we show the profile
|
||||
await base.PlayTransitionIn();
|
||||
}
|
||||
|
||||
private void LoadProfileData()
|
||||
{
|
||||
// Dummy data for now
|
||||
_username.text = "GamerPro_2026";
|
||||
// Load saved username or fallback
|
||||
string savedName = PlayerPrefs.GetString("Username", "Unknown Player");
|
||||
_username.text = savedName.ToUpper();
|
||||
|
||||
// Future schema mockup (Google Sign-In)
|
||||
_googleIdPlaceholder = PlayerPrefs.GetString("GoogleID", "NOT_LINKED");
|
||||
_avatarUrlPlaceholder = PlayerPrefs.GetString("AvatarURL", "");
|
||||
|
||||
// Mock progression data for now
|
||||
_rank.text = "DIAMOND II";
|
||||
_winRateBar.value = 72;
|
||||
_winRateText.text = "72%";
|
||||
}
|
||||
|
||||
private async void Logout()
|
||||
{
|
||||
// Clear local save data
|
||||
PlayerPrefs.DeleteKey("Username");
|
||||
PlayerPrefs.DeleteKey("GoogleID");
|
||||
PlayerPrefs.DeleteKey("AvatarURL");
|
||||
PlayerPrefs.Save();
|
||||
|
||||
Debug.Log("[Profile] User logged out.");
|
||||
|
||||
// Disconnect from network if currently running
|
||||
var runner = Object.FindFirstObjectByType<Fusion.NetworkRunner>();
|
||||
if (runner != null && runner.IsRunning)
|
||||
{
|
||||
await runner.Shutdown();
|
||||
}
|
||||
|
||||
// Redirect to Login Screen
|
||||
await uiManager.Push<LoginController>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
111
Assets/Scripts/UI/UIAudioHelper.cs
Normal file
111
Assets/Scripts/UI/UIAudioHelper.cs
Normal file
@@ -0,0 +1,111 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
using Hallucinate.Audio;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Hallucinate.UI
|
||||
{
|
||||
public static class UIAudioHelper
|
||||
{
|
||||
public static void BindFeedback(VisualElement root)
|
||||
{
|
||||
if (root == null) return;
|
||||
|
||||
// Bind Buttons (Click & Hover)
|
||||
var buttons = root.Query<Button>().ToList();
|
||||
foreach (var btn in buttons)
|
||||
{
|
||||
btn.RegisterCallback<PointerEnterEvent>(OnButtonHover);
|
||||
btn.RegisterCallback<ClickEvent>(OnButtonClick);
|
||||
}
|
||||
|
||||
// Bind Toggles
|
||||
var toggles = root.Query<Toggle>().ToList();
|
||||
foreach (var tgl in toggles)
|
||||
{
|
||||
tgl.RegisterValueChangedCallback(OnToggleChanged);
|
||||
}
|
||||
|
||||
// Bind TextFields (Focus & Typing)
|
||||
var textFields = root.Query<TextField>().ToList();
|
||||
foreach (var tf in textFields)
|
||||
{
|
||||
tf.RegisterCallback<FocusEvent>(OnTextFieldFocus);
|
||||
tf.RegisterCallback<KeyDownEvent>(OnTextFieldKeyDown, TrickleDown.TrickleDown);
|
||||
}
|
||||
}
|
||||
|
||||
private static void OnButtonHover(PointerEnterEvent evt)
|
||||
{
|
||||
var target = evt.target as VisualElement;
|
||||
string sound = "menuclick"; // Default hover
|
||||
|
||||
string name = target.name.ToLower();
|
||||
if (name.Contains("back")) sound = "menu-back-hover";
|
||||
else if (name.Contains("play")) sound = "menu-play-hover";
|
||||
else if (name.Contains("option") || name.Contains("setting")) sound = "menu-options-hover";
|
||||
else if (name.Contains("exit") || name.Contains("quit")) sound = "menu-exit-hover";
|
||||
|
||||
AudioManager.PlayGlobal(sound, 0.5f, 1.05f);
|
||||
}
|
||||
|
||||
private static void OnButtonClick(ClickEvent evt)
|
||||
{
|
||||
var target = evt.target as VisualElement;
|
||||
string sound = "menuclick"; // Default click
|
||||
|
||||
string name = target.name.ToLower();
|
||||
if (name.Contains("back")) sound = "menu-back-click";
|
||||
else if (name.Contains("close")) sound = "click-close";
|
||||
else if (name.Contains("confirm") || name.Contains("start") || name.Contains("create")) sound = "click-short-confirm";
|
||||
else if (name.Contains("play")) sound = "menu-play-click";
|
||||
else if (name.Contains("option") || name.Contains("setting")) sound = "menu-options-click";
|
||||
else if (name.Contains("exit") || name.Contains("quit")) sound = "menu-exit-click";
|
||||
else if (name.Contains("retry") || name.Contains("restart")) sound = "pause-retry-click";
|
||||
|
||||
float randomPitch = Random.Range(0.98f, 1.02f);
|
||||
AudioManager.PlayGlobal(sound, 1f, randomPitch);
|
||||
}
|
||||
|
||||
private static void OnToggleChanged(ChangeEvent<bool> evt)
|
||||
{
|
||||
string sound = evt.newValue ? "check-on" : "check-off";
|
||||
AudioManager.PlayGlobal(sound, 0.8f);
|
||||
}
|
||||
|
||||
private static void OnTextFieldFocus(FocusEvent evt)
|
||||
{
|
||||
AudioManager.PlayGlobal("UI_Focus", 0.6f);
|
||||
}
|
||||
|
||||
private static void OnTextFieldKeyDown(KeyDownEvent evt)
|
||||
{
|
||||
// Osu style typing feedback
|
||||
switch (evt.keyCode)
|
||||
{
|
||||
case KeyCode.Return:
|
||||
case KeyCode.KeypadEnter:
|
||||
AudioManager.PlayGlobal("key-confirm", 0.8f);
|
||||
break;
|
||||
case KeyCode.Backspace:
|
||||
case KeyCode.Delete:
|
||||
AudioManager.PlayGlobal("key-delete", 0.7f);
|
||||
break;
|
||||
case KeyCode.Space:
|
||||
case KeyCode.CapsLock:
|
||||
AudioManager.PlayGlobal("key-caps", 0.7f);
|
||||
break;
|
||||
case KeyCode.UpArrow:
|
||||
case KeyCode.DownArrow:
|
||||
case KeyCode.LeftArrow:
|
||||
case KeyCode.RightArrow:
|
||||
AudioManager.PlayGlobal("key-movement", 0.6f);
|
||||
break;
|
||||
default:
|
||||
// Play random variation for normal keys (key-press-1 to 4)
|
||||
AudioManager.PlayRandomGlobal("key-press", 4, 0.5f, Random.Range(0.95f, 1.1f));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/Scripts/UI/UIAudioHelper.cs.meta
Normal file
2
Assets/Scripts/UI/UIAudioHelper.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 28373d86c046d8248b3788daaa019217
|
||||
Reference in New Issue
Block a user