void P_SerializePolyobjs (FArchive &arc) { int i; polyobj_t *po; if (arc.IsStoring ()) { arc << (int)ASEG_POLYOBJS << po_NumPolyobjs; for(i = 0, po = polyobjs; i < po_NumPolyobjs; i++, po++) { arc << po->tag << po->angle << po->startSpot[0] << po->startSpot[1] << po->startSpot[2]; } } else { int data; angle_t angle; fixed_t deltaX, deltaY, deltaZ; arc >> data; if (data != ASEG_POLYOBJS) I_Error ("Polyobject marker missing"); arc >> data; if (data != po_NumPolyobjs) { I_Error ("UnarchivePolyobjs: Bad polyobj count"); } for (i = 0, po = polyobjs; i < po_NumPolyobjs; i++, po++) { arc >> data; if (data != po->tag) { I_Error ("UnarchivePolyobjs: Invalid polyobj tag"); } arc >> angle; PO_RotatePolyobj (po->tag, angle); arc >> deltaX >> deltaY >> deltaZ; deltaX -= po->startSpot[0]; deltaY -= po->startSpot[1]; deltaZ -= po->startSpot[2]; PO_MovePolyobj (po->tag, deltaX, deltaY); } } }
void P_SerializePolyobjs (FArchive &arc) { int i; FPolyObj *po; if (arc.IsStoring ()) { int seg = ASEG_POLYOBJS; arc << seg << po_NumPolyobjs; for(i = 0, po = polyobjs; i < po_NumPolyobjs; i++, po++) { arc << po->tag << po->angle << po->startSpot[0] << po->startSpot[1] << po->interpolation; } } else { int data; angle_t angle; fixed_t deltaX, deltaY; arc << data; if (data != ASEG_POLYOBJS) I_Error ("Polyobject marker missing"); arc << data; if (data != po_NumPolyobjs) { I_Error ("UnarchivePolyobjs: Bad polyobj count"); } for (i = 0, po = polyobjs; i < po_NumPolyobjs; i++, po++) { arc << data; if (data != po->tag) { I_Error ("UnarchivePolyobjs: Invalid polyobj tag"); } arc << angle; PO_RotatePolyobj (po->tag, angle); arc << deltaX << deltaY << po->interpolation; deltaX -= po->startSpot[0]; deltaY -= po->startSpot[1]; PO_MovePolyobj (po->tag, deltaX, deltaY, true); } } }