TerrainPlugin.gd 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. @tool
  2. extends EditorPlugin
  3. const AUTOLOAD_NAME = "BetterTerrain"
  4. var dock : Control
  5. var button : Button
  6. func _enter_tree() -> void:
  7. # Wait for autoloads to register
  8. await get_tree().process_frame
  9. if !get_tree().root.get_node_or_null(^"BetterTerrain"):
  10. # Autoload wasn't present on plugin init, which means plugin won't have loaded correctly
  11. add_autoload_singleton(AUTOLOAD_NAME, "res://addons/better-terrain/BetterTerrain.gd")
  12. ProjectSettings.save()
  13. var confirm = ConfirmationDialog.new()
  14. confirm.dialog_text = "The editor needs to be restarted for Better Terrain to load correctly. Restart now? Note: Unsaved changes will be lost."
  15. confirm.confirmed.connect(func():
  16. OS.set_restart_on_exit(true, ["-e"])
  17. get_tree().quit()
  18. )
  19. get_editor_interface().popup_dialog_centered(confirm)
  20. dock = load("res://addons/better-terrain/editor/Dock.tscn").instantiate()
  21. dock.update_overlay.connect(self.update_overlays)
  22. get_editor_interface().get_editor_main_screen().mouse_exited.connect(dock.canvas_mouse_exit)
  23. dock.undo_manager = get_undo_redo()
  24. button = add_control_to_bottom_panel(dock, "Terrain")
  25. button.toggled.connect(dock.about_to_be_visible)
  26. dock.force_show_terrains.connect(button.toggled.emit.bind(true))
  27. button.visible = false
  28. func _exit_tree() -> void:
  29. remove_control_from_bottom_panel(dock)
  30. dock.queue_free()
  31. func _handles(object) -> bool:
  32. return object is TileMapLayer or object is TileSet
  33. func _make_visible(visible) -> void:
  34. button.visible = visible
  35. func _edit(object) -> void:
  36. var new_tileset : TileSet = null
  37. if object is TileMapLayer:
  38. dock.tilemap = object
  39. new_tileset = object.tile_set
  40. if object is TileSet:
  41. new_tileset = object
  42. if dock.tileset != new_tileset:
  43. dock.tiles_about_to_change()
  44. dock.tileset = new_tileset
  45. dock.tiles_changed()
  46. func _forward_canvas_draw_over_viewport(overlay: Control) -> void:
  47. if dock.visible:
  48. dock.canvas_draw(overlay)
  49. func _forward_canvas_gui_input(event: InputEvent) -> bool:
  50. if !dock.visible:
  51. return false
  52. return dock.canvas_input(event)