- moved new code to its proper location and started moving the replaced old archive code to a placeholder file for easy removal later.
This commit is contained in:
parent
65c6388d44
commit
c665cc53f9
13 changed files with 1391 additions and 1253 deletions
145
src/farchive.cpp
145
src/farchive.cpp
|
|
@ -1085,109 +1085,6 @@ FArchive &FArchive::SerializeObject (DObject *&object, PClass *type)
|
|||
}
|
||||
}
|
||||
|
||||
FArchive &FArchive::WriteObject (DObject *obj)
|
||||
{
|
||||
player_t *player;
|
||||
BYTE id[2];
|
||||
|
||||
if (obj == NULL)
|
||||
{
|
||||
id[0] = NULL_OBJ;
|
||||
Write (id, 1);
|
||||
}
|
||||
else if (obj == (DObject*)~0)
|
||||
{
|
||||
id[0] = M1_OBJ;
|
||||
Write (id, 1);
|
||||
}
|
||||
else if (obj->ObjectFlags & OF_EuthanizeMe)
|
||||
{
|
||||
// Objects that want to die are not saved to the archive, but
|
||||
// we leave the pointers to them alone.
|
||||
id[0] = NULL_OBJ;
|
||||
Write (id, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
PClass *type = obj->GetClass();
|
||||
DWORD *classarcid;
|
||||
|
||||
if (type == RUNTIME_CLASS(DObject))
|
||||
{
|
||||
//I_Error ("Tried to save an instance of DObject.\n"
|
||||
// "This should not happen.\n");
|
||||
id[0] = NULL_OBJ;
|
||||
Write (id, 1);
|
||||
}
|
||||
else if (NULL == (classarcid = ClassToArchive.CheckKey(type)))
|
||||
{
|
||||
// No instances of this class have been written out yet.
|
||||
// Write out the class, then write out the object. If this
|
||||
// is an actor controlled by a player, make note of that
|
||||
// so that it can be overridden when moving around in a hub.
|
||||
if (obj->IsKindOf (RUNTIME_CLASS (AActor)) &&
|
||||
(player = static_cast<AActor *>(obj)->player) &&
|
||||
player->mo == obj)
|
||||
{
|
||||
id[0] = NEW_PLYR_CLS_OBJ;
|
||||
id[1] = (BYTE)(player - players);
|
||||
Write (id, 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
id[0] = NEW_CLS_OBJ;
|
||||
Write (id, 1);
|
||||
}
|
||||
WriteClass (type);
|
||||
// Printf ("Make class %s (%u)\n", type->Name, m_File->Tell());
|
||||
MapObject (obj);
|
||||
obj->SerializeUserVars (*this);
|
||||
obj->Serialize (*this);
|
||||
obj->CheckIfSerialized ();
|
||||
}
|
||||
else
|
||||
{
|
||||
// An instance of this class has already been saved. If
|
||||
// this object has already been written, save a reference
|
||||
// to the saved object. Otherwise, save a reference to the
|
||||
// class, then save the object. Again, if this is a player-
|
||||
// controlled actor, remember that.
|
||||
DWORD *objarcid = ObjectToArchive.CheckKey(obj);
|
||||
|
||||
if (objarcid == NULL)
|
||||
{
|
||||
|
||||
if (obj->IsKindOf (RUNTIME_CLASS (AActor)) &&
|
||||
(player = static_cast<AActor *>(obj)->player) &&
|
||||
player->mo == obj)
|
||||
{
|
||||
id[0] = NEW_PLYR_OBJ;
|
||||
id[1] = (BYTE)(player - players);
|
||||
Write (id, 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
id[0] = NEW_OBJ;
|
||||
Write (id, 1);
|
||||
}
|
||||
WriteCount (*classarcid);
|
||||
// Printf ("Reuse class %s (%u)\n", type->Name, m_File->Tell());
|
||||
MapObject (obj);
|
||||
obj->SerializeUserVars (*this);
|
||||
obj->Serialize (*this);
|
||||
obj->CheckIfSerialized ();
|
||||
}
|
||||
else
|
||||
{
|
||||
id[0] = OLD_OBJ;
|
||||
Write (id, 1);
|
||||
WriteCount (*objarcid);
|
||||
}
|
||||
}
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
FArchive &FArchive::ReadObject (DObject* &obj, PClass *wanttype)
|
||||
{
|
||||
BYTE objHead;
|
||||
|
|
@ -1545,45 +1442,3 @@ void FArchive::UserReadClass (PClass *&type)
|
|||
}
|
||||
}
|
||||
|
||||
FArchive &operator<< (FArchive &arc, sector_t *&sec)
|
||||
{
|
||||
return arc.SerializePointer (sectors, (BYTE **)&sec, sizeof(*sectors));
|
||||
}
|
||||
|
||||
FArchive &operator<< (FArchive &arc, const sector_t *&sec)
|
||||
{
|
||||
return arc.SerializePointer (sectors, (BYTE **)&sec, sizeof(*sectors));
|
||||
}
|
||||
|
||||
FArchive &operator<< (FArchive &arc, line_t *&line)
|
||||
{
|
||||
return arc.SerializePointer (lines, (BYTE **)&line, sizeof(*lines));
|
||||
}
|
||||
|
||||
FArchive &operator<< (FArchive &arc, vertex_t *&vert)
|
||||
{
|
||||
return arc.SerializePointer (vertexes, (BYTE **)&vert, sizeof(*vertexes));
|
||||
}
|
||||
|
||||
FArchive &operator<< (FArchive &arc, side_t *&side)
|
||||
{
|
||||
return arc.SerializePointer (sides, (BYTE **)&side, sizeof(*sides));
|
||||
}
|
||||
|
||||
FArchive &operator<<(FArchive &arc, DAngle &ang)
|
||||
{
|
||||
arc << ang.Degrees;
|
||||
return arc;
|
||||
}
|
||||
|
||||
FArchive &operator<<(FArchive &arc, DVector3 &vec)
|
||||
{
|
||||
arc << vec.X << vec.Y << vec.Z;
|
||||
return arc;
|
||||
}
|
||||
|
||||
FArchive &operator<<(FArchive &arc, DVector2 &vec)
|
||||
{
|
||||
arc << vec.X << vec.Y;
|
||||
return arc;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue