Files
project-hood/addons/TileMapDual/plugin.gd

63 lines
2.3 KiB
GDScript

@tool
class_name TileMapDualEditorPlugin
extends EditorPlugin
static var instance: TileMapDualEditorPlugin = null
# TODO: create a message queue that groups warnings, errors, and messages into categories
# so that we don't get 300 lines of the same warnings pushed to console every time we undo/redo
func _enter_tree() -> void:
# assign singleton instance
instance = self
# register custom nodes
add_custom_type("TileMapDual", "TileMapLayer", preload("TileMapDual.gd"), preload("TileMapDual.svg"))
add_custom_type("CursorDual", "Sprite2D", preload("CursorDual.gd"), preload("CursorDual.svg"))
add_custom_type("TileMapDualLegacy", "TileMapLayer", preload("TileMapDualLegacy.gd"), preload("TileMapDual.svg"))
# load editor-only functions
TileMapDual.autotile = autotile
TileMapDual.popup = popup
# finish
print("plugin TileMapDual loaded")
func _exit_tree() -> void:
# disable editor-only functions
TileMapDual.popup = TileMapDual._editor_only.bind('popup').unbind(2)
TileMapDual.autotile = TileMapDual._editor_only.bind('autotile').unbind(3)
# remove custom nodes
remove_custom_type("TileMapDualLegacy")
remove_custom_type("CursorDual")
remove_custom_type("TileMapDual")
# unassign singleton instance
instance = null
# finish
print("plugin TileMapDual unloaded")
# HACK: functions that reference EditorPlugin, directly or indirectly, cannot be in the publicly exported scripts
# or else they simply won't work when exported
## Shows a popup with a title bar, a message, and an "Ok" button in the middle of the screen.
func popup(title: String, message: String) -> void:
var popup := AcceptDialog.new()
get_editor_interface().get_base_control().add_child(popup)
popup.name = 'TileMapDualPopup'
popup.title = title
popup.dialog_text = message
popup.popup_centered()
await popup.confirmed
popup.queue_free()
## Automatically generate terrains when the atlas is initialized.
func autotile(source_id: int, atlas: TileSetAtlasSource, tile_set: TileSet):
print_stack()
var urm := get_undo_redo()
urm.create_action("Create tiles in non-transparent texture regions", UndoRedo.MergeMode.MERGE_ALL, self, true)
# NOTE: commit_action() is called immediately after.
# NOTE: Atlas is guaranteed to have only been auto-generated with no extra peering bit information.
TerrainPreset.write_default_preset(urm, tile_set, atlas)
urm.commit_action()