51 lines
1.1 KiB
GDScript
51 lines
1.1 KiB
GDScript
@tool
|
|
extends LineEdit
|
|
class_name CustomLineEdit
|
|
|
|
signal valueHasChanged(newValue : Variant)
|
|
|
|
enum TYPE { INT, TEXT, FLOAT }
|
|
|
|
@export var inputType : TYPE
|
|
@export var step : float = 1
|
|
var oldValue : String = ""
|
|
|
|
var value : Variant :
|
|
get:
|
|
return getTypedValue(text)
|
|
|
|
|
|
func _ready() -> void:
|
|
text_changed.connect(valueUpdated)
|
|
|
|
|
|
func _input(event : InputEvent) -> void:
|
|
if !has_focus() || event is not InputEventKey || !event.pressed:
|
|
return
|
|
|
|
processKeyInput(event)
|
|
|
|
|
|
func processKeyInput(event : InputEventKey) -> void:
|
|
if inputType in [TYPE.INT, TYPE.FLOAT]:
|
|
if event.keycode == KEY_UP:
|
|
text = str(getTypedValue(str(value + step)))
|
|
valueUpdated(text)
|
|
elif event.keycode == KEY_DOWN:
|
|
text = str(getTypedValue(str(value - step)))
|
|
valueUpdated(text)
|
|
|
|
|
|
func valueUpdated(newText : String) -> void:
|
|
valueHasChanged.emit(value)
|
|
|
|
|
|
func setValue(value : Variant) -> void:
|
|
text = str(getTypedValue(str(value)))
|
|
|
|
|
|
func getTypedValue(valueToType: String):
|
|
match inputType:
|
|
TYPE.INT: return int(valueToType)
|
|
TYPE.FLOAT: return float(valueToType)
|
|
_: return valueToType
|