Changes spawned_nodes to an RBSet, which preserves
insertion order after entries are removed.
This prevents simplify path commands from being
sent to clients out of order, so that the commands
for parents are recieved before the commands for
children.
This may not be the right fix (data structure, or
design).
As part of RPCs processing, they need to be sorted reliably across all
peers, so that unique IDs can be assigned to greatly optimize the
network layer.
The RPC configuration nodes are stored in dictionaries which, until
recently, always casted StringName keys to String.
Since method names (keys) in the RPC configuration were StringName,
a side effect of the above change is that sorting the dictionary keys no
longer sort them alphabetically by default (StringName are compared
using their pointers).
This commit changes the RPC processing logic to use sort_custom to
provide a function that can handle the StringName comparison.
The debugger reports synchronizers with empty state to the editor
even if no data is being sent to other peers.
The editor conditional to avoid division by zero was checking the wrong
variable.
- 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)
Godot supports sending messages to "all but one peer" by sending a
packet with a negative target (the negated ID of the excluded peer).
The relay protocol was incorrectly interpreting the values and relaying
the message to the wrong peers.
This issue only affected "send_bytes" since the other subsystem (RPC
and replication) "resolves" the correct IDs client-side (to match
visibility information).
When multiple clients are connected, and the server is using the relay
sub-protocol, it might happen that a client disconnects while a packet
sent to it from another peer is still in transit.
In that case, when the packet reaches the server for relaying, it used
to generate an error (as the destination client did no longer exists).
This commit changes check to suppress the error message while still
skipping the packet.