Files
riversong-code-showcase/Source/Riversong/Game/UI/Panels/SpeedControlsPanel/SpeedControlsPanelUIView.cs
2026-05-21 16:04:49 +02:00

77 lines
2.4 KiB
C#

using System;
using Cysharp.Threading.Tasks;
using UnityEngine.UIElements;
namespace DanieleMarotta.RiversongCodeShowcase
{
[UIView("speed-controls-panel")]
public class SpeedControlsPanelUIView : UIView<SpeedControlsPanelModel>
{
private VisualElement _normalSpeedButton;
private VisualElement _fastSpeedButton;
private VisualElement _veryFastSpeedButton;
public event Action<int> SpeedChanged;
public override UniTask InitializeAsync(UIService uiService, VisualElement rootElement)
{
base.InitializeAsync(uiService, rootElement);
_normalSpeedButton = rootElement.Q(className: "speed-controls-panel__normal-speed");
_fastSpeedButton = rootElement.Q(className: "speed-controls-panel__fast-speed");
_veryFastSpeedButton = rootElement.Q(className: "speed-controls-panel__very-fast-speed");
_normalSpeedButton.RegisterCallback<ClickEvent>(OnNormalSpeedClick);
_fastSpeedButton.RegisterCallback<ClickEvent>(OnFastSpeedClick);
_veryFastSpeedButton.RegisterCallback<ClickEvent>(OnVeryFastSpeedClick);
return UniTask.CompletedTask;
}
protected override void OnNewModel(SpeedControlsPanelModel model)
{
base.OnNewModel(model);
UpdateSelected(model.SpeedLevel);
}
protected override void OnModelPropertyChanged(object sender, BindablePropertyChangedEventArgs e)
{
base.OnModelPropertyChanged(sender, e);
UpdateSelected(Model.SpeedLevel);
}
private void OnNormalSpeedClick(ClickEvent evt)
{
SpeedChanged?.Invoke(0);
}
private void OnFastSpeedClick(ClickEvent evt)
{
SpeedChanged?.Invoke(1);
}
private void OnVeryFastSpeedClick(ClickEvent evt)
{
SpeedChanged?.Invoke(2);
}
public void UpdateSelected(int speedLevel)
{
UpdateSelected(_normalSpeedButton, speedLevel == 0);
UpdateSelected(_fastSpeedButton, speedLevel == 1);
UpdateSelected(_veryFastSpeedButton, speedLevel == 2);
}
private static void UpdateSelected(VisualElement element, bool isSelected)
{
if (isSelected)
element.AddToClassList("selected");
else
element.RemoveFromClassList("selected");
}
}
}