Skip to content

Commit

Permalink
add auto-tracking by node name, class or group
Browse files Browse the repository at this point in the history
  • Loading branch information
danboo committed Dec 22, 2022
1 parent 74e5269 commit cb7024a
Show file tree
Hide file tree
Showing 10 changed files with 142 additions and 92 deletions.
61 changes: 23 additions & 38 deletions addons/Tracker2D/config_dock.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -13,68 +13,53 @@ 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
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"]
17 changes: 9 additions & 8 deletions addons/Tracker2D/plugin.gd
Original file line number Diff line number Diff line change
Expand Up @@ -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)
32 changes: 31 additions & 1 deletion addons/Tracker2D/position_info_overlay.gd
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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)
39 changes: 0 additions & 39 deletions addons/Tracker2D/test_scene.gd

This file was deleted.

3 changes: 3 additions & 0 deletions addons/Tracker2D/tests/add_by_class.tscn
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[gd_scene format=3 uid="uid://11cu8ycnf2nb"]

[node name="auto_track_test_class" type="PointLight2D"]
3 changes: 3 additions & 0 deletions addons/Tracker2D/tests/add_by_group.tscn
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[gd_scene format=3 uid="uid://droi0rkk6llu6"]

[node name="auto_track_test_group" type="Node2D" groups=["auto_track_test_group"]]
3 changes: 3 additions & 0 deletions addons/Tracker2D/tests/add_by_name.tscn
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[gd_scene format=3 uid="uid://b37ljwlhyesxb"]

[node name="auto_track_test_name" type="Node2D"]
64 changes: 64 additions & 0 deletions addons/Tracker2D/tests/test_scene.gd
Original file line number Diff line number Diff line change
@@ -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)
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
[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="."]

[node name="sprite" type="Sprite2D" parent="."]
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
2 changes: 1 addition & 1 deletion project.godot
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down

0 comments on commit cb7024a

Please sign in to comment.