## This is a node that automatically fills in the [member System.group] property
## of any [System] that is a child of this node.
## Allowing you to visually organize your systems in the scene tree
## without having to manually set the group property on each [System].
## Add this node to your scene tree and make [System]s children of it.
## The name of the SystemGroup node will be set to [member System.group] for
## all child [System]s.
@tool
@icon('res://addons/gecs/assets/system_folder.svg')
class_name SystemGroup
extends Node

## Put the [System]s in the group based on the [member Node.name] of the [SystemGroup]
@export var auto_group := true


## called when the node enters the scene tree for the first time.
func _enter_tree() -> void:
	# Connect signals
	if not child_entered_tree.is_connected(_on_child_entered_tree):
		child_entered_tree.connect(_on_child_entered_tree)

	# Set the group for all child systems
	if auto_group:
		for child in get_children():
			if child is System:
				child.group = name


## Anytime  a child enters the tree, set its group if it's a System
func _on_child_entered_tree(node: Node) -> void:
	if auto_group:
		if node is System:
			node.group = name
