- fixed: Polyobjects did not save their specialdata pointer.

- fixed: DMovePoly did not save its m_Speedv member.
This commit is contained in:
Christoph Oelckers 2016-05-22 01:26:13 +02:00
parent d767d10322
commit f184438032
4 changed files with 32 additions and 24 deletions

View file

@ -578,6 +578,7 @@ void P_SerializePolyobjs (FArchive &arc)
for(i = 0, po = polyobjs; i < po_NumPolyobjs; i++, po++)
{
arc << po->tag << po->Angle << po->StartSpot.pos << po->interpolation << po->bBlocked << po->bHasPortals;
arc << po->specialdata;
}
}
else
@ -605,6 +606,10 @@ void P_SerializePolyobjs (FArchive &arc)
arc << angle << delta << po->interpolation;
arc << po->bBlocked;
arc << po->bHasPortals;
if (SaveVersion >= 4548)
{
arc << po->specialdata;
}
po->RotatePolyobj (angle, true);
delta -= po->StartSpot.pos;

View file

@ -68,27 +68,6 @@ inline FArchive &operator<< (FArchive &arc, podoortype_t &type)
return arc;
}
class DPolyAction : public DThinker
{
DECLARE_CLASS (DPolyAction, DThinker)
HAS_OBJECT_POINTERS
public:
DPolyAction (int polyNum);
void Serialize (FArchive &arc);
void Destroy();
void Stop();
double GetSpeed() const { return m_Speed; }
void StopInterpolation ();
protected:
DPolyAction ();
int m_PolyObj;
double m_Speed;
double m_Dist;
TObjPtr<DInterpolation> m_Interpolation;
void SetInterpolation ();
};
class DRotatePoly : public DPolyAction
{
@ -302,6 +281,10 @@ void DMovePoly::Serialize (FArchive &arc)
{
Super::Serialize (arc);
arc << m_Angle << m_Speed;
if (SaveVersion >= 4548)
{
arc << m_Speedv;
}
}
DMovePoly::DMovePoly (int polyNum)

View file

@ -5,7 +5,27 @@
#include "r_defs.h"
#include "m_bbox.h"
class DPolyAction;
class DPolyAction : public DThinker
{
DECLARE_CLASS(DPolyAction, DThinker)
HAS_OBJECT_POINTERS
public:
DPolyAction(int polyNum);
void Serialize(FArchive &arc);
void Destroy();
void Stop();
double GetSpeed() const { return m_Speed; }
void StopInterpolation();
protected:
DPolyAction();
int m_PolyObj;
double m_Speed;
double m_Dist;
TObjPtr<DInterpolation> m_Interpolation;
void SetInterpolation();
};
struct FPolyVertex
{
@ -67,7 +87,7 @@ struct FPolyObj
int seqType;
double Size; // polyobj size (area of POLY_AREAUNIT == size of FRACUNIT)
FPolyNode *subsectorlinks;
DPolyAction *specialdata; // pointer to a thinker, if the poly is moving
TObjPtr<DPolyAction> specialdata; // pointer to a thinker, if the poly is moving
TObjPtr<DInterpolation> interpolation;
FPolyObj();

View file

@ -76,7 +76,7 @@ const char *GetVersionString();
// Use 4500 as the base git save version, since it's higher than the
// SVN revision ever got.
#define SAVEVER 4547
#define SAVEVER 4548
#define SAVEVERSTRINGIFY2(x) #x
#define SAVEVERSTRINGIFY(x) SAVEVERSTRINGIFY2(x)