Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Narrow detect_changes to be able to specify owner #9

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions addons/DataBindControls/DataBindingsGlobal.gd
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@ var _change_detection_queued := false


## queue change detection
func detect_changes() -> void:
func detect_changes(ancestor: Node = null) -> void:
if _change_detection_queued:
return
_change_detection_queued = true
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

_change_detection_queued is no longer valid if you can call it with different arguments. it now needs to be a list of nodes which have requested change detection.

Since change detection happens on a subsequent frame, we would need some kind of weak node reference to avoid use after free

call_deferred("_detect_changes")
call_deferred("_detect_changes", ancestor)


func _detect_changes():
func _detect_changes(ancestor: Node):
# TODO: queue change detection per viewport root or control root?
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This implements change detection per control root, that part of the TODO should be removed

# each piece of 2d UI change detection could happen on a separate frame, spreading out the load..
# 50 binds can take 1ms to check
Expand All @@ -38,6 +38,8 @@ func _detect_changes():
result = true
break
var binds := get_tree().get_nodes_in_group(Util.BIND_GROUP)
if ancestor:
binds = binds.filter(ancestor.is_ancestor_of)
for bind in binds:
var cd := bind.detect_changes() as bool
if cd:
Expand Down