Files
2026-05-21 16:04:49 +02:00

74 lines
2.2 KiB
C#

using System;
using Cysharp.Threading.Tasks;
using UnityEngine.UIElements;
namespace DanieleMarotta.RiversongCodeShowcase
{
[UIView("main-toolbar")]
public class MainToolbarUIView : UIView<MainToolbarModel>
{
private Button _deleteToolButton;
private Button _buildMenuButton;
private Button _roadToolButton;
public event Action BuildMenuButtonClicked
{
add => _buildMenuButton.clicked += value;
remove => _buildMenuButton.clicked -= value;
}
public event Action DeleteToolButtonClicked
{
add => _deleteToolButton.clicked += value;
remove => _deleteToolButton.clicked -= value;
}
public event Action RoadToolButtonClicked
{
add => _roadToolButton.clicked += value;
remove => _roadToolButton.clicked -= value;
}
public override UniTask InitializeAsync(UIService uiService, VisualElement rootElement)
{
base.InitializeAsync(uiService, rootElement);
_buildMenuButton = rootElement.Q<Button>(className: "main-toolbar__build-menu-button");
_deleteToolButton = rootElement.Q<Button>(className: "main-toolbar__delete-tool-button");
_roadToolButton = rootElement.Q<Button>(className: "main-toolbar__road-tool-button");
return UniTask.CompletedTask;
}
protected override void OnNewModel(MainToolbarModel model)
{
base.OnNewModel(model);
UpdateButtons();
}
protected override void OnModelPropertyChanged(object sender, BindablePropertyChangedEventArgs e)
{
base.OnModelPropertyChanged(sender, e);
UpdateButtons();
}
private void UpdateButtons()
{
UpdateButton(Model.IsBuildMenuOpen, _buildMenuButton);
UpdateButton(Model.IsDeleteToolActive, _deleteToolButton);
UpdateButton(Model.IsRoadToolActive, _roadToolButton);
}
private void UpdateButton(bool isSelected, VisualElement element)
{
if (isSelected)
element.AddToClassList("selected");
else
element.RemoveFromClassList("selected");
}
}
}