You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
2.7 KiB
101 lines
2.7 KiB
[Tool] |
|
public partial class TerrainEditingControls |
|
: VBoxContainer |
|
{ |
|
public (ToolMode , Button)[] ToolModeButtons { get; private set; } |
|
public (ToolShape, Button)[] ToolShapeButtons { get; private set; } |
|
public Button[] PaintTextureButtons { get; private set; } |
|
|
|
public Slider DrawSizeSlider { get; private set; } |
|
|
|
ToolMode _toolMode; |
|
ToolShape _toolShape; |
|
int _texture; |
|
|
|
public ToolMode ToolMode { get => _toolMode ; set => SetToolMode (value); } |
|
public ToolShape ToolShape { get => _toolShape; set => SetToolShape(value); } |
|
public int Texture { get => _texture ; set => SetTexture (value); } |
|
|
|
public int DrawSize { |
|
get => RoundToInt(-DrawSizeSlider?.Value ?? 1); |
|
set => DrawSizeSlider.Value = -value; |
|
} |
|
|
|
public override void _Ready() |
|
{ |
|
ToolModeButtons = [ |
|
(ToolMode.Height, GetNode<Button>("Height")), |
|
(ToolMode.Paint , GetNode<Button>("Paint" )), |
|
]; |
|
|
|
ToolShapeButtons = [ |
|
(ToolShape.Corner, GetNode<Button>("Corner")), |
|
(ToolShape.Circle, GetNode<Button>("Circle")), |
|
(ToolShape.Square, GetNode<Button>("Square")), |
|
]; |
|
|
|
PaintTextureButtons = [ |
|
GetNode<Button>("Grass"), |
|
GetNode<Button>("Dirt"), |
|
GetNode<Button>("Rock"), |
|
GetNode<Button>("Sand"), |
|
]; |
|
|
|
foreach (var (mode, button) in ToolModeButtons) |
|
button.Pressed += () => SetToolMode(mode); |
|
foreach (var (shape, button) in ToolShapeButtons) |
|
button.Pressed += () => SetToolShape(shape); |
|
foreach (var (i, button) in PaintTextureButtons.Select((b, i) => (i, b))) |
|
button.Pressed += () => SetTexture(i + 1); |
|
|
|
var drawSizeLabel = GetNode<Label>("SizeLabel"); |
|
DrawSizeSlider = GetNode<Slider>("SizeSlider"); |
|
DrawSizeSlider.ValueChanged += (_) => drawSizeLabel.Text = $"{DrawSize}"; |
|
|
|
SetToolMode(ToolMode.Height); |
|
SetToolShape(ToolShape.Circle); |
|
SetTexture(1); |
|
|
|
OnEditingReady(); |
|
} |
|
|
|
|
|
void SetToolMode(ToolMode value) |
|
{ |
|
foreach (var (mode, button) in ToolModeButtons) |
|
button.Flat = button.ButtonPressed = value != mode; |
|
foreach (var button in PaintTextureButtons) |
|
button.Disabled = value != ToolMode.Paint; |
|
_toolMode = value; |
|
} |
|
|
|
void SetToolShape(ToolShape value) |
|
{ |
|
foreach (var (shape, button) in ToolShapeButtons) |
|
button.Flat = button.ButtonPressed = value != shape; |
|
DrawSizeSlider.Editable = value != ToolShape.Corner; |
|
_toolShape = value; |
|
} |
|
|
|
void SetTexture(int value) |
|
{ |
|
if ((value < 1) || (value > PaintTextureButtons.Length)) |
|
throw new ArgumentOutOfRangeException(nameof(value)); |
|
foreach (var (i, button) in PaintTextureButtons.Select((b, i) => (i, b))) |
|
button.Flat = button.ButtonPressed = value != i + 1; |
|
_texture = value; |
|
} |
|
} |
|
|
|
public enum ToolMode |
|
{ |
|
Height, |
|
Paint, |
|
} |
|
|
|
public enum ToolShape |
|
{ |
|
Corner, |
|
Circle, |
|
Square, |
|
}
|
|
|