From 30332f7e7dcc94072f4b0fd8fc9b1696e4f3ffc7 Mon Sep 17 00:00:00 2001 From: Relintai Date: Wed, 23 Oct 2019 20:34:08 +0200 Subject: [PATCH] Test implementation for sending objects across the network. --- entities/auras/aura_data.cpp | 33 +++++++++++++++++++++++++++++++-- entities/auras/aura_data.h | 11 +++++++++-- entities/entity.cpp | 12 +++++++++++- entities/entity.h | 1 + 4 files changed, 52 insertions(+), 5 deletions(-) diff --git a/entities/auras/aura_data.cpp b/entities/auras/aura_data.cpp index 18ece9d..efced48 100644 --- a/entities/auras/aura_data.cpp +++ b/entities/auras/aura_data.cpp @@ -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); } diff --git a/entities/auras/aura_data.h b/entities/auras/aura_data.h index 5c11dfe..0a778ab 100644 --- a/entities/auras/aura_data.h +++ b/entities/auras/aura_data.h @@ -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: diff --git a/entities/entity.cpp b/entities/entity.cpp index e6f67bc..d9deec0 100644 --- a/entities/entity.cpp +++ b/entities/entity.cpp @@ -2346,7 +2346,7 @@ void Entity::sadd_aura(Ref 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 aura) { @@ -2450,6 +2450,16 @@ void Entity::saura_refreshed(Ref aura) { SEND_RPC(rpc("caura_refreshed", aura), caura_refreshed(aura)); } +void Entity::rcadd_aura(Array arr) { + Ref ad; + ad.instance(); + + ad->set_owner(this); + ad->from_send_array(arr); + + cadd_aura(ad); +} + void Entity::cadd_aura(Ref aura) { ERR_FAIL_COND(!aura.is_valid()); diff --git a/entities/entity.h b/entities/entity.h index 473ffd2..55c37bf 100644 --- a/entities/entity.h +++ b/entities/entity.h @@ -433,6 +433,7 @@ public: void sremove_aura_dispelled(Ref aura); void saura_refreshed(Ref aura); + void rcadd_aura(Array aura); void cadd_aura(Ref aura); void cremove_aura(Ref aura); void cremove_aura_exact(Ref aura);