riversong code showcase

This commit is contained in:
Daniele Marotta
2026-05-21 15:52:18 +02:00
commit 4c9eea1c02
462 changed files with 23406 additions and 0 deletions

View File

@@ -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);
}
}
}

View File

@@ -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;
}
}
}

View File

@@ -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");
}
}
}