This commit is contained in:
raa-eruanna 2016-10-16 04:02:34 -04:00
commit 135c861247
10 changed files with 23 additions and 4 deletions

View File

@ -201,6 +201,7 @@ enum EObjectFlags
OF_EuthanizeMe = 1 << 5, // Object wants to die OF_EuthanizeMe = 1 << 5, // Object wants to die
OF_Cleanup = 1 << 6, // Object is now being deleted by the collector OF_Cleanup = 1 << 6, // Object is now being deleted by the collector
OF_YesReallyDelete = 1 << 7, // Object is being deleted outside the collector, and this is okay, so don't print a warning OF_YesReallyDelete = 1 << 7, // Object is being deleted outside the collector, and this is okay, so don't print a warning
OF_Transient = 1 << 11, // Object should not be archived (references to it will be nulled on disk)
OF_WhiteBits = OF_White0 | OF_White1, OF_WhiteBits = OF_White0 | OF_White1,
OF_MarkBits = OF_WhiteBits | OF_Black, OF_MarkBits = OF_WhiteBits | OF_Black,
@ -573,6 +574,9 @@ protected:
} }
}; };
// When you write to a pointer to an Object, you must call this for
// proper bookkeeping in case the Object holding this pointer has
// already been processed by the GC.
static inline void GC::WriteBarrier(DObject *pointing, DObject *pointed) static inline void GC::WriteBarrier(DObject *pointing, DObject *pointed)
{ {
if (pointed != NULL && pointed->IsWhite() && pointing->IsBlack()) if (pointed != NULL && pointed->IsWhite() && pointing->IsBlack())

View File

@ -1081,6 +1081,7 @@ void gl_AttachLight(AActor *actor, unsigned int count, const FLightDefaults *lig
light = Spawn<ADynamicLight>(actor->Pos(), NO_REPLACE); light = Spawn<ADynamicLight>(actor->Pos(), NO_REPLACE);
light->target = actor; light->target = actor;
light->owned = true; light->owned = true;
light->ObjectFlags |= OF_Transient;
actor->dynamiclights.Push(light); actor->dynamiclights.Push(light);
} }
light->flags2&=~MF2_DORMANT; light->flags2&=~MF2_DORMANT;

View File

@ -1230,7 +1230,6 @@ void FGLInterface::StateChanged(AActor *actor)
void FGLInterface::StartSerialize(FSerializer &arc) void FGLInterface::StartSerialize(FSerializer &arc)
{ {
gl_DeleteAllAttachedLights();
if (arc.BeginObject("glinfo")) if (arc.BeginObject("glinfo"))
{ {
arc("fogdensity", fogdensity) arc("fogdensity", fogdensity)
@ -1242,8 +1241,11 @@ void FGLInterface::StartSerialize(FSerializer &arc)
void FGLInterface::EndSerialize(FSerializer &arc) void FGLInterface::EndSerialize(FSerializer &arc)
{ {
gl_RecreateAllAttachedLights(); if (arc.isReading())
if (arc.isReading()) gl_InitPortals(); {
gl_RecreateAllAttachedLights();
gl_InitPortals();
}
} }
//=========================================================================== //===========================================================================

View File

@ -3799,6 +3799,8 @@ void AActor::Tick ()
else if (Z() <= floorz) else if (Z() <= floorz)
{ {
Crash(); Crash();
if (ObjectFlags & OF_EuthanizeMe)
return; // actor was destroyed
} }
CheckPortalTransition(true); CheckPortalTransition(true);

View File

@ -1451,7 +1451,7 @@ FSerializer &Serialize(FSerializer &arc, const char *key, DObject *&value, DObje
{ {
ndx = -1; ndx = -1;
} }
else if (value->ObjectFlags & OF_EuthanizeMe) else if (value->ObjectFlags & (OF_EuthanizeMe | OF_Transient))
{ {
return arc; return arc;
} }

View File

@ -161,6 +161,16 @@ FAnimDef *FTextureManager::AddComplexAnim (FTextureID picnum, const TArray<FAnim
// [RH] Rewritten to support BOOM ANIMATED lump but also make absolutely // [RH] Rewritten to support BOOM ANIMATED lump but also make absolutely
// no assumptions about how the compiler packs the animdefs array. // no assumptions about how the compiler packs the animdefs array.
// //
// Since animdef_t no longer exists in ZDoom, here is some documentation
// of the format:
//
// This is an array of <n> entries, terminated by a 0xFF byte. Each entry
// is 23 bytes long and consists of the following fields:
// Byte 0: Bit 1 set for wall texture, clear for flat texture.
// Bytes 1-9: '\0'-terminated name of first texture.
// Bytes 10-18: '\0'-terminated name of last texture.
// Bytes 19-22: Tics per frame (stored in little endian order).
//
//========================================================================== //==========================================================================
CVAR(Bool, debuganimated, false, 0) CVAR(Bool, debuganimated, false, 0)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.