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

71 lines
2.4 KiB
C#

using System;
using Cysharp.Threading.Tasks;
namespace DanieleMarotta.RiversongCodeShowcase
{
public class MainToolbarUIController : UIControllerSystem<MainToolbarUIView>, IDisposable
{
[InjectService]
private IEditingService _editingService;
private MainToolbarModel _model;
public MainToolbarUIController(IServiceLocator serviceLocator) : base(serviceLocator)
{
}
protected override MainToolbarUIView View => UIRoot.GetView<MainToolbarUIView>();
public override async UniTask InitializeAsync()
{
await base.InitializeAsync();
_model = new MainToolbarModel { IsBuildMenuOpen = true };
View.SetModel(_model);
View.BuildMenuButtonClicked += OnBuildMenuButtonClicked;
View.DeleteToolButtonClicked += OnDeleteToolButtonClicked;
View.RoadToolButtonClicked += OnRoadToolButtonClicked;
_editingService.ActiveToolChanged += OnActiveToolChanged;
var buildMenu = UIRoot.GetView<BuildMenuUIView>();
buildMenu.OpenedOrClosed += OnBuildMenuOpenedOrClosed;
}
public void Dispose()
{
View.BuildMenuButtonClicked -= OnBuildMenuButtonClicked;
View.DeleteToolButtonClicked -= OnDeleteToolButtonClicked;
View.RoadToolButtonClicked -= OnRoadToolButtonClicked;
_editingService.ActiveToolChanged -= OnActiveToolChanged;
UIRoot.GetView<BuildMenuUIView>().OpenedOrClosed -= OnBuildMenuOpenedOrClosed;
}
private void OnBuildMenuButtonClicked()
{
UIRoot.GetView<BuildMenuUIView>().Toggle(true);
}
private void OnBuildMenuOpenedOrClosed(bool isOpen)
{
_model.IsBuildMenuOpen = isOpen;
}
private void OnDeleteToolButtonClicked()
{
_editingService.ActivateTool(_editingService.EditingState.DeleteTool);
}
private void OnRoadToolButtonClicked()
{
_editingService.ActivateTool(_editingService.EditingState.RoadTool);
}
private void OnActiveToolChanged(EditTool tool)
{
var editingState = _editingService.EditingState;
_model.IsDeleteToolActive = editingState.ActiveTool == editingState.DeleteTool;
_model.IsRoadToolActive = editingState.ActiveTool == editingState.RoadTool;
}
}
}