diff --git a/addons/Tracker2D/config_dock.tscn b/addons/Tracker2D/config_dock.tscn index d795fcf..164d857 100644 --- a/addons/Tracker2D/config_dock.tscn +++ b/addons/Tracker2D/config_dock.tscn @@ -13,7 +13,6 @@ grow_vertical = 2 script = ExtResource("1_jgtn7") [node name="VBoxContainer" type="VBoxContainer" parent="."] -layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 @@ -21,60 +20,46 @@ grow_horizontal = 2 grow_vertical = 2 [node name="name_filter" parent="VBoxContainer" instance=ExtResource("2_34o0b")] -layout_mode = 2 - -[node name="label" parent="VBoxContainer/name_filter" index="0"] -layout_mode = 2 - -[node name="add_input" parent="VBoxContainer/name_filter" index="1"] -layout_mode = 2 - -[node name="delete_button" parent="VBoxContainer/name_filter" index="2"] -layout_mode = 2 - -[node name="allow_list" parent="VBoxContainer/name_filter" index="3"] -layout_mode = 2 +anchors_preset = 0 +anchor_right = 0.0 +anchor_bottom = 0.0 +offset_right = 1152.0 +offset_bottom = 108.0 [node name="HSeparator" type="HSeparator" parent="VBoxContainer"] -layout_mode = 2 +offset_top = 112.0 +offset_right = 1152.0 +offset_bottom = 116.0 [node name="group_filter" parent="VBoxContainer" instance=ExtResource("2_34o0b")] -layout_mode = 2 +anchors_preset = 0 +anchor_right = 0.0 +anchor_bottom = 0.0 +offset_top = 120.0 +offset_right = 1152.0 +offset_bottom = 228.0 [node name="label" parent="VBoxContainer/group_filter" index="0"] -layout_mode = 2 text = "Group Filters: " -[node name="add_input" parent="VBoxContainer/group_filter" index="1"] -layout_mode = 2 - -[node name="delete_button" parent="VBoxContainer/group_filter" index="2"] -layout_mode = 2 - -[node name="allow_list" parent="VBoxContainer/group_filter" index="3"] -layout_mode = 2 - [node name="HSeparator2" type="HSeparator" parent="VBoxContainer"] -layout_mode = 2 +offset_top = 232.0 +offset_right = 1152.0 +offset_bottom = 236.0 [node name="class_filter" parent="VBoxContainer" instance=ExtResource("2_34o0b")] -layout_mode = 2 +anchors_preset = 0 +anchor_right = 0.0 +anchor_bottom = 0.0 +offset_top = 240.0 +offset_right = 1152.0 +offset_bottom = 348.0 [node name="label" parent="VBoxContainer/class_filter" index="0"] -layout_mode = 2 text = "Class Filters: " -[node name="add_input" parent="VBoxContainer/class_filter" index="1"] -layout_mode = 2 - -[node name="delete_button" parent="VBoxContainer/class_filter" index="2"] -layout_mode = 2 - -[node name="allow_list" parent="VBoxContainer/class_filter" index="3"] -layout_mode = 2 - [editable path="VBoxContainer/name_filter"] [editable path="VBoxContainer/group_filter"] [editable path="VBoxContainer/class_filter"] diff --git a/addons/Tracker2D/plugin.gd b/addons/Tracker2D/plugin.gd index 3013ac6..d6ed7ee 100644 --- a/addons/Tracker2D/plugin.gd +++ b/addons/Tracker2D/plugin.gd @@ -2,29 +2,30 @@ extends EditorPlugin # Tracker2D plugin: -# - auto-add Tracker2D based on by group, type or name # - add window, viewport and screen position options # - update info based on timer or per frame # - add option to keep info boxes in viewport (change BG color when tracked origin is outside viewport) +# - test cases +# - rect stays visble when sprite is occluded -var config_dock_scene : PackedScene = preload("config_dock.tscn") -var config_dock : Control +#var config_dock_scene : PackedScene = preload("config_dock.tscn") +#var config_dock : Control const AUTOLOAD_NAME : String = "Tracker2D_Overlay" func _enter_tree() -> void: ## add configuration dock - config_dock = config_dock_scene.instantiate() - config_dock.name = "Tracker2D" - add_control_to_dock(DockSlot.DOCK_SLOT_LEFT_UR, config_dock) +# config_dock = config_dock_scene.instantiate() +# config_dock.name = "Tracker2D" +# add_control_to_dock(DockSlot.DOCK_SLOT_LEFT_UR, config_dock) ## add position overlay singleton add_autoload_singleton(AUTOLOAD_NAME, "res://addons/Tracker2D/position_info_overlay.tscn") func _exit_tree() -> void: - remove_control_from_docks(config_dock) - config_dock.free() +# remove_control_from_docks(config_dock) +# config_dock.free() remove_autoload_singleton(AUTOLOAD_NAME) diff --git a/addons/Tracker2D/position_info_overlay.gd b/addons/Tracker2D/position_info_overlay.gd index 6219a7b..1385759 100644 --- a/addons/Tracker2D/position_info_overlay.gd +++ b/addons/Tracker2D/position_info_overlay.gd @@ -1,9 +1,15 @@ extends CanvasLayer +@export var auto_track_names : Array[String] = [] +@export var auto_track_classes : Array[String] = [] +@export var auto_track_groups : Array[String] = [] + +var tracker2d_scene : PackedScene = preload("res://addons/Tracker2D/tracker_2d.tscn") var info_box_scene : PackedScene = preload("position_info_box.tscn") func _ready(): - pass + if ! OS.has_feature("standalone"): + get_tree().node_added.connect(_handle_node_added) func _process(delta): pass @@ -12,3 +18,27 @@ func add_info_box( _tracker : Tracker2D ) -> void: var info_box : InfoBox = info_box_scene.instantiate() info_box.set_tracker( _tracker ) $position_info_overlay.add_child( info_box ) + +func _handle_node_added( node : Node ) -> void: + + ## try not to infinitely recurse + if node is InfoBox or node.owner is InfoBox: + return + if node is Tracker2D or node.owner is Tracker2D: + return + + var auto_track : bool = false + + if auto_track_names.has(node.name): + auto_track = true + elif auto_track_classes.has(node.get_class()): + auto_track = true + else: + for group in node.get_groups(): + if auto_track_groups.has(group): + auto_track = true + break + + if auto_track: + var tracker : Tracker2D = tracker2d_scene.instantiate() + node.add_child(tracker) diff --git a/addons/Tracker2D/test_scene.gd b/addons/Tracker2D/test_scene.gd deleted file mode 100644 index bbf7268..0000000 --- a/addons/Tracker2D/test_scene.gd +++ /dev/null @@ -1,39 +0,0 @@ -extends Node2D - -var tracker_scene : PackedScene = preload("tracker_2d.tscn") - -# Called when the node enters the scene tree for the first time. -func _ready(): - test_node2d() - test_sprite() - test_removal() - -# Called every frame. 'delta' is the elapsed time since the previous frame. -func _process(delta): - self.global_rotation += 0.1 * delta - -func test_sprite() -> void: - var sprite_tracker : Tracker2D = tracker_scene.instantiate() - sprite_tracker.display_rect = true - sprite_tracker.tracked_properties = [ "modulate" ] - $sprite.add_child( sprite_tracker ) - -func test_node2d() -> void: - var node1 = Node2D.new(); - node1.name = "no_rect" - add_child( node1 ); - node1.position = Vector2(-100,-100) - - var tracker : Tracker2D = tracker_scene.instantiate() - node1.add_child( tracker ) - -func test_removal() -> void: - var node1 = Node2D.new(); - node1.name = "removal" - add_child( node1 ); - node1.position = Vector2(100,-100) - - var tracker : Tracker2D = tracker_scene.instantiate() - node1.add_child( tracker ) - - get_tree().create_timer(3).timeout.connect( func (): node1.queue_free() ) diff --git a/addons/Tracker2D/tests/add_by_class.tscn b/addons/Tracker2D/tests/add_by_class.tscn new file mode 100644 index 0000000..d2317ab --- /dev/null +++ b/addons/Tracker2D/tests/add_by_class.tscn @@ -0,0 +1,3 @@ +[gd_scene format=3 uid="uid://11cu8ycnf2nb"] + +[node name="auto_track_test_class" type="PointLight2D"] diff --git a/addons/Tracker2D/tests/add_by_group.tscn b/addons/Tracker2D/tests/add_by_group.tscn new file mode 100644 index 0000000..8a3676a --- /dev/null +++ b/addons/Tracker2D/tests/add_by_group.tscn @@ -0,0 +1,3 @@ +[gd_scene format=3 uid="uid://droi0rkk6llu6"] + +[node name="auto_track_test_group" type="Node2D" groups=["auto_track_test_group"]] diff --git a/addons/Tracker2D/tests/add_by_name.tscn b/addons/Tracker2D/tests/add_by_name.tscn new file mode 100644 index 0000000..c321021 --- /dev/null +++ b/addons/Tracker2D/tests/add_by_name.tscn @@ -0,0 +1,3 @@ +[gd_scene format=3 uid="uid://b37ljwlhyesxb"] + +[node name="auto_track_test_name" type="Node2D"] diff --git a/addons/Tracker2D/tests/test_scene.gd b/addons/Tracker2D/tests/test_scene.gd new file mode 100644 index 0000000..79512ef --- /dev/null +++ b/addons/Tracker2D/tests/test_scene.gd @@ -0,0 +1,64 @@ +extends Node2D + +var tracker_scene : PackedScene = preload("../tracker_2d.tscn") + +func _ready(): + ## set auto track arrays for testing purposes + Tracker2D_Overlay.auto_track_names = [ "auto_track_test_name" ] + Tracker2D_Overlay.auto_track_classes = [ "PointLight2D" ] + Tracker2D_Overlay.auto_track_groups = [ "auto_track_test_group" ] + + ## build test scenes + test_node2d() + test_sprite() + test_removal() + test_auto_track_name() + test_auto_track_class() + test_auto_track_group() + +func _process(delta): + self.global_rotation += 0.1 * delta + +func test_sprite() -> void: + var sprite_tracker : Tracker2D = tracker_scene.instantiate() + sprite_tracker.display_rect = true + sprite_tracker.tracked_properties = [ "modulate" ] + $sprite.add_child( sprite_tracker ) + +func test_node2d() -> void: + var node1 = Node2D.new(); + node1.name = "no_rect" + add_child( node1 ); + node1.position = Vector2(-100,-100) + + var tracker : Tracker2D = tracker_scene.instantiate() + node1.add_child( tracker ) + +func test_removal() -> void: + var node1 = Node2D.new(); + node1.name = "removal" + add_child( node1 ); + node1.position = Vector2(100,-100) + + var tracker : Tracker2D = tracker_scene.instantiate() + node1.add_child( tracker ) + + get_tree().create_timer(3).timeout.connect( func (): node1.queue_free() ) + +func test_auto_track_name() -> void: + var scene : PackedScene = preload("res://addons/Tracker2D/tests/add_by_name.tscn") + var node : Node2D = scene.instantiate() + add_child(node) + node.position = Vector2(-100, 100) + +func test_auto_track_class() -> void: + var scene : PackedScene = preload("res://addons/Tracker2D/tests/add_by_class.tscn") + var node : PointLight2D = scene.instantiate() + add_child(node) + node.position = Vector2(-100, 0) + +func test_auto_track_group() -> void: + var scene : PackedScene = preload("res://addons/Tracker2D/tests/add_by_group.tscn") + var node : Node2D = scene.instantiate() + add_child(node) + node.position = Vector2(100, 0) diff --git a/addons/Tracker2D/test_scene.tscn b/addons/Tracker2D/tests/test_scene.tscn similarity index 59% rename from addons/Tracker2D/test_scene.tscn rename to addons/Tracker2D/tests/test_scene.tscn index 753b00a..5f8ae9c 100644 --- a/addons/Tracker2D/test_scene.tscn +++ b/addons/Tracker2D/tests/test_scene.tscn @@ -1,10 +1,10 @@ -[gd_scene load_steps=3 format=3 uid="uid://b84tqkseugl4v"] +[gd_scene load_steps=3 format=3 uid="uid://bl3663sybkeg8"] -[ext_resource type="Script" path="res://addons/Tracker2D/test_scene.gd" id="1_7gmqk"] -[ext_resource type="Texture2D" uid="uid://bibtqiobruk1f" path="res://icon.svg" id="2_0an67"] +[ext_resource type="Script" path="res://addons/Tracker2D/tests/test_scene.gd" id="1_3dluf"] +[ext_resource type="Texture2D" uid="uid://bibtqiobruk1f" path="res://icon.svg" id="2_5vqry"] [node name="test_scene" type="Node2D"] -script = ExtResource("1_7gmqk") +script = ExtResource("1_3dluf") [node name="tracked_node" type="Node2D" parent="."] @@ -12,7 +12,7 @@ script = ExtResource("1_7gmqk") modulate = Color(1, 0, 0.0901961, 1) position = Vector2(100, 100) scale = Vector2(1.5, 1.5) -texture = ExtResource("2_0an67") +texture = ExtResource("2_5vqry") [node name="Camera2D" type="Camera2D" parent="."] current = true diff --git a/project.godot b/project.godot index c5ac490..4a29f92 100644 --- a/project.godot +++ b/project.godot @@ -27,7 +27,7 @@ _global_script_class_icons={ [application] config/name="Godot-Tracker2D-Plugin" -run/main_scene="res://addons/Tracker2D/test_scene.tscn" +run/main_scene="res://addons/Tracker2D/tests/test_scene.tscn" config/features=PackedStringArray("4.0", "Forward Plus") config/icon="res://icon.svg"