- store extended sector info directly in FLevelLocals.

This is safer than using the first sector's reference.
This commit is contained in:
Christoph Oelckers 2020-10-05 00:39:21 +02:00
parent 497c474fee
commit 9a994482b1
3 changed files with 4 additions and 9 deletions

View File

@ -432,6 +432,7 @@ public:
TArray<vertex_t> vertexes;
TArray<sector_t> sectors;
TArray<extsector_t> extsectors; // container for non-trivial sector information. sector_t must be trivially copyable for *_fakeflat to work as intended.
TArray<line_t*> linebuffer; // contains the line lists for the sectors.
TArray<subsector_t*> subsectorbuffer; // contains the subsector lists for the sectors.
TArray<line_t> lines;

View File

@ -1066,6 +1066,7 @@ void MapLoader::LoadSectors (MapData *map, FMissingTextureTracker &missingtex)
unsigned numsectors = lumplen / sizeof(mapsector_t);
Level->sectors.Alloc(numsectors);
Level->extsectors.Alloc(numsectors);
auto sectors = &Level->sectors[0];
memset (sectors, 0, numsectors*sizeof(sector_t));
@ -1078,12 +1079,9 @@ void MapLoader::LoadSectors (MapData *map, FMissingTextureTracker &missingtex)
ms = (mapsector_t*)msp.Data();
ss = sectors;
// Extended properties
sectors[0].e = new extsector_t[numsectors];
for (unsigned i = 0; i < numsectors; i++, ss++, ms++)
{
ss->e = &sectors[0].e[i];
ss->e = &Level->extsectors[i];
ss->Level = Level;
if (!map->HasBehavior) ss->Flags |= SECF_FLOORDROP;
ss->SetPlaneTexZ(sector_t::floor, (double)LittleShort(ms->floorheight));

View File

@ -314,11 +314,6 @@ void FLevelLocals::ClearLevelData()
DialogueRoots.Clear();
ClassRoots.Clear();
// delete allocated data in the level arrays.
if (sectors.Size() > 0)
{
delete[] sectors[0].e;
}
for (auto &sub : subsectors)
{
if (sub.BSP != nullptr) delete sub.BSP;
@ -335,6 +330,7 @@ void FLevelLocals::ClearLevelData()
canvasTextureInfo.EmptyList();
sections.Clear();
segs.Clear();
extsectors.Clear();
sectors.Clear();
linebuffer.Clear();
subsectorbuffer.Clear();