From b31b6589e77540afe1faaaed5d37909fddeded94 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Mon, 2 Jan 2017 13:37:09 +0100 Subject: [PATCH] - fixed: PPointer was unable to handle pointers to class types for savegames. --- src/dobjtype.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/dobjtype.cpp b/src/dobjtype.cpp index ae26bc37d..15331c793 100644 --- a/src/dobjtype.cpp +++ b/src/dobjtype.cpp @@ -1652,7 +1652,11 @@ void PPointer::SetPointer(void *base, unsigned offset, TArray *special) void PPointer::WriteValue(FSerializer &ar, const char *key,const void *addr) const { - if (PointedType->IsKindOf(RUNTIME_CLASS(PClass))) + if (PointedType->IsKindOf(RUNTIME_CLASS(PClassClass))) + { + ar(key, *(PClass **)addr); + } + else if (PointedType->IsKindOf(RUNTIME_CLASS(PClass))) { ar(key, *(DObject **)addr); } @@ -1671,7 +1675,13 @@ void PPointer::WriteValue(FSerializer &ar, const char *key,const void *addr) con bool PPointer::ReadValue(FSerializer &ar, const char *key, void *addr) const { - if (PointedType->IsKindOf(RUNTIME_CLASS(PClass))) + if (PointedType->IsKindOf(RUNTIME_CLASS(PClassClass))) + { + bool res = false; + ::Serialize(ar, key, *(PClass **)addr, (PClass**)nullptr); + return res; + } + else if (PointedType->IsKindOf(RUNTIME_CLASS(PClass))) { bool res = false; ::Serialize(ar, key, *(DObject **)addr, nullptr, &res);