using System; using Cysharp.Threading.Tasks; namespace DanieleMarotta.RiversongCodeShowcase { public class MainToolbarUIController : UIControllerSystem, IDisposable { [InjectService] private IEditingService _editingService; private MainToolbarModel _model; public MainToolbarUIController(IServiceLocator serviceLocator) : base(serviceLocator) { } protected override MainToolbarUIView View => UIRoot.GetView(); 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(); buildMenu.OpenedOrClosed += OnBuildMenuOpenedOrClosed; } public void Dispose() { View.BuildMenuButtonClicked -= OnBuildMenuButtonClicked; View.DeleteToolButtonClicked -= OnDeleteToolButtonClicked; View.RoadToolButtonClicked -= OnRoadToolButtonClicked; _editingService.ActiveToolChanged -= OnActiveToolChanged; UIRoot.GetView().OpenedOrClosed -= OnBuildMenuOpenedOrClosed; } private void OnBuildMenuButtonClicked() { UIRoot.GetView().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; } } }