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,13 @@
namespace DanieleMarotta.RiversongCodeShowcase
{
public enum EditToolValidationResult
{
Success,
BlockedTile,
CanOnlyBePlacedNearWater,
CanOnlyBePlacedOnFertileGround
}
}

View File

@@ -0,0 +1,56 @@
using Unity.Mathematics;
namespace DanieleMarotta.RiversongCodeShowcase
{
[Service(typeof(IEditToolValidatorService))]
public class EditToolValidatorSystem : GameSystem, IEditToolValidatorService
{
[InjectService]
private GameConfig _config;
[InjectService]
private World _world;
public EditToolValidatorSystem(IServiceLocator serviceLocator) : base(serviceLocator)
{
}
public EditToolValidationResult DoCommonValidation(TileRect rect, BlockReason blockReason)
{
foreach (var tile in TileRange.From(rect))
if (!DoCommonTileValidation(tile, blockReason))
return EditToolValidationResult.BlockedTile;
return EditToolValidationResult.Success;
}
private bool DoCommonTileValidation(int2 tile, BlockReason blockReason)
{
return _world.Contains(tile) && !_world.BlockMap.IsBlocked(tile, blockReason);
}
public EditToolValidationResult ValidateBuildingPlacementRules(TileRect rect, BuildingDefinition buildingDefinition)
{
if (buildingDefinition.NearWater)
{
var waterMap = _world.WaterMap;
foreach (var tile in TileRange.From(rect))
if (!waterMap.IsNearWater(tile))
return EditToolValidationResult.CanOnlyBePlacedNearWater;
}
if (buildingDefinition.RequiresFertileTile)
{
foreach (var tile in TileRange.From(rect))
{
var fertility = _world.Fertility.GetValue(tile);
if (fertility.MaxFertility > 0) return EditToolValidationResult.Success;
}
return EditToolValidationResult.CanOnlyBePlacedOnFertileGround;
}
return EditToolValidationResult.Success;
}
}
}

View File

@@ -0,0 +1,9 @@
namespace DanieleMarotta.RiversongCodeShowcase
{
public interface IEditToolValidatorService
{
EditToolValidationResult DoCommonValidation(TileRect rect, BlockReason blockReason);
public EditToolValidationResult ValidateBuildingPlacementRules(TileRect rect, BuildingDefinition buildingDefinition);
}
}