mirror of
https://github.com/godotengine/godot.git
synced 2025-10-20 00:13:30 +00:00
Add object encoding param to serialization methods
Network peers get_var/put_var File get_var/store_var GDScript/Mono/VisualScript bytes2var/var2bytes Add MultiplayerAPI.allow_object_decoding member which deprecates PacketPeer.allow_object_decoding. Break ABI compatibaility (API compatibility for GDNative).
This commit is contained in:
parent
53ab3a1ba9
commit
393e62b98a
23 changed files with 220 additions and 104 deletions
|
@ -768,11 +768,30 @@ void GDScriptFunctions::call(Function p_func, const Variant **p_args, int p_arg_
|
|||
(void)VariantParser::parse(&ss, r_ret, errs, line);
|
||||
} break;
|
||||
case VAR_TO_BYTES: {
|
||||
VALIDATE_ARG_COUNT(1);
|
||||
bool full_objects = false;
|
||||
if (p_arg_count < 1) {
|
||||
r_error.error = Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
|
||||
r_error.argument = 1;
|
||||
r_ret = Variant();
|
||||
return;
|
||||
} else if (p_arg_count > 2) {
|
||||
r_error.error = Variant::CallError::CALL_ERROR_TOO_MANY_ARGUMENTS;
|
||||
r_error.argument = 2;
|
||||
r_ret = Variant();
|
||||
} else if (p_arg_count == 2) {
|
||||
if (p_args[1]->get_type() != Variant::BOOL) {
|
||||
r_error.error = Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
|
||||
r_error.argument = 1;
|
||||
r_error.expected = Variant::BOOL;
|
||||
r_ret = Variant();
|
||||
return;
|
||||
}
|
||||
full_objects = *p_args[1];
|
||||
}
|
||||
|
||||
PoolByteArray barr;
|
||||
int len;
|
||||
Error err = encode_variant(*p_args[0], NULL, len);
|
||||
Error err = encode_variant(*p_args[0], NULL, len, full_objects);
|
||||
if (err) {
|
||||
r_error.error = Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
|
||||
r_error.argument = 0;
|
||||
|
@ -784,15 +803,35 @@ void GDScriptFunctions::call(Function p_func, const Variant **p_args, int p_arg_
|
|||
barr.resize(len);
|
||||
{
|
||||
PoolByteArray::Write w = barr.write();
|
||||
encode_variant(*p_args[0], w.ptr(), len);
|
||||
encode_variant(*p_args[0], w.ptr(), len, full_objects);
|
||||
}
|
||||
r_ret = barr;
|
||||
} break;
|
||||
case BYTES_TO_VAR: {
|
||||
VALIDATE_ARG_COUNT(1);
|
||||
bool allow_objects = false;
|
||||
if (p_arg_count < 1) {
|
||||
r_error.error = Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
|
||||
r_error.argument = 1;
|
||||
r_ret = Variant();
|
||||
return;
|
||||
} else if (p_arg_count > 2) {
|
||||
r_error.error = Variant::CallError::CALL_ERROR_TOO_MANY_ARGUMENTS;
|
||||
r_error.argument = 2;
|
||||
r_ret = Variant();
|
||||
} else if (p_arg_count == 2) {
|
||||
if (p_args[1]->get_type() != Variant::BOOL) {
|
||||
r_error.error = Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
|
||||
r_error.argument = 1;
|
||||
r_error.expected = Variant::BOOL;
|
||||
r_ret = Variant();
|
||||
return;
|
||||
}
|
||||
allow_objects = *p_args[1];
|
||||
}
|
||||
|
||||
if (p_args[0]->get_type() != Variant::POOL_BYTE_ARRAY) {
|
||||
r_error.error = Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
|
||||
r_error.argument = 0;
|
||||
r_error.argument = 1;
|
||||
r_error.expected = Variant::POOL_BYTE_ARRAY;
|
||||
r_ret = Variant();
|
||||
return;
|
||||
|
@ -802,7 +841,7 @@ void GDScriptFunctions::call(Function p_func, const Variant **p_args, int p_arg_
|
|||
Variant ret;
|
||||
{
|
||||
PoolByteArray::Read r = varr.read();
|
||||
Error err = decode_variant(ret, r.ptr(), varr.size(), NULL);
|
||||
Error err = decode_variant(ret, r.ptr(), varr.size(), NULL, allow_objects);
|
||||
if (err != OK) {
|
||||
r_ret = RTR("Not enough bytes for decoding bytes, or invalid format.");
|
||||
r_error.error = Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
|
||||
|
@ -1805,13 +1844,15 @@ MethodInfo GDScriptFunctions::get_info(Function p_func) {
|
|||
} break;
|
||||
case VAR_TO_BYTES: {
|
||||
|
||||
MethodInfo mi("var2bytes", PropertyInfo(Variant::NIL, "var", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_NIL_IS_VARIANT));
|
||||
MethodInfo mi("var2bytes", PropertyInfo(Variant::NIL, "var", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_NIL_IS_VARIANT), PropertyInfo(Variant::BOOL, "full_objects"));
|
||||
mi.default_arguments.push_back(false);
|
||||
mi.return_val.type = Variant::POOL_BYTE_ARRAY;
|
||||
return mi;
|
||||
} break;
|
||||
case BYTES_TO_VAR: {
|
||||
|
||||
MethodInfo mi(Variant::NIL, "bytes2var", PropertyInfo(Variant::POOL_BYTE_ARRAY, "bytes"));
|
||||
MethodInfo mi(Variant::NIL, "bytes2var", PropertyInfo(Variant::POOL_BYTE_ARRAY, "bytes"), PropertyInfo(Variant::BOOL, "allow_objects"));
|
||||
mi.default_arguments.push_back(false);
|
||||
mi.return_val.type = Variant::NIL;
|
||||
mi.return_val.usage |= PROPERTY_USAGE_NIL_IS_VARIANT;
|
||||
return mi;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue