Files
BABA_YAGA/Assets/Scripts/UI/UIAudioHelper.cs

112 lines
4.3 KiB
C#
Raw Permalink Normal View History

2026-04-30 17:47:29 +07:00
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;
}
}
}
}