@tool extends LineEdit class_name CustomLineEdit enum TYPE { INT, TEXT, FLOAT } @export var inputType : TYPE @export var step : float = 1 var oldValue : String = "" var value: get: return getTypedValue(text) func _init() -> 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) -> void: text = str(getTypedValue(str(value))) func getTypedValue(valueToType: String): match inputType: TYPE.INT: return int(valueToType) TYPE.FLOAT: return float(valueToType) _: return valueToType signal valueHasChanged(newValue)