63 lines
1.5 KiB
C#
63 lines
1.5 KiB
C#
|
using Godot;
|
||
|
using System;
|
||
|
|
||
|
namespace BITKit;
|
||
|
#if TOOLS
|
||
|
using Godot;
|
||
|
|
||
|
[Tool]
|
||
|
public partial class RandomIntEditor : EditorProperty
|
||
|
{
|
||
|
// The main control for editing the property.
|
||
|
private Button _propertyControl = new Button();
|
||
|
// An internal value of the property.
|
||
|
private int _currentValue = 0;
|
||
|
// A guard against internal changes when the property is updated.
|
||
|
private bool _updating = false;
|
||
|
|
||
|
public RandomIntEditor()
|
||
|
{
|
||
|
// Add the control as a direct child of EditorProperty node.
|
||
|
AddChild(_propertyControl);
|
||
|
// Make sure the control is able to retain the focus.
|
||
|
AddFocusable(_propertyControl);
|
||
|
// Setup the initial state and connect to the signal to track changes.
|
||
|
RefreshControlText();
|
||
|
//_propertyControl.Connect("pressed", this, nameof(OnButtonPressed));
|
||
|
}
|
||
|
|
||
|
private void OnButtonPressed()
|
||
|
{
|
||
|
// Ignore the signal if the property is currently being updated.
|
||
|
if (_updating)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// Generate a new random integer between 0 and 99.
|
||
|
_currentValue = (int)GD.Randi() % 100;
|
||
|
RefreshControlText();
|
||
|
EmitChanged(GetEditedProperty(), _currentValue);
|
||
|
}
|
||
|
public override void _UpdateProperty()
|
||
|
{
|
||
|
// Read the current value from the property.
|
||
|
var newValue = (int)GetEditedObject().Get(GetEditedProperty());
|
||
|
if (newValue == _currentValue)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// Update the control with the new value.
|
||
|
_updating = true;
|
||
|
_currentValue = newValue;
|
||
|
RefreshControlText();
|
||
|
_updating = false;
|
||
|
}
|
||
|
|
||
|
private void RefreshControlText()
|
||
|
{
|
||
|
_propertyControl.Text = $"Value: {_currentValue}";
|
||
|
}
|
||
|
}
|
||
|
#endif
|