Commit graph

96 commits

Author SHA1 Message Date
HP van Braam
0b30ecc758 Don't mark cached previously pinned AnimationMixers
AnimationPlayerEditor will hold on to pointers to no-longer existing
Nodes that were previously pinned. Make sure to not mark them as dirty
if they are not already inside the cache.

This fixes #102108
2025-02-13 19:57:26 +01:00
AThousandShips
4b4bfe7d0e
[Editor] Prevent deferred tooltip update crash
Caused by `TreeItem`s being accessed after clearing the tree on reset.
2025-02-10 15:18:04 +01:00
Agustín Marsero
1101bdb351 Fix double set_name in renaming 2025-02-08 21:21:01 +01:00
Synzorasize
9d00a773f8 Allow prefixing with '%' to set a node as unique in the Scene Tree Dock 2025-01-13 09:38:07 -06:00
Rémi Verschelde
3de10d58ff
Merge pull request #101145 from hpvb/fix-scenetree-editor-marked
Make sure marked nodes are reset on scene change
2025-01-06 22:49:09 +01:00
Rémi Verschelde
ae205b0fc6
Merge pull request #98926 from YeldhamDev/out_all_of_you
Add toggle to hide filtered out parents in the "SceneTree" dock
2025-01-06 22:46:48 +01:00
HP van Braam
7ce9c339b3 Make sure marked nodes are reset on scene change
The performance improvement on the SceneTreeEditor caused the previous
state of the SceneTreeEditor::marked HashSet to matter, when it
previously was always just overwritten when markings changed. The old
code thus had no reason to ever clear the marking list.

We now make sure that whether the SceneTreeEditor is hidden or not that
when the edited scene changes we always reset the entire state of the
editor, including the marked HashSet.
2025-01-05 01:58:14 +01:00
Ricardo Subtil
b77aa473a1 Implement a "Recovery Mode" for recovering crashing/hanging projects during initialization 2025-01-03 10:50:15 +00:00
Michael Alexsander
38ff1500c7
Add toggle to hide filtered out parents in the "SceneTree" dock 2024-12-24 13:43:01 -03:00
A Thousand Ships
a1846b27ea
Improve use of Ref.is_null/valid
Use `is_null` over `!is_valid` and vice versa.
2024-12-23 16:35:02 -05:00
Yufeng Ying
73d85f46c9 Remove unused headers in scene.
Co-authored-by: Thaddeus Crews <repiteo@outlook.com>

Co-authored-by: A Thousand Ships <96648715+AThousandShips@users.noreply.github.com>
2024-12-24 00:40:09 +08:00
HP van Braam
62cff66383 Don't recursively call _update_tree
When a node was previously selected and the test "selected == p_node"
was true the code would use set_selected() to change the selection to
nullptr. However, if the tree is dirty, which is always true in this
codepath, this would lead to a recursive call to _update_tree()
ultimately leading to a crash due to us running out of stack.

This fixes #100666
2024-12-20 23:01:44 +01:00
Aaron Franke
e1429cd7d3
Add a warning for when the scene root node is transformed 2024-12-17 23:47:15 -08:00
HP van Braam
6f7525c396 Improve Scene Tree editor performance
We now cache the Node*<>TreeItem* mapping in the SceneTreeEditor. This
allows us to make targeted updates to the Tree used to display the scene
tree in the editor.

Previously on almost all changes to the scene tree the editor would
rebuild the entire widget, causing a large number of deallocations an
allocations. We now carefully manipulate the Tree widget in-situ saving
a large number of these allocations.

In order to know what Nodes need to be updated we add a
editor_state_changed signal to Node, this is a TOOLS_ENABLED,
editor-only signal fired when changes to Node happen that are relevant
to editor state.

We also now make sure that when nodes are moved/renamed we don't check
expensive properties that cannot contain NodePaths. This saves a lot of
time when SceneTreeDock renames a node in a scene with a lot of
MeshInstances. This makes renaming nodes go from ~27 seconds to ~2
seconds on large scenes.

SceneTreeEditor instances will now also not do all of the potentially
expensive update work if they are invisible. This behavior is turned off
by default so it won't affect existing users. This change allows the
editor to only update SceneTreeEditors that actually in view. In
practice this means that for most changes instead of updating 6
SceneTreeEditors we only update 1 instantly, and the others only when
they become visible.

There is definitely more that could be done, but this is already a
massive improvement. In complex scenes we see an improvement of 10x,
things that used to take ~30 seconds now only take 2.

This fixes #83460

I want to thank KoBeWi, TokisanGames, a-johnston, aniel080400 for
their tireless testing. And AeioMuch for their testing and providing a
fix for the hover issue.
2024-12-12 22:47:05 +01:00
Lukas Tenbrink
b5c31ebb41 Add contains_char() for single-character 'contains' calls. 2024-12-06 20:23:35 +01:00
Rémi Verschelde
f668ecb875
Merge pull request #98745 from yahkr/fix-unique-icon-text
[Editor] Update SceneUniqueName button text for clarity
2024-11-29 22:46:46 +01:00
yahkr
8f5b11ac25 [Editor] Update SceneUniqueName button text when disabled to clarify access. 2024-11-24 12:26:13 -05:00
kobewi
ad8ede2411 Restore original root name if renaming instance to empty 2024-11-12 20:29:10 +01:00
Thaddeus Crews
563355637e
Merge pull request #97722 from dustdfg/fix_wrong_groups_tooltip
Fix tooltip message of button that opens groups/signals dock
2024-11-11 14:18:13 -06:00
Jason Morgado
d5176757c0 Add type filters to AnimationPlayer's "Add Track"
Co-Authored-By: A Thousand Ships <96648715+AThousandShips@users.noreply.github.com>
Co-Authored-By: Tomek <kobewi4e@gmail.com>
2024-11-09 10:14:06 -05:00
Yevhen Babiichuk (DustDFG)
4a5ae8c388 Fix tooltip message of button that opens groups/signals dock
Signed-off-by: Yevhen Babiichuk (DustDFG) <dfgdust@gmail.com>
Co-authored-by: A Thousand Ships <96648715+AThousandShips@users.noreply.github.com>
2024-10-02 13:35:12 +03:00
Haoyu Qiu
14321b8ed5 Set auto translate mode for drag previews
- Controls
  - `LineEdit`, `TextEdit`: Always disabled since it's dragging user input.
  - `TabBar`: Use the same auto translate mode as the node.
  - `RichTextLabel`: Always disable since auto translation is done
    differently from other controls (selection text you get
    programmatically is always after auto translation).
- Editor
  - Disable drag preview auto translation if the text is user input,
    filename, or class name.
  - Also disabled unexpected auto translation for audio bus effect names.
2024-09-19 19:21:29 +08:00
Rémi Verschelde
4d35402c1c
Merge pull request #96400 from Maran23/inputmap-usage-for-filter-and-corresponding-refactor
Use InputMap actions consistently across all LineEdit's that filter an underlying Tree or ItemList.
2024-09-16 13:34:38 +02:00
Rémi Verschelde
ddef729fb2
Merge pull request #96569 from AThousandShips/fix_tree_button
[Editor] Prevent duplicate `Open in Editor` buttons in scene tree dock
2024-09-05 17:44:19 +02:00
Rémi Verschelde
de2f50777e
Merge pull request #95343 from Giganzo/unique-name-dialog
Add ConfirmationDialog when clicking on % button in SceneTree
2024-09-04 17:11:46 +02:00
A Thousand Ships
ab04d76e0e
[Editor] Prevent duplicate Open in Editor buttons in scene tree dock
Duplicate buttons were added when editor description changed
2024-09-04 17:00:57 +02:00
Giganzo
89c009b105 Add ConfirmationDialog when clicking on % button in SceneTree 2024-09-04 12:08:32 +02:00
Marius Hanl
74f64aaf98 Use InputMap actions consistently across all LineEdit's that filter an underlying Tree or ItemList.
- Instead of checking for Key::UP, Key::DOWN, Key::PAGEUP, Key::PAGEDOWN etc., we rather check for the action like 'ui_up' or 'ui_down'.
- Also use AcceptDialog's 'register_text_enter' functionality to consistently close a dialog when ENTER is pressed while the LineEdit has focus (instead of redirecting ENTER keys to e.g. the underlying Tree).
- Unify the LineEdit filter behavior for the SceneTreeDialog and corresponding usages
- Improve OK Button disablement (something should be selected)
2024-08-31 21:10:27 +02:00
Yuri Rubinsky
52889ab7ee [Scene] Add SceneStringName::toggled 2024-08-28 15:14:26 +03:00
kobewi
d917d88b5b Disable text trimming in SceneTreeEditor 2024-08-21 11:08:33 +02:00
Rémi Verschelde
219eba940f
Merge pull request #94773 from Hilderin/fix-add-child-node-problem-no-auto-expand
Fix scene node selection problem when no auto expand
2024-08-19 14:33:53 +02:00
Hilderin
e46280dbb5 Fix scene node selection problem when no auto expand 2024-08-17 06:32:56 -04:00
Giganzo
eb96b7b850 Fix order of Lock and Group icons in SceneTree 2024-08-09 14:06:55 +02:00
Anni Ryynänen
eed6f4fef4
Fix reselecting scene tree node after inspecting a resource
This broke when the `node_selected` connection was removed in #91435.
Here it's returned, but the emit is removed from `_node_removed`. That
preserves the earlier fix while allowing nodes to be reselected.
2024-06-24 13:17:45 +03:00
A Thousand Ships
fbb879debd
[Scene] Add SceneStringNames::text/value_changed 2024-06-19 09:44:38 +02:00
A Thousand Ships
ca18a06ecb
[Scene] Add SceneStringNames::confirmed 2024-06-19 09:40:54 +02:00
Stephen Berry
823b48ffa5
Consistently display script icons for nodes in connect dialog's scene tree editor 2024-06-10 16:06:45 +02:00
A Thousand Ships
0f72b15bc2
Fix some incorrect uses of String over StringName
These were accepting `SNAME` assignments
2024-06-03 13:42:31 +02:00
kobewi
d276e8ba0b Fix scene hash not updated when scene is empty 2024-05-22 14:55:39 +02:00
Haoyu Qiu
e5c321448e Create AudioStreamPlayer when dropping AudioStream
- Create AudioStreamPlayer if dropped in between nodes in the Scene dock
- Create AudioStreamPlayer2D if dropped into 2D editor
- Create AudioStreamPlayer3D if dropped into 3D editor
2024-05-19 20:26:04 +08:00
kobewi
413c11357d Use Core/Scene stringnames consistently 2024-05-13 23:41:07 +02:00
A Thousand Ships
955d5affa8
Reduce and prevent unnecessary random-access to List
Random-access access to `List` when iterating is `O(n^2)` (`O(n)` when
accessing a single element)

* Removed subscript operator, in favor of a more explicit `get`
* Added conversion from `Iterator` to `ConstIterator`
* Remade existing operations into other solutions when applicable
2024-05-04 16:08:55 +02:00
Rémi Verschelde
0fe0f1e992
Merge pull request #86605 from KoBeWi/update_all_of_the_tree_not
Don't update tree on deselect
2024-04-26 15:13:21 +02:00
Rémi Verschelde
6b8daa498e
SceneTreeEditor: Fix crash when TreeItem is removed before callback
Fixes #90235.

Co-authored-by: bruvzg <7645683+bruvzg@users.noreply.github.com>
2024-04-05 16:53:33 +02:00
RedMser
9cd30208d6 Improve SceneTreeEditor usability
- Mark contextually relevant node
- Remember/Clear selection as appropriate
- Scroll to marked/selected node
2024-03-31 21:35:10 +02:00
Haoyu Qiu
f298aaa956 Fix unexpected auto-translation of more editor components 2024-03-28 10:50:57 +08:00
Rémi Verschelde
ae8d43b0bb
Merge pull request #88003 from kitbdev/dock-manager-fixes
Refactor and fix issues in Editor Dock Manager
2024-03-24 01:13:26 +01:00
kit
0c9c84f7a6 Refactor and fix issues in Editor Dock Manager
Extract Dock Context Menu.
2024-03-16 13:51:31 -04:00
Aaron Franke
0700b807a2 Allow node visibility to work with custom user-provided node types 2024-03-07 17:25:06 -08:00
kobewi
ffadba0b08 Allow to easily rename multiple nodes
Co-authored-by: ajreckof <tbonhoure@ymail.Com>
2024-03-03 13:16:21 +01:00