Test implementation for sending objects across the network.

This commit is contained in:
Relintai 2019-10-23 20:34:08 +02:00
parent ae55dce96e
commit 30332f7e7d
4 changed files with 52 additions and 5 deletions

View File

@ -225,7 +225,6 @@ Dictionary AuraData::to_dict() {
void AuraData::from_dict(const Dictionary &dict) {
call("_from_dict", dict);
}
Dictionary AuraData::_to_dict() {
Dictionary dict;
@ -281,6 +280,27 @@ void AuraData::_from_dict(const Dictionary &dict) {
_unhandled_ticks = dict.get("unhandled_ticks", 0);
}
Array AuraData::to_send_array() {
return call("_to_send_array");
}
void AuraData::from_send_array(const Array &arr) {
call("_from_send_array", arr);
}
Array AuraData::_to_send_array() {
Array arr;
arr.append(_aura_id);
arr.append(_remaining_time);
return arr;
}
void AuraData::_from_send_array(const Array &arr) {
ERR_FAIL_COND(arr.size() < 2);
_aura_id = arr.get(0);
_remaining_time = arr.get(1);
}
AuraData::AuraData() {
_owner = NULL;
_aura_id = 0;
@ -375,7 +395,16 @@ void AuraData::_bind_methods() {
ClassDB::bind_method(D_METHOD("from_dict", "dict"), &AuraData::from_dict);
ClassDB::bind_method(D_METHOD("to_dict"), &AuraData::to_dict);
ClassDB::bind_method(D_METHOD("_from_dict", "dict"), &AuraData::_from_dict);
ClassDB::bind_method(D_METHOD("_to_dict"), &AuraData::_to_dict);
//Networking
BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::ARRAY, "arr"), "_to_send_array"));
BIND_VMETHOD(MethodInfo("_from_send_array", PropertyInfo(Variant::ARRAY, "arr")));
ClassDB::bind_method(D_METHOD("to_send_array"), &AuraData::to_send_array);
ClassDB::bind_method(D_METHOD("from_send_array", "arr"), &AuraData::from_send_array);
ClassDB::bind_method(D_METHOD("_to_send_array"), &AuraData::_to_send_array);
ClassDB::bind_method(D_METHOD("_from_send_array", "arr"), &AuraData::_from_send_array);
}

View File

@ -1,8 +1,11 @@
#ifndef AURA_DATA_H
#define AURA_DATA_H
#include "../../spell_enums.h"
#include "core/reference.h"
#include "core/array.h"
#include "core/dictionary.h"
#include "../../spell_enums.h"
class Aura;
class Entity;
@ -69,10 +72,14 @@ public:
Dictionary to_dict();
void from_dict(const Dictionary &dict);
Dictionary _to_dict();
void _from_dict(const Dictionary &dict);
Array to_send_array();
void from_send_array(const Array &arr);
Array _to_send_array();
void _from_send_array(const Array &arr);
AuraData();
protected:

View File

@ -2346,7 +2346,7 @@ void Entity::sadd_aura(Ref<AuraData> aura) {
emit_signal("saura_added", aura);
if (!aura->get_aura()->get_hide())
SEND_RPC(rpc("cadd_aura", aura), cadd_aura(aura));
SEND_RPC(rpc("rcadd_aura", aura), cadd_aura(aura));
}
void Entity::sremove_aura(Ref<AuraData> aura) {
@ -2450,6 +2450,16 @@ void Entity::saura_refreshed(Ref<AuraData> aura) {
SEND_RPC(rpc("caura_refreshed", aura), caura_refreshed(aura));
}
void Entity::rcadd_aura(Array arr) {
Ref<AuraData> ad;
ad.instance();
ad->set_owner(this);
ad->from_send_array(arr);
cadd_aura(ad);
}
void Entity::cadd_aura(Ref<AuraData> aura) {
ERR_FAIL_COND(!aura.is_valid());

View File

@ -433,6 +433,7 @@ public:
void sremove_aura_dispelled(Ref<AuraData> aura);
void saura_refreshed(Ref<AuraData> aura);
void rcadd_aura(Array aura);
void cadd_aura(Ref<AuraData> aura);
void cremove_aura(Ref<AuraData> aura);
void cremove_aura_exact(Ref<AuraData> aura);