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,81 @@
using System;
using Cysharp.Threading.Tasks;
using UnityEngine.InputSystem;
using UnityEngine.UIElements;
namespace DanieleMarotta.RiversongCodeShowcase
{
public class BuildingPlacementTooltipController : UIControllerSystem<BuildingPlacementTooltipUIView>, IUpdatable
{
[InjectService]
private IEditingService _editingService;
[InjectService]
private IPointerService _pointerService;
[InjectService]
private TextFormatHelper _textFormatHelper;
public BuildingPlacementTooltipController(IServiceLocator serviceLocator) : base(serviceLocator)
{
}
protected override BuildingPlacementTooltipUIView View => UIRoot.GetView<BuildingPlacementTooltipUIView>();
public override async UniTask InitializeAsync()
{
await base.InitializeAsync();
View.RootElement.SetPickingModeRecursive(PickingMode.Ignore);
}
public void Update()
{
if (_pointerService.IsPointerOverUI)
{
View.Clear();
return;
}
var editingState = _editingService.EditingState;
if (editingState.ActiveTool != editingState.BuildTool)
{
View.Clear();
return;
}
var validation = editingState.BuildTool.GetLastValidationResult();
if (validation == EditToolValidationResult.Success)
{
View.Clear();
return;
}
var buildingName = _textFormatHelper.FormatImportantText(editingState.BuildTool.Building.BuildingName);
var errorFormat = GetFailedValidationFormat(validation);
var text = string.Format(errorFormat, buildingName);
View.SetText(text);
View.RootElement.SetAbsoluteScreenPosition(Mouse.current.position.ReadValue());
}
private string GetFailedValidationFormat(EditToolValidationResult validation)
{
switch (validation)
{
case EditToolValidationResult.BlockedTile:
return "There is an obstacle here";
case EditToolValidationResult.CanOnlyBePlacedNearWater:
return "The {0} must be placed near water";
case EditToolValidationResult.CanOnlyBePlacedOnFertileGround:
return "The {0} must be placed on fertile ground";
default:
throw new ArgumentOutOfRangeException();
}
}
}
}

View File

@@ -0,0 +1,31 @@
using Cysharp.Threading.Tasks;
using UnityEngine.UIElements;
namespace DanieleMarotta.RiversongCodeShowcase
{
[UIView("building-placement-tooltip")]
public class BuildingPlacementTooltipUIView : UIView
{
private Label _tooltipText;
public override UniTask InitializeAsync(UIService uiService, VisualElement rootElement)
{
base.InitializeAsync(uiService, rootElement);
_tooltipText = rootElement.Q<Label>();
return UniTask.CompletedTask;
}
public void SetText(string text)
{
_tooltipText.text = text;
Show(true, true);
}
public void Clear()
{
Show(false, true);
}
}
}