You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-05 12:10:55 +00:00
Clarify @rpc annotation arguments docs
This commit is contained in:
@@ -612,7 +612,7 @@
|
|||||||
[/codeblock]
|
[/codeblock]
|
||||||
</description>
|
</description>
|
||||||
</annotation>
|
</annotation>
|
||||||
<annotation name="@rpc" qualifiers="vararg">
|
<annotation name="@rpc">
|
||||||
<return type="void" />
|
<return type="void" />
|
||||||
<param index="0" name="mode" type="String" default=""authority"" />
|
<param index="0" name="mode" type="String" default=""authority"" />
|
||||||
<param index="1" name="sync" type="String" default=""call_remote"" />
|
<param index="1" name="sync" type="String" default=""call_remote"" />
|
||||||
@@ -620,7 +620,11 @@
|
|||||||
<param index="3" name="transfer_channel" type="int" default="0" />
|
<param index="3" name="transfer_channel" type="int" default="0" />
|
||||||
<description>
|
<description>
|
||||||
Mark the following method for remote procedure calls. See [url=$DOCS_URL/tutorials/networking/high_level_multiplayer.html]High-level multiplayer[/url].
|
Mark the following method for remote procedure calls. See [url=$DOCS_URL/tutorials/networking/high_level_multiplayer.html]High-level multiplayer[/url].
|
||||||
The order of [param mode], [param sync] and [param transfer_mode] does not matter and all arguments can be omitted, but [param transfer_channel] always has to be the last argument. The accepted values for [param mode] are [code]"any_peer"[/code] or [code]"authority"[/code], for [param sync] are [code]"call_remote"[/code] or [code]"call_local"[/code] and for [param transfer_mode] are [code]"unreliable"[/code], [code]"unreliable_ordered"[/code] or [code]"reliable"[/code].
|
The accepted values:
|
||||||
|
- for [param mode] are [code]"any_peer"[/code] or [code]"authority"[/code];
|
||||||
|
- for [param sync] are [code]"call_remote"[/code] or [code]"call_local"[/code];
|
||||||
|
- and for [param transfer_mode] are [code]"unreliable"[/code], [code]"unreliable_ordered"[/code], or [code]"reliable"[/code].
|
||||||
|
The order of [param mode], [param sync] and [param transfer_mode] does not matter, but values related to the same argument must not be used more than once. [param transfer_channel] always has to be the 4th argument (you must specify 3 preceding arguments).
|
||||||
[codeblock]
|
[codeblock]
|
||||||
@rpc
|
@rpc
|
||||||
func fn(): pass
|
func fn(): pass
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ GDScriptParser::GDScriptParser() {
|
|||||||
// Warning annotations.
|
// Warning annotations.
|
||||||
register_annotation(MethodInfo("@warning_ignore", PropertyInfo(Variant::STRING, "warning")), AnnotationInfo::CLASS | AnnotationInfo::VARIABLE | AnnotationInfo::SIGNAL | AnnotationInfo::CONSTANT | AnnotationInfo::FUNCTION | AnnotationInfo::STATEMENT, &GDScriptParser::warning_annotations, varray(), true);
|
register_annotation(MethodInfo("@warning_ignore", PropertyInfo(Variant::STRING, "warning")), AnnotationInfo::CLASS | AnnotationInfo::VARIABLE | AnnotationInfo::SIGNAL | AnnotationInfo::CONSTANT | AnnotationInfo::FUNCTION | AnnotationInfo::STATEMENT, &GDScriptParser::warning_annotations, varray(), true);
|
||||||
// Networking.
|
// Networking.
|
||||||
register_annotation(MethodInfo("@rpc", PropertyInfo(Variant::STRING, "mode"), PropertyInfo(Variant::STRING, "sync"), PropertyInfo(Variant::STRING, "transfer_mode"), PropertyInfo(Variant::INT, "transfer_channel")), AnnotationInfo::FUNCTION, &GDScriptParser::rpc_annotation, varray("authority", "call_remote", "unreliable", 0), true);
|
register_annotation(MethodInfo("@rpc", PropertyInfo(Variant::STRING, "mode"), PropertyInfo(Variant::STRING, "sync"), PropertyInfo(Variant::STRING, "transfer_mode"), PropertyInfo(Variant::INT, "transfer_channel")), AnnotationInfo::FUNCTION, &GDScriptParser::rpc_annotation, varray("authority", "call_remote", "unreliable", 0));
|
||||||
|
|
||||||
#ifdef DEBUG_ENABLED
|
#ifdef DEBUG_ENABLED
|
||||||
is_ignoring_warnings = !(bool)GLOBAL_GET("debug/gdscript/warnings/enable");
|
is_ignoring_warnings = !(bool)GLOBAL_GET("debug/gdscript/warnings/enable");
|
||||||
@@ -4137,21 +4137,16 @@ bool GDScriptParser::rpc_annotation(const AnnotationNode *p_annotation, Node *p_
|
|||||||
Dictionary rpc_config;
|
Dictionary rpc_config;
|
||||||
rpc_config["rpc_mode"] = MultiplayerAPI::RPC_MODE_AUTHORITY;
|
rpc_config["rpc_mode"] = MultiplayerAPI::RPC_MODE_AUTHORITY;
|
||||||
if (!p_annotation->resolved_arguments.is_empty()) {
|
if (!p_annotation->resolved_arguments.is_empty()) {
|
||||||
int last = p_annotation->resolved_arguments.size() - 1;
|
|
||||||
if (p_annotation->resolved_arguments[last].get_type() == Variant::INT) {
|
|
||||||
rpc_config["channel"] = p_annotation->resolved_arguments[last].operator int();
|
|
||||||
last -= 1;
|
|
||||||
}
|
|
||||||
if (last > 3) {
|
|
||||||
push_error(R"(Invalid RPC arguments. At most 4 arguments are allowed, where only the last argument can be an integer to specify the channel.')", p_annotation);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned char locality_args = 0;
|
unsigned char locality_args = 0;
|
||||||
unsigned char permission_args = 0;
|
unsigned char permission_args = 0;
|
||||||
unsigned char transfer_mode_args = 0;
|
unsigned char transfer_mode_args = 0;
|
||||||
|
|
||||||
for (int i = last; i >= 0; i--) {
|
for (int i = 0; i < p_annotation->resolved_arguments.size(); i++) {
|
||||||
|
if (i == 3) {
|
||||||
|
rpc_config["channel"] = p_annotation->resolved_arguments[i].operator int();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
String arg = p_annotation->resolved_arguments[i].operator String();
|
String arg = p_annotation->resolved_arguments[i].operator String();
|
||||||
if (arg == "call_local") {
|
if (arg == "call_local") {
|
||||||
locality_args++;
|
locality_args++;
|
||||||
|
|||||||
Reference in New Issue
Block a user