mirror of
https://github.com/godotengine/godot.git
synced 2026-01-05 06:11:29 +03:00
Revert "RPCMode refactor, more sync modes"
This commit is contained in:
@@ -40,6 +40,7 @@
|
||||
#include "viewport.h"
|
||||
|
||||
VARIANT_ENUM_CAST(Node::PauseMode);
|
||||
VARIANT_ENUM_CAST(Node::RPCMode);
|
||||
|
||||
void Node::_notification(int p_notification) {
|
||||
|
||||
@@ -484,18 +485,18 @@ bool Node::is_network_master() const {
|
||||
|
||||
/***** RPC CONFIG ********/
|
||||
|
||||
void Node::rpc_config(const StringName &p_method, MultiplayerAPI::RPCMode p_mode) {
|
||||
void Node::rpc_config(const StringName &p_method, RPCMode p_mode) {
|
||||
|
||||
if (p_mode == MultiplayerAPI::RPC_MODE_DISABLED) {
|
||||
if (p_mode == RPC_MODE_DISABLED) {
|
||||
data.rpc_methods.erase(p_method);
|
||||
} else {
|
||||
data.rpc_methods[p_method] = p_mode;
|
||||
};
|
||||
}
|
||||
|
||||
void Node::rset_config(const StringName &p_property, MultiplayerAPI::RPCMode p_mode) {
|
||||
void Node::rset_config(const StringName &p_property, RPCMode p_mode) {
|
||||
|
||||
if (p_mode == MultiplayerAPI::RPC_MODE_DISABLED) {
|
||||
if (p_mode == RPC_MODE_DISABLED) {
|
||||
data.rpc_properties.erase(p_property);
|
||||
} else {
|
||||
data.rpc_properties[p_property] = p_mode;
|
||||
@@ -717,14 +718,121 @@ void Node::set_custom_multiplayer(Ref<MultiplayerAPI> p_multiplayer) {
|
||||
multiplayer = p_multiplayer;
|
||||
}
|
||||
|
||||
const Map<StringName, MultiplayerAPI::RPCMode>::Element *Node::get_node_rpc_mode(const StringName &p_method) {
|
||||
const Map<StringName, Node::RPCMode>::Element *Node::get_node_rpc_mode(const StringName &p_method) {
|
||||
return data.rpc_methods.find(p_method);
|
||||
}
|
||||
|
||||
const Map<StringName, MultiplayerAPI::RPCMode>::Element *Node::get_node_rset_mode(const StringName &p_property) {
|
||||
const Map<StringName, Node::RPCMode>::Element *Node::get_node_rset_mode(const StringName &p_property) {
|
||||
return data.rpc_properties.find(p_property);
|
||||
}
|
||||
|
||||
bool Node::can_call_rpc(const StringName &p_method, int p_from) const {
|
||||
|
||||
const Map<StringName, RPCMode>::Element *E = data.rpc_methods.find(p_method);
|
||||
if (E) {
|
||||
|
||||
switch (E->get()) {
|
||||
|
||||
case RPC_MODE_DISABLED: {
|
||||
return false;
|
||||
} break;
|
||||
case RPC_MODE_REMOTE: {
|
||||
return true;
|
||||
} break;
|
||||
case RPC_MODE_SYNC: {
|
||||
return true;
|
||||
} break;
|
||||
case RPC_MODE_MASTER: {
|
||||
return is_network_master();
|
||||
} break;
|
||||
case RPC_MODE_SLAVE: {
|
||||
return !is_network_master() && p_from == get_network_master();
|
||||
} break;
|
||||
}
|
||||
}
|
||||
|
||||
if (get_script_instance()) {
|
||||
//attempt with script
|
||||
ScriptInstance::RPCMode rpc_mode = get_script_instance()->get_rpc_mode(p_method);
|
||||
|
||||
switch (rpc_mode) {
|
||||
|
||||
case ScriptInstance::RPC_MODE_DISABLED: {
|
||||
return false;
|
||||
} break;
|
||||
case ScriptInstance::RPC_MODE_REMOTE: {
|
||||
return true;
|
||||
} break;
|
||||
case ScriptInstance::RPC_MODE_SYNC: {
|
||||
return true;
|
||||
} break;
|
||||
case ScriptInstance::RPC_MODE_MASTER: {
|
||||
return is_network_master();
|
||||
} break;
|
||||
case ScriptInstance::RPC_MODE_SLAVE: {
|
||||
return !is_network_master() && p_from == get_network_master();
|
||||
} break;
|
||||
}
|
||||
}
|
||||
|
||||
ERR_PRINTS("RPC from " + itos(p_from) + " on unauthorized method attempted: " + String(p_method) + " on base: " + String(Variant(this)));
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Node::can_call_rset(const StringName &p_property, int p_from) const {
|
||||
|
||||
const Map<StringName, RPCMode>::Element *E = data.rpc_properties.find(p_property);
|
||||
if (E) {
|
||||
|
||||
switch (E->get()) {
|
||||
|
||||
case RPC_MODE_DISABLED: {
|
||||
return false;
|
||||
} break;
|
||||
case RPC_MODE_REMOTE: {
|
||||
return true;
|
||||
} break;
|
||||
case RPC_MODE_SYNC: {
|
||||
return true;
|
||||
} break;
|
||||
case RPC_MODE_MASTER: {
|
||||
return is_network_master();
|
||||
} break;
|
||||
case RPC_MODE_SLAVE: {
|
||||
return !is_network_master() && p_from == get_network_master();
|
||||
} break;
|
||||
}
|
||||
}
|
||||
|
||||
if (get_script_instance()) {
|
||||
//attempt with script
|
||||
ScriptInstance::RPCMode rpc_mode = get_script_instance()->get_rset_mode(p_property);
|
||||
|
||||
switch (rpc_mode) {
|
||||
|
||||
case ScriptInstance::RPC_MODE_DISABLED: {
|
||||
return false;
|
||||
} break;
|
||||
case ScriptInstance::RPC_MODE_REMOTE: {
|
||||
return true;
|
||||
} break;
|
||||
case ScriptInstance::RPC_MODE_SYNC: {
|
||||
return true;
|
||||
} break;
|
||||
case ScriptInstance::RPC_MODE_MASTER: {
|
||||
return is_network_master();
|
||||
} break;
|
||||
case ScriptInstance::RPC_MODE_SLAVE: {
|
||||
return !is_network_master() && p_from == get_network_master();
|
||||
} break;
|
||||
}
|
||||
}
|
||||
|
||||
ERR_PRINTS("RSET from " + itos(p_from) + " on unauthorized property attempted: " + String(p_property) + " on base: " + String(Variant(this)));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Node::can_process() const {
|
||||
|
||||
ERR_FAIL_COND_V(!is_inside_tree(), false);
|
||||
@@ -2694,6 +2802,12 @@ void Node::_bind_methods() {
|
||||
BIND_CONSTANT(NOTIFICATION_INTERNAL_PROCESS);
|
||||
BIND_CONSTANT(NOTIFICATION_INTERNAL_PHYSICS_PROCESS);
|
||||
|
||||
BIND_ENUM_CONSTANT(RPC_MODE_DISABLED);
|
||||
BIND_ENUM_CONSTANT(RPC_MODE_REMOTE);
|
||||
BIND_ENUM_CONSTANT(RPC_MODE_SYNC);
|
||||
BIND_ENUM_CONSTANT(RPC_MODE_MASTER);
|
||||
BIND_ENUM_CONSTANT(RPC_MODE_SLAVE);
|
||||
|
||||
BIND_ENUM_CONSTANT(PAUSE_MODE_INHERIT);
|
||||
BIND_ENUM_CONSTANT(PAUSE_MODE_STOP);
|
||||
BIND_ENUM_CONSTANT(PAUSE_MODE_PROCESS);
|
||||
|
||||
Reference in New Issue
Block a user