TerrainProperties.gd 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. @tool
  2. extends ConfirmationDialog
  3. var category_icon := load("res://addons/better-terrain/icons/NonModifying.svg")
  4. const CATEGORY_CHECK_ID = &"category_check_id"
  5. var accepted := false
  6. var terrain_name : String:
  7. set(value): %NameEdit.text = value
  8. get: return %NameEdit.text
  9. var terrain_color : Color:
  10. set(value): %ColorPicker.color = value
  11. get: return %ColorPicker.color
  12. var terrain_icon : String:
  13. set(value): %IconEdit.text = value
  14. get: return %IconEdit.text
  15. var terrain_type : int:
  16. set(value):
  17. %TypeOption.selected = value
  18. _on_type_option_item_selected(value)
  19. get: return %TypeOption.selected
  20. var terrain_categories : Array: set = set_categories, get = get_categories
  21. # category is name, color, id
  22. func set_category_data(options: Array) -> void:
  23. if !options.is_empty():
  24. %CategoryLabel.show()
  25. %CategoryContainer.show()
  26. for o in options:
  27. var c = CheckBox.new()
  28. c.text = o.name
  29. c.icon = category_icon
  30. c.add_theme_color_override(&"icon_normal_color", o.color)
  31. c.add_theme_color_override(&"icon_disabled_color", Color(o.color, 0.4))
  32. c.add_theme_color_override(&"icon_focus_color", o.color)
  33. c.add_theme_color_override(&"icon_hover_color", o.color)
  34. c.add_theme_color_override(&"icon_hover_pressed_color", o.color)
  35. c.add_theme_color_override(&"icon_normal_color", o.color)
  36. c.add_theme_color_override(&"icon_pressed_color", o.color)
  37. c.set_meta(CATEGORY_CHECK_ID, o.id)
  38. %CategoryLayout.add_child(c)
  39. func set_categories(ids : Array):
  40. for c in %CategoryLayout.get_children():
  41. c.button_pressed = c.get_meta(CATEGORY_CHECK_ID) in ids
  42. func get_categories() -> Array:
  43. var result := []
  44. if terrain_type == BetterTerrain.TerrainType.CATEGORY:
  45. return result
  46. for c in %CategoryLayout.get_children():
  47. if c.button_pressed:
  48. result.push_back(c.get_meta(CATEGORY_CHECK_ID))
  49. return result
  50. func _on_confirmed() -> void:
  51. # confirm valid name
  52. if terrain_name.is_empty():
  53. var dialog := AcceptDialog.new()
  54. dialog.dialog_text = "Name cannot be empty"
  55. EditorInterface.popup_dialog_centered(dialog)
  56. await dialog.visibility_changed
  57. dialog.queue_free()
  58. return
  59. accepted = true
  60. hide()
  61. func _on_type_option_item_selected(index: int) -> void:
  62. var categories_available = (index != BetterTerrain.TerrainType.CATEGORY)
  63. for c in %CategoryLayout.get_children():
  64. c.disabled = !categories_available