riversong code showcase
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
namespace DanieleMarotta.RiversongCodeShowcase
|
||||
{
|
||||
public class MainToolbarModel : UIModel
|
||||
{
|
||||
private bool _isBuildMenuOpen;
|
||||
|
||||
private bool _isRoadToolActive;
|
||||
|
||||
private bool _isDeleteToolActive;
|
||||
|
||||
public bool IsBuildMenuOpen
|
||||
{
|
||||
get => _isBuildMenuOpen;
|
||||
set => SetProperty(ref _isBuildMenuOpen, value);
|
||||
}
|
||||
|
||||
public bool IsDeleteToolActive
|
||||
{
|
||||
get => _isDeleteToolActive;
|
||||
set => SetProperty(ref _isDeleteToolActive, value);
|
||||
}
|
||||
|
||||
public bool IsRoadToolActive
|
||||
{
|
||||
get => _isRoadToolActive;
|
||||
set => SetProperty(ref _isRoadToolActive, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
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");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user