UI/TerraformPanel.razor
@using HC3.Terraforming
@using HC3.Terrain
@using Sandbox;
@using Sandbox.UI;
@inherits BaseCanvas
@namespace HC3
<root class="slim">
<div class="canvas">
<row>
@foreach ( var mode in Terraformer?.AllModes ?? Enumerable.Empty<TerraformMode>() )
{
<button
onclick=@( () => SelectMode( mode ) )
class="@(Terraformer?.CurrentMode == mode ? "selected" : "")"
tooltip="@mode.Description">
<icon>
@mode.Icon
</icon>
@mode.Title
</button>
}
</row>
<row>
@if ( Palette?.Materials is { } materials )
{
for ( var index = 0; index < materials.Count; ++index )
{
var indexCopy = index;
var material = materials[index];
<button onclick=@( () => SelectMaterial( indexCopy ) )
class="material @(Terraformer?.MaterialIndex == indexCopy ? "selected" : "")"
tooltip="@material.Name"
style="background-color: @( material.Color.Hex )">
</button>
}
}
</row>
</div>
</root>
@code
{
public Terraformer Terraformer => Terraformer.Instance;
public TerrainPalette Palette => Scene.Get<TerrainMesh>()?.Palette;
void SelectMode(TerraformMode mode)
{
if (Terraformer is not { IsValid: true } terraformer) return;
if (terraformer.CurrentMode == mode)
{
terraformer.CurrentMode = null;
CloseCanvas( "TerraformCanvas" );
return;
}
terraformer.CurrentMode = mode;
}
void SelectMaterial( int index )
{
if (Terraformer is not { IsValid: true } terraformer) return;
if ( terraformer.MaterialIndex == index )
{
terraformer.MaterialIndex = null;
}
else
{
terraformer.MaterialIndex = index;
}
}
protected override int BuildHash() => System.HashCode.Combine(base.BuildHash(), Terraformer?.CurrentMode, Terraformer?.MaterialIndex);
protected override void OnTreeFirstBuilt()
{
base.OnTreeFirstBuilt();
RegisterAs( "TerraformCanvas" );
}
protected override void OnOpen()
{
Terraformer.Activate();
}
protected override void OnClose()
{
Terraformer.Deactivate();
}
}