112 lines
4.3 KiB
C#
112 lines
4.3 KiB
C#
|
|
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;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|