- removed the optional MAPINFO data handler and moved the 3 items still using it to the main parser file.

This thing made sense when GZDoom and ZDoom were separate projects to avoid having to change some core files for the added options.
Now, with only 3 ones remaining, one for FraggleScript and two for Extradata the overhead here is just too high. The 3 variables can just be moved to level_info_t without carrying along this much baggage.
This commit is contained in:
Christoph Oelckers 2018-12-27 17:38:11 +01:00
parent 2edf02d731
commit 6ae417725f
7 changed files with 38 additions and 171 deletions

View file

@ -887,7 +887,7 @@ void FParser::SF_Spawn(void)
{ {
t_return.value.mobj->Angles.Yaw = angle; t_return.value.mobj->Angles.Yaw = angle;
if (!DFraggleThinker::ActiveThinker->nocheckposition) if (!level.info->fs_nocheckposition)
{ {
if (!P_TestMobjLocation(t_return.value.mobj)) if (!P_TestMobjLocation(t_return.value.mobj))
{ {
@ -3723,21 +3723,9 @@ void FParser::SF_SetColor(void)
// set all sectors with tag // set all sectors with tag
FSSectorTagIterator itr(tagnum); FSSectorTagIterator itr(tagnum);
while ((i = itr.Next()) >= 0) while ((i = itr.Next()) >= 0)
{
if (!DFraggleThinker::ActiveThinker->setcolormaterial)
{ {
level.sectors[i].SetColor(color, 0); level.sectors[i].SetColor(color, 0);
} }
else
{
// little hack for testing the D64 color stuff.
for (int j = 0; j < 4; j++) level.sectors[i].SetSpecialColor(j, color);
// simulates 'nocoloredspritelighting' settings.
int v = (color.r + color.g + color.b) / 3;
v = (255 + v + v) / 3;
level.sectors[i].SetSpecialColor(sector_t::sprites, v, v, v);
}
}
} }
} }

View file

@ -55,56 +55,6 @@ public:
bool ParseInfo(MapData * map); bool ParseInfo(MapData * map);
}; };
struct FFsOptions : public FOptionalMapinfoData
{
FFsOptions()
{
identifier = "fragglescript";
nocheckposition = false;
setcolormaterial = false;
}
virtual FOptionalMapinfoData *Clone() const
{
FFsOptions *newopt = new FFsOptions;
newopt->identifier = identifier;
newopt->nocheckposition = nocheckposition;
newopt->setcolormaterial = setcolormaterial;
return newopt;
}
bool nocheckposition;
bool setcolormaterial;
};
DEFINE_MAP_OPTION(fs_nocheckposition, false)
{
FFsOptions *opt = info->GetOptData<FFsOptions>("fragglescript");
if (parse.CheckAssign())
{
parse.sc.MustGetNumber();
opt->nocheckposition = !!parse.sc.Number;
}
else
{
opt->nocheckposition = true;
}
}
DEFINE_MAP_OPTION(fs_setcolormaterial, false)
{
FFsOptions *opt = info->GetOptData<FFsOptions>("fragglescript");
if (parse.CheckAssign())
{
parse.sc.MustGetNumber();
opt->setcolormaterial = !!parse.sc.Number;
}
else
{
opt->setcolormaterial = true;
}
}
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// //
// Process the lump to strip all unneeded information from it // Process the lump to strip all unneeded information from it
@ -308,18 +258,6 @@ bool FScriptLoader::ParseInfo(MapData * map)
if (drownflag==-1) drownflag = (level.maptype != MAPTYPE_DOOM || fsglobal); if (drownflag==-1) drownflag = (level.maptype != MAPTYPE_DOOM || fsglobal);
if (!drownflag) level.airsupply=0; // Legacy doesn't to water damage so we need to check if it has to be disabled here. if (!drownflag) level.airsupply=0; // Legacy doesn't to water damage so we need to check if it has to be disabled here.
FFsOptions *opt = level.info->GetOptData<FFsOptions>("fragglescript", false);
if (opt != NULL)
{
DFraggleThinker::ActiveThinker->nocheckposition = opt->nocheckposition;
DFraggleThinker::ActiveThinker->setcolormaterial = opt->setcolormaterial;
}
else
{
DFraggleThinker::ActiveThinker->nocheckposition = false;
DFraggleThinker::ActiveThinker->setcolormaterial = false;
}
} }

View file

@ -394,7 +394,6 @@ DFraggleThinker::DFraggleThinker()
LevelScript->parent = global_script; LevelScript->parent = global_script;
GC::WriteBarrier(this, RunningScripts); GC::WriteBarrier(this, RunningScripts);
GC::WriteBarrier(this, LevelScript); GC::WriteBarrier(this, LevelScript);
nocheckposition = false;
} }
} }
@ -435,8 +434,7 @@ void DFraggleThinker::Serialize(FSerializer &arc)
Super::Serialize(arc); Super::Serialize(arc);
arc("levelscript", LevelScript) arc("levelscript", LevelScript)
("runningscripts", RunningScripts) ("runningscripts", RunningScripts)
("spawnedthings", SpawnedThings) ("spawnedthings", SpawnedThings);
("nocheckposition", nocheckposition);
} }
//========================================================================== //==========================================================================

View file

@ -681,8 +681,6 @@ public:
TObjPtr<DFsScript*> LevelScript; TObjPtr<DFsScript*> LevelScript;
TObjPtr<DRunningScript*> RunningScripts; TObjPtr<DRunningScript*> RunningScripts;
TArray<TObjPtr<AActor*> > SpawnedThings; TArray<TObjPtr<AActor*> > SpawnedThings;
bool nocheckposition = false;
bool setcolormaterial = false;
DFraggleThinker(); DFraggleThinker();
void OnDestroy() override; void OnDestroy() override;

View file

@ -263,25 +263,6 @@ class DScroller;
class FScanner; class FScanner;
struct level_info_t; struct level_info_t;
struct FOptionalMapinfoData
{
FOptionalMapinfoData *Next = nullptr;
FName identifier = NAME_None;
virtual ~FOptionalMapinfoData() {}
virtual FOptionalMapinfoData *Clone() const = 0;
};
struct FOptionalMapinfoDataPtr
{
FOptionalMapinfoData *Ptr;
FOptionalMapinfoDataPtr() throw() : Ptr(NULL) {}
~FOptionalMapinfoDataPtr() { if (Ptr!=NULL) delete Ptr; }
FOptionalMapinfoDataPtr(const FOptionalMapinfoDataPtr &p) throw() : Ptr(p.Ptr->Clone()) {}
FOptionalMapinfoDataPtr &operator= (FOptionalMapinfoDataPtr &p) throw() { Ptr = p.Ptr->Clone(); return *this; }
};
typedef TMap<FName, FOptionalMapinfoDataPtr> FOptData;
typedef TMap<int, FName> FMusicMap; typedef TMap<int, FName> FMusicMap;
enum EMapType : int enum EMapType : int
@ -398,7 +379,6 @@ struct level_info_t
double teamdamage; double teamdamage;
FOptData optdata;
FMusicMap MusicMap; FMusicMap MusicMap;
TArray<FSpecialAction> specialactions; TArray<FSpecialAction> specialactions;
@ -416,6 +396,10 @@ struct level_info_t
FVector3 skyrotatevector; FVector3 skyrotatevector;
FVector3 skyrotatevector2; FVector3 skyrotatevector2;
FString EDName;
FString acsName;
bool fs_nocheckposition;
level_info_t() level_info_t()
{ {
@ -434,24 +418,6 @@ struct level_info_t
deferred.Clear(); deferred.Clear();
} }
level_info_t *CheckLevelRedirect (); level_info_t *CheckLevelRedirect ();
template<class T>
T *GetOptData(FName id, bool create = true)
{
FOptionalMapinfoDataPtr *pdat = optdata.CheckKey(id);
if (pdat != NULL)
{
return static_cast<T*>(pdat->Ptr);
}
else if (create)
{
T *newobj = new T;
optdata[id].Ptr = newobj;
return newobj;
}
else return NULL;
}
}; };

View file

@ -1445,6 +1445,34 @@ DEFINE_MAP_OPTION(skyrotate2, false)
info->skyrotatevector2.MakeUnit(); info->skyrotatevector2.MakeUnit();
} }
DEFINE_MAP_OPTION(fs_nocheckposition, false)
{
if (parse.CheckAssign())
{
parse.sc.MustGetNumber();
info->fs_nocheckposition = !!parse.sc.Number;
}
else
{
info->fs_nocheckposition = true;
}
}
DEFINE_MAP_OPTION(edata, false)
{
parse.ParseAssign();
parse.sc.MustGetString();
info->EDName = parse.sc.String;
}
DEFINE_MAP_OPTION(loadacs, false)
{
parse.ParseAssign();
parse.sc.MustGetString();
info->acsName = parse.sc.String;
}
//========================================================================== //==========================================================================
// //
// All flag based map options // All flag based map options

View file

@ -50,42 +50,6 @@
#include "maploader.h" #include "maploader.h"
struct FEDOptions : public FOptionalMapinfoData
{
FEDOptions()
{
identifier = "EData";
}
virtual FOptionalMapinfoData *Clone() const
{
FEDOptions *newopt = new FEDOptions;
newopt->identifier = identifier;
newopt->EDName = EDName;
newopt->acsName = acsName;
return newopt;
}
FString EDName;
FString acsName;
};
DEFINE_MAP_OPTION(edata, false)
{
FEDOptions *opt = info->GetOptData<FEDOptions>("EData");
parse.ParseAssign();
parse.sc.MustGetString();
opt->EDName = parse.sc.String;
}
DEFINE_MAP_OPTION(loadacs, false)
{
FEDOptions *opt = info->GetOptData<FEDOptions>("EData");
parse.ParseAssign();
parse.sc.MustGetString();
opt->acsName = parse.sc.String;
}
static void parseLinedef(FScanner &sc, TMap<int, EDLinedef> &EDLines) static void parseLinedef(FScanner &sc, TMap<int, EDLinedef> &EDLines)
{ {
EDLinedef ld; EDLinedef ld;
@ -552,21 +516,9 @@ static void parseMapthing(FScanner &sc, TMap<int, EDMapthing> &EDThings)
void MapLoader::InitED() void MapLoader::InitED()
{ {
FString filename; FString filename = Level->info->EDName;
FScanner sc; FScanner sc;
const char *arg = Args->CheckValue("-edf");
if (arg != nullptr) filename = arg;
else
{
FEDOptions *opt = Level->info->GetOptData<FEDOptions>("EData", false);
if (opt != nullptr)
{
filename = opt->EDName;
}
}
if (filename.IsEmpty()) return; if (filename.IsEmpty()) return;
int lump = Wads.CheckNumForFullName(filename, true, ns_global); int lump = Wads.CheckNumForFullName(filename, true, ns_global);
if (lump == -1) return; if (lump == -1) return;
@ -705,10 +657,9 @@ void MapLoader::ProcessEDSectors()
void MapLoader::LoadMapinfoACSLump() void MapLoader::LoadMapinfoACSLump()
{ {
FEDOptions *opt = Level->info->GetOptData<FEDOptions>("EData", false); if (Level->info->acsName.IsNotEmpty())
if (opt != nullptr)
{ {
int lump = Wads.CheckNumForName(opt->acsName); int lump = Wads.CheckNumForName(Level->info->acsName);
if (lump >= 0) FBehavior::StaticLoadModule(lump); if (lump >= 0) FBehavior::StaticLoadModule(lump);
} }
} }