Commit Graph

386 Commits

Author SHA1 Message Date
Nathan Franke c3c5985189
move rpc and rpc_id implementations back to header
StackOverflow on why this is needed: https://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file
Minor mistake in commit ca7d572908
2022-08-02 18:35:29 -05:00
Juan Linietsky d4433ae6d3 Remove Signal connect binds
Remove the optional argument p_binds from `Object::connect` since it was deprecated by Callable.bind().
Changed all uses of it to Callable.bind()
2022-07-29 16:26:13 +02:00
Fabio Alessandrelli ca7d572908 [Net] Modularize multiplayer, expose MultiplayerAPI to extensions.
- RPC configurations are now dictionaries.
- Script.get_rpc_methods renamed to Script.get_rpc_config.
- Node.rpc[_id] and Callable.rpc now return an Error.
- Refactor MultiplayerAPI to allow extension.
- New MultiplayerAPI.rpc method with Array argument (for scripts).
- Move the default MultiplayerAPI implementation to a module.
2022-07-26 09:31:12 +02:00
Hugo Locurcio 462432f89f
Add an underscore to internal group names as per engine policy
This also adds `SNAME()` macros where relevant to improve performance.
2022-07-01 20:16:25 +02:00
Rémi Verschelde 11f5d2141a
Merge pull request #61577 from YuriSizov/core-fix-events-for-moved-nodes 2022-06-27 12:02:19 +02:00
reduz d69e3791bf Fix editor-only visibility for lights
* Update visibility again for editor-only lights if owner changes.

Fixes #26399, supersedes #52327
2022-06-23 08:19:18 +02:00
Rémi Verschelde 3e6de687b8 Node: Rename `child_exited_tree` to `child_exiting_tree`
The name was confusing as this signal is emitted around the same time as
`tree_exiting` and `NOTIFICATION_EXIT_TREE`, i.e. while the child node is
still in tree.

Fixes #59210.
2022-06-20 11:55:19 +02:00
Yuri Sizov 8e5ad7be46 Mark node groups as dirty for every children if parent is moved 2022-05-31 21:28:04 +03:00
reduz 45af29da80 Add a new HashSet template
* Intended to replace RBSet in most cases.
* Optimized for iteration speed
2022-05-20 22:40:38 +02:00
BimDav 3e96abce07 fix a bug in get_node_and_resource 2022-05-16 19:40:59 +02:00
reduz 746dddc067 Replace most uses of Map by HashMap
* Map is unnecessary and inefficient in almost every case.
* Replaced by the new HashMap.
* Renamed Map to RBMap and Set to RBSet for cases that still make sense
  (order matters) but use is discouraged.

There were very few cases where replacing by HashMap was undesired because
keeping the key order was intended.
I tried to keep those (as RBMap) as much as possible, but might have missed
some. Review appreciated!
2022-05-16 10:37:48 +02:00
kobewi 1dc7bcc83c Cleanup metadata usage 2022-05-06 00:27:10 +02:00
Hugo Locurcio 180e5d3028
Remove `RES` and `REF` typedefs in favor of spelled out `Ref<>`
These typedefs don't save much typing compared to the full `Ref<Resource>`
and `Ref<RefCounted>`, yet they sometimes introduce confusion among
new contributors.
2022-05-03 01:43:50 +02:00
Fabio Alessandrelli aee2240d5f [Net] Allow branch-specific MultiplayerAPIs.
Removes custom_multiplayer from Node.
MultiplayerAPI overrides are now set at SceneTree level, and apply to
whole branches.
Impact on performance when using only the default multiplayer or
overriding it is minimal, the use of branches can likely be further
optimized by caching nodes and relevant MultiplayerAPI IDs.
2022-04-26 17:22:54 +02:00
Rémi Verschelde 9c2ea7e296 Node: Re-add `find_node` as `find_child`, improve docs
The new name contrasts it better with `find_parent`, and makes it clear
that it only matches child/descendant nodes.

Also rename `find_nodes` to `find_children` accordingly.
2022-04-25 15:21:22 +02:00
reduz 8580f377a3 Implement Scene Unique Nodes
Implements https://github.com/godotengine/godot-proposals/issues/4096

* Nodes can be marked unique to the scene in the editor (or via code).
* Unique nodes can be accessed via the **%** prefix at any point in the path. From that point in the path (depending on whether the scene of the path is), the unique node will be fetched.
* Implementation is very optimal, as these nodes are cached.
2022-04-25 12:19:17 +02:00
bruvzg d1207a0504
[Input] Add extra `shortcut_input` input processing step to process Unicode character input with Alt / Ctrl modifiers, after processing of shortcuts. 2022-04-05 13:46:45 +03:00
Rémi Verschelde 8e5d927af5
Merge pull request #59590 from Calinou/rename-print-stray-nodes 2022-03-31 22:21:51 +02:00
Hugo Locurcio a29f2bfe54
Rename `Node.print_stray_nodes()` to `Node.print_orphan_nodes()`
The "orphan" terminology is already used elsewhere.
2022-03-31 18:33:02 +02:00
Pierre-Thomas Meisels 63f7f44ccb Make vararg method bind no return and return
Type emit_signal exposed method return type

set UndoRedo add_do_method and add_undo_method exposed return void

Set TreeItem::_call_recursive_bind returns void

Set _rpc_bind and _rpc_id_bind returns void in Node

Set _call_group and _call_group_flags method returns void in SceneTree

Set godot-cpp-test CI flag to false
2022-03-30 11:43:12 +02:00
reduz 21637dfc25 Remove VARIANT_ARG* macros
* Very old macros from the time Godot was created.
* Limited arguments to 5 (then later changed to 8) in many places.
* They were replaced by C++11 Variadic Templates.
* Renamed methods that take argument pointers to have a "p" suffix. This was used in some places and not in others, so made it standard.
* Also added a dereference check for Variant*. Helped catch a couple of bugs.
2022-03-09 18:39:13 +01:00
Rémi Verschelde 417698c202
Merge pull request #58042 from Sauermann/fix-viewport-border-notifications
Fix Viewport mouse enter+exit notifications
2022-02-19 09:07:07 +01:00
diddykonga 78dc608aa8 Change 'find_node' to 'find_nodes' and Add 'type' parameter
Changed 'find_node' to 'find_nodes' which now returns an 'TypedArray<Node>', as well as Added a 'type' parameter to match against specific node types, which supports inheritance.
2022-02-17 01:44:13 -06:00
Markus Sauermann 415042ac89 Connect notifications from Container to Viewport
mouse enter+exit
2022-02-15 22:41:30 +01:00
Rémi Verschelde 0f5455230c
Use `switch` consistently in `_notification` (`scene` folder) 2022-02-15 18:44:55 +01:00
Hendrik Brucker b396fd4eef Improve compilation speed (forward declarations/includes cleanup) 2022-02-12 02:46:22 +01:00
Fabio Alessandrelli a18ba63417 [Net] Allow to use strings as method name in RPC.
Node::rpc and Node::rpc_id will now also accepts Strings instead of only
accepting StringNames.
2022-02-09 14:27:16 +01:00
Fabio Alessandrelli d219547c96 [Net] New replication interface, spawner and synchronizer nodes.
Initial implementation of the MultiplayerReplicationInterface and its
default implementation (SceneReplicationInterface).

New MultiplayerSpawner node helps dealing with instantiation of scenes
on remote peers (e.g. clients).
It supports both custom spawns via a `_spawn_custom` virtual function,
and optional auto-spawn of known scenes via a TypedArray<PackedScenes>
property.

New MultiplayerSynchornizer helps synchronizing states between the local
and remote peers, supports both sync and spawn properties and is
configured via a `SceneReplicationConfig` resource.
It can also sync via path (i.e. without being spawned by a
MultiplayerSpawner if both peers has it in tree, but will not send the
spawn state in that case, only the sync one.
2022-02-04 14:56:30 +01:00
bruvzg 244db37508
Cleanup and move char functions to the `char_utils.h` header. 2022-02-04 11:35:01 +02:00
reduz fbd9599b04 Add a signal to notify when children nodes enter or exit tree
-Allows more fine grained notifications (hence better performance) than using the global scene tree signals (node added and removed).
-Required for #55950
2022-02-02 11:28:11 +01:00
Rémi Verschelde d681d99e12
Merge pull request #52134 from RandomShaper/fix_naming 2022-01-20 22:01:37 +01:00
Pedro J. Estébanez 7b0ed2aa5e Rename Variant::is_ref() to is_ref_counted() 2022-01-20 18:46:25 +01:00
Bartłomiej T. Listwon e2792cc71c Rework Node::get_node to omit is_absolute() check in best case scenario 2022-01-19 21:38:18 +01:00
Haoyu Qiu 6aecf91e4f Replicate load-as-placeholder state on node duplication 2022-01-16 15:08:03 +08:00
Pedro J. Estébanez 2db9397fb9 Clear only owners that are no longer in the same tree 2022-01-05 14:00:49 +01:00
Rémi Verschelde 91b5c358fc
Merge pull request #55512 from RandomShaper/better_node_delete 2022-01-05 10:25:13 +01:00
Rémi Verschelde 23342ac23c
Merge pull request #54987 from KoBeWi/@@Node2D@@69@@420@@@ 2022-01-04 10:08:32 +01:00
Rémi Verschelde fe52458154
Update copyright statements to 2022
Happy new year to the wonderful Godot community!
2022-01-03 21:27:34 +01:00
Nathan Franke 49403cbfa0
Replace String comparisons with "", String() to is_empty()
Also:
- Adds two stress tests to test_string.h
- Changes to .empty() on std::strings
2021-12-09 04:48:38 -06:00
Pedro J. Estébanez 0a0381dd0a Rationalize Node removals and deletions
- Regarding preservation of owner, `free()` and `remove_child()` now behave the same: owner is kept during `tree_exiting` signal and `null` during `tree_exited`.
- `tree_exited` is emitted in the same order as `tree_exiting`.
- Superfluous code to handle cancelation of ownership is removed.
2021-12-01 14:28:59 +01:00
Max Hilbrunner a6a2e0feb9
Merge pull request #52387 from Calinou/node-rename-path-changed-notification
Rename Node's `NOTIFICATION_PATH_CHANGED` to `NOTIFICATION_PATH_RENAMED`
2021-11-25 17:47:44 +01:00
Lightning_A e078f970db Rename `remove()` to `remove_at()` when removing by index 2021-11-23 18:58:57 -07:00
kobewi 58146a74f7 Fix nodes being renamed into garbage upon conflict 2021-11-15 02:05:44 +01:00
megalobyte e3def40160 Update editor description property flag 2021-11-10 13:44:54 -05:00
Rémi Verschelde 665fa3d839
Merge pull request #52943 from RandomShaper/property_pin_control_natural 2021-11-08 18:53:08 +01:00
Pedro J. Estébanez 8d6f80d367 Add property value pinning 2021-11-08 17:42:30 +01:00
kobewi 313ef412f5 Fix preview sun and environment names 2021-11-07 00:40:15 +01:00
Hugo Locurcio c012fbc8b2
Rename `PROPERTY_USAGE_NOEDITOR` to `PROPERTY_USAGE_NO_EDITOR`
This is consistent with other constants that include `NO`,
such as `PROPERTY_HINT_COLOR_NO_ALPHA`.
2021-11-03 23:06:17 +01:00
kobewi de4f29f458 Remove node_hrcr hack 2021-10-28 01:43:34 +02:00
Fabio Alessandrelli 7c93931751 [Net] Add call_local argument to Node.rpc_config. 2021-10-08 12:49:20 +02:00