- a few more

This commit is contained in:
Christoph Oelckers 2016-09-19 13:36:58 +02:00
parent 7edf4c1afc
commit a542e99143
7 changed files with 228 additions and 32 deletions

View file

@ -1,7 +1,7 @@
#include "a_pickups.h"
#include "a_weaponpiece.h"
#include "doomstat.h"
#include "farchive.h"
#include "serializer.h"
IMPLEMENT_CLASS(PClassWeaponPiece)
IMPLEMENT_CLASS (AWeaponHolder)
@ -17,10 +17,11 @@ void PClassWeaponPiece::ReplaceClassRef(PClass *oldclass, PClass *newclass)
}
void AWeaponHolder::Serialize(FArchive &arc)
void AWeaponHolder::Serialize(FSerializer &arc)
{
Super::Serialize(arc);
arc << PieceMask << PieceWeapon;
arc("piecemask", PieceMask)
("pieceweapon", PieceWeapon);
}
@ -29,10 +30,13 @@ IMPLEMENT_POINTY_CLASS (AWeaponPiece)
END_POINTERS
void AWeaponPiece::Serialize(FArchive &arc)
void AWeaponPiece::Serialize(FSerializer &arc)
{
Super::Serialize (arc);
arc << WeaponClass << FullWeapon << PieceValue;
auto def = (AWeaponPiece*)GetDefault();
arc("weaponclass", WeaponClass, def->WeaponClass)
("fullweapon", FullWeapon)
("piecevalue", PieceValue, def->PieceValue);
}
//==========================================================================

View file

@ -15,7 +15,8 @@ class AWeaponPiece : public AInventory
protected:
bool PrivateShouldStay ();
public:
void Serialize(FArchive &arc);
DECLARE_OLD_SERIAL
void Serialize(FSerializer &arc);
bool TryPickup (AActor *&toucher);
bool TryPickupRestricted (AActor *&toucher);
bool ShouldStay ();
@ -23,7 +24,7 @@ public:
virtual void PlayPickupSound (AActor *toucher);
int PieceValue;
PClassWeapon *WeaponClass;
PClassActor *WeaponClass;
TObjPtr<AWeapon> FullWeapon;
};
@ -35,7 +36,8 @@ class AWeaponHolder : public AInventory
public:
int PieceMask;
const PClass * PieceWeapon;
PClassActor * PieceWeapon;
void Serialize(FArchive &arc);
DECLARE_OLD_SERIAL
void Serialize(FSerializer &arc);
};

View file

@ -39,7 +39,7 @@
#include "p_local.h"
#include "i_system.h"
#include "po_man.h"
#include "farchive.h"
#include "serializer.h"
//==========================================================================
//
@ -66,7 +66,8 @@ public:
void UpdateInterpolation();
void Restore();
void Interpolate(double smoothratio);
void Serialize(FArchive &arc);
DECLARE_OLD_SERIAL
virtual void Serialize(FSerializer &arc);
size_t PointerSubstitution (DObject *old, DObject *notOld);
size_t PropagateMark();
};
@ -94,7 +95,8 @@ public:
void UpdateInterpolation();
void Restore();
void Interpolate(double smoothratio);
void Serialize(FArchive &arc);
DECLARE_OLD_SERIAL
virtual void Serialize(FSerializer &arc);
};
@ -121,7 +123,8 @@ public:
void UpdateInterpolation();
void Restore();
void Interpolate(double smoothratio);
void Serialize(FArchive &arc);
DECLARE_OLD_SERIAL
virtual void Serialize(FSerializer &arc);
};
//==========================================================================
@ -147,7 +150,8 @@ public:
void UpdateInterpolation();
void Restore();
void Interpolate(double smoothratio);
void Serialize(FArchive &arc);
DECLARE_OLD_SERIAL
virtual void Serialize(FSerializer &arc);
};
@ -370,11 +374,11 @@ void DInterpolation::Destroy()
//
//==========================================================================
void DInterpolation::Serialize(FArchive &arc)
void DInterpolation::Serialize(FSerializer &arc)
{
Super::Serialize(arc);
arc << refcount;
if (arc.IsLoading())
arc("refcount", refcount);
if (arc.isReading())
{
interpolator.AddInterpolation(this);
}
@ -516,10 +520,14 @@ void DSectorPlaneInterpolation::Interpolate(double smoothratio)
//
//==========================================================================
void DSectorPlaneInterpolation::Serialize(FArchive &arc)
void DSectorPlaneInterpolation::Serialize(FSerializer &arc)
{
Super::Serialize(arc);
arc << sector << ceiling << oldheight << oldtexz << attached;
arc("sector", sector)
("ceiling", ceiling)
("oldheight", oldheight)
("oldtexz", oldtexz)
("attached", attached);
}
//==========================================================================
@ -648,10 +656,13 @@ void DSectorScrollInterpolation::Interpolate(double smoothratio)
//
//==========================================================================
void DSectorScrollInterpolation::Serialize(FArchive &arc)
void DSectorScrollInterpolation::Serialize(FSerializer &arc)
{
Super::Serialize(arc);
arc << sector << ceiling << oldx << oldy;
arc("sector", sector)
("ceiling", ceiling)
("oldx", oldx)
("oldy", oldy);
}
@ -739,10 +750,13 @@ void DWallScrollInterpolation::Interpolate(double smoothratio)
//
//==========================================================================
void DWallScrollInterpolation::Serialize(FArchive &arc)
void DWallScrollInterpolation::Serialize(FSerializer &arc)
{
Super::Serialize(arc);
arc << side << part << oldx << oldy;
arc("side", side)
("part", part)
("oldx", oldx)
("oldy", oldy);
}
//==========================================================================
@ -855,15 +869,14 @@ void DPolyobjInterpolation::Interpolate(double smoothratio)
//
//==========================================================================
void DPolyobjInterpolation::Serialize(FArchive &arc)
void DPolyobjInterpolation::Serialize(FSerializer &arc)
{
Super::Serialize(arc);
int po = int(poly - polyobjs);
arc << po << oldverts;
poly = polyobjs + po;
arc << oldcx << oldcy;
if (arc.IsLoading()) bakverts.Resize(oldverts.Size());
arc("poly", poly)
("oldverts", oldverts)
("oldcx", oldcx)
("oldcy", oldcy);
if (arc.isReading()) bakverts.Resize(oldverts.Size());
}

View file

@ -31,7 +31,8 @@ public:
virtual void UpdateInterpolation() = 0;
virtual void Restore() = 0;
virtual void Interpolate(double smoothratio) = 0;
virtual void Serialize(FArchive &arc);
DECLARE_OLD_SERIAL
virtual void Serialize(FSerializer &arc);
};
//==========================================================================

View file

@ -3,7 +3,9 @@
#define RAPIDJSON_HAS_CXX11_RANGE_FOR 1
#define RAPIDJSON_PARSE_DEFAULT_FLAGS kParseFullPrecisionFlag
//#define PRETTY
#ifdef _DEBUG
#define PRETTY
#endif
#include "rapidjson/rapidjson.h"
#include "rapidjson/writer.h"
@ -26,6 +28,7 @@
#include "d_player.h"
#include "r_data/r_interpolate.h"
#include "g_shared/a_sharedglobal.h"
#include "po_man.h"
char nulspace[1024 * 1024 * 4];
@ -802,6 +805,11 @@ FSerializer &SerializePointer(FSerializer &arc, const char *key, T *&value, T **
return arc;
}
FSerializer &Serialize(FSerializer &arc, const char *key, FPolyObj *&value, FPolyObj **defval)
{
return SerializePointer(arc, key, value, defval, polyobjs);
}
FSerializer &Serialize(FSerializer &arc, const char *key, side_t *&value, side_t **defval)
{
return SerializePointer(arc, key, value, defval, sides);

View file

@ -26,6 +26,10 @@ public:
public:
~FSerializer()
{
Close();
}
bool OpenWriter();
bool OpenReader(const char *buffer, size_t length);
void Close();
@ -114,6 +118,7 @@ FSerializer &Serialize(FSerializer &arc, const char *key, uint16_t &value, uint1
FSerializer &Serialize(FSerializer &arc, const char *key, double &value, double *defval);
FSerializer &Serialize(FSerializer &arc, const char *key, float &value, float *defval);
FSerializer &Serialize(FSerializer &arc, const char *key, side_t *&value, side_t **defval);
FSerializer &Serialize(FSerializer &arc, const char *key, FPolyObj *&value, FPolyObj **defval);
FSerializer &Serialize(FSerializer &arc, const char *key, sector_t *&value, sector_t **defval);
FSerializer &Serialize(FSerializer &arc, const char *key, player_t *&value, player_t **defval);
FSerializer &Serialize(FSerializer &arc, const char *key, line_t *&value, line_t **defval);

View file

@ -2,6 +2,7 @@
#include "a_doomglobal.h"
#include "ravenshared.h"
#include "a_weaponpiece.h"
// For NULL states, which aren't owned by any actor, the owner
// is recorded as AActor with the following state. AActor should
@ -874,6 +875,168 @@ void APuzzleItem::Serialize(FArchive &arc)
arc << PuzzleItemNumber;
}
class DSectorPlaneInterpolation : public DInterpolation
{
DECLARE_CLASS(DSectorPlaneInterpolation, DInterpolation)
sector_t *sector;
double oldheight, oldtexz;
double bakheight, baktexz;
bool ceiling;
TArray<DInterpolation *> attached;
public:
DSectorPlaneInterpolation() {}
DSectorPlaneInterpolation(sector_t *sector, bool plane, bool attach);
void Destroy();
void UpdateInterpolation();
void Restore();
void Interpolate(double smoothratio);
DECLARE_OLD_SERIAL
virtual void Serialize(FSerializer &arc);
size_t PointerSubstitution(DObject *old, DObject *notOld);
size_t PropagateMark();
};
//==========================================================================
//
//
//
//==========================================================================
class DSectorScrollInterpolation : public DInterpolation
{
DECLARE_CLASS(DSectorScrollInterpolation, DInterpolation)
sector_t *sector;
double oldx, oldy;
double bakx, baky;
bool ceiling;
public:
DSectorScrollInterpolation() {}
DSectorScrollInterpolation(sector_t *sector, bool plane);
void Destroy();
void UpdateInterpolation();
void Restore();
void Interpolate(double smoothratio);
DECLARE_OLD_SERIAL
virtual void Serialize(FSerializer &arc);
};
//==========================================================================
//
//
//
//==========================================================================
class DWallScrollInterpolation : public DInterpolation
{
DECLARE_CLASS(DWallScrollInterpolation, DInterpolation)
side_t *side;
int part;
double oldx, oldy;
double bakx, baky;
public:
DWallScrollInterpolation() {}
DWallScrollInterpolation(side_t *side, int part);
void Destroy();
void UpdateInterpolation();
void Restore();
void Interpolate(double smoothratio);
DECLARE_OLD_SERIAL
virtual void Serialize(FSerializer &arc);
};
//==========================================================================
//
//
//
//==========================================================================
class DPolyobjInterpolation : public DInterpolation
{
DECLARE_CLASS(DPolyobjInterpolation, DInterpolation)
FPolyObj *poly;
TArray<double> oldverts, bakverts;
double oldcx, oldcy;
double bakcx, bakcy;
public:
DPolyobjInterpolation() {}
DPolyobjInterpolation(FPolyObj *poly);
void Destroy();
void UpdateInterpolation();
void Restore();
void Interpolate(double smoothratio);
DECLARE_OLD_SERIAL
virtual void Serialize(FSerializer &arc);
};
void DInterpolation::Serialize(FArchive &arc)
{
Super::Serialize(arc);
arc << refcount;
if (arc.IsLoading())
{
interpolator.AddInterpolation(this);
}
}
//==========================================================================
//
//
//
//==========================================================================
void DSectorPlaneInterpolation::Serialize(FArchive &arc)
{
Super::Serialize(arc);
arc << sector << ceiling << oldheight << oldtexz << attached;
}
void DSectorScrollInterpolation::Serialize(FArchive &arc)
{
Super::Serialize(arc);
arc << sector << ceiling << oldx << oldy;
}
void DWallScrollInterpolation::Serialize(FArchive &arc)
{
Super::Serialize(arc);
arc << side << part << oldx << oldy;
}
void DPolyobjInterpolation::Serialize(FArchive &arc)
{
Super::Serialize(arc);
int po = int(poly - polyobjs);
arc << po << oldverts;
poly = polyobjs + po;
arc << oldcx << oldcy;
if (arc.IsLoading()) bakverts.Resize(oldverts.Size());
}
void AWeaponHolder::Serialize(FArchive &arc)
{
Super::Serialize(arc);
arc << PieceMask << PieceWeapon;
}
void AWeaponPiece::Serialize(FArchive &arc)
{
Super::Serialize(arc);
arc << WeaponClass << FullWeapon << PieceValue;
}
#endif