input.gd 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. @tool
  2. class_name ModToolInterfaceInput
  3. extends HBoxContainer
  4. signal value_changed(new_value, input_node)
  5. @export var is_required: bool:
  6. set = set_is_required
  7. @export var key: String
  8. @export var label_text: String:
  9. set = set_label_text
  10. @export var editor_icon_name: String = "NodeWarning"
  11. @export var hint_text: String:
  12. set = set_hint_text
  13. var is_valid := true: set = set_is_valid
  14. func _ready() -> void:
  15. # Set up warning icons to show if a field is invalid
  16. set_editor_icon(editor_icon_name)
  17. func set_is_required(required: bool) -> void:
  18. is_required = required
  19. set_label_text(label_text)
  20. func set_is_valid(new_is_valid: bool) -> void:
  21. is_valid = new_is_valid
  22. show_error_if_not(is_valid)
  23. func set_label_text(new_text: String) -> void:
  24. label_text = new_text
  25. $Label.text = new_text if is_required else new_text + " (optional)"
  26. func set_hint_text(new_text: String) -> void:
  27. hint_text = new_text
  28. tooltip_text = new_text
  29. mouse_default_cursor_shape = CURSOR_ARROW if new_text == "" else CURSOR_HELP
  30. func set_editor_icon(icon_name: String) -> void:
  31. var mod_tool_store: ModToolStore = get_node_or_null("/root/ModToolStore")
  32. if icon_name and mod_tool_store:
  33. set_error_icon(mod_tool_store.editor_base_control.get_theme_icon(icon_name, "EditorIcons"))
  34. func set_error_icon(icon: Texture2D) -> void:
  35. $"%ErrorIcon".texture = icon
  36. func show_error_if_not(condition: bool) -> void:
  37. if not condition:
  38. $"%ErrorIcon".self_modulate = Color.WHITE
  39. else:
  40. $"%ErrorIcon".self_modulate = Color.TRANSPARENT
  41. func validate(_condition: bool) -> bool:
  42. printerr("Implement a validation method")
  43. return false