Files
MovementTests/addons/csg_toolkit/csg_toolkit.gd
Minimata 2b74c9e70c
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 20s
Create tag and build when new code gets to main / Test (push) Successful in 7m54s
Create tag and build when new code gets to main / Export (push) Successful in 9m52s
added CSG toolkit
2026-02-06 18:35:38 +01:00

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()