TowerDefense/addons/LevelEditor/UI/CustomLineEdit.gd
2025-09-02 00:22:49 +02:00

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