58 lines
2.1 KiB
GDScript
58 lines
2.1 KiB
GDScript
@tool
|
|
class_name CsgToolkit extends EditorPlugin
|
|
@onready var config: CsgTkConfig:
|
|
get:
|
|
return get_tree().root.get_node_or_null(AUTOLOAD_NAME) as CsgTkConfig
|
|
|
|
var sidebar: CSGSideToolkitBar
|
|
var topbar: CSGTopToolkitBar
|
|
var shortcut_manager: CsgShortcutManager
|
|
|
|
const AUTOLOAD_NAME = "CsgToolkitAutoload"
|
|
static var csg_plugin_path
|
|
static var undo_manager: EditorUndoRedoManager
|
|
|
|
func _enter_tree():
|
|
# Config
|
|
add_autoload_singleton(AUTOLOAD_NAME, "res://addons/csg_toolkit/scripts/csg_toolkit_config.gd")
|
|
csg_plugin_path = get_path()
|
|
undo_manager = get_undo_redo()
|
|
|
|
# Nodes
|
|
add_custom_type("CSGRepeater3D", "CSGCombiner3D", preload("res://addons/csg_toolkit/scripts/csg_repeater_3d.gd"), null)
|
|
add_custom_type("CSGSpreader3D", "CSGCombiner3D", preload("res://addons/csg_toolkit/scripts/csg_spreader_3d.gd"), null)
|
|
|
|
# Sidebar
|
|
var sidebarScene = preload("res://addons/csg_toolkit/scenes/csg_side_toolkit_bar.tscn")
|
|
sidebar = sidebarScene.instantiate()
|
|
add_control_to_container(EditorPlugin.CONTAINER_SPATIAL_EDITOR_SIDE_LEFT, sidebar)
|
|
# Ensure sidebar can be found by shortcut manager if needed
|
|
sidebar.add_to_group("CSGSideToolkit")
|
|
|
|
# Topbar
|
|
var topbarScene = preload("res://addons/csg_toolkit/scenes/csg_top_toolkit_bar.tscn")
|
|
topbar = topbarScene.instantiate()
|
|
add_control_to_container(EditorPlugin.CONTAINER_SPATIAL_EDITOR_MENU, topbar)
|
|
|
|
# Shortcut Manager
|
|
shortcut_manager = CsgShortcutManager.new()
|
|
get_tree().root.add_child(shortcut_manager)
|
|
shortcut_manager.sidebar = sidebar
|
|
|
|
func _exit_tree():
|
|
remove_custom_type("CSGRepeater3D")
|
|
remove_custom_type("CSGSpreader3D")
|
|
undo_manager = null
|
|
|
|
remove_autoload_singleton(AUTOLOAD_NAME)
|
|
|
|
# Note: ProjectSettings for CSG Toolkit are preserved in project.godot
|
|
# They can be manually removed from Project Settings if desired
|
|
|
|
remove_control_from_container(EditorPlugin.CONTAINER_SPATIAL_EDITOR_SIDE_LEFT, sidebar)
|
|
sidebar.free()
|
|
remove_control_from_container(EditorPlugin.CONTAINER_SPATIAL_EDITOR_MENU, topbar)
|
|
topbar.free()
|
|
if shortcut_manager and is_instance_valid(shortcut_manager):
|
|
shortcut_manager.queue_free()
|