mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-11-13 07:58:04 +00:00
- serialize sound IDs as index, not name.
The name is not unique. This really needs something better.
This commit is contained in:
parent
935a880b63
commit
e28de10c00
2 changed files with 45 additions and 1 deletions
|
@ -1470,12 +1470,18 @@ FSerializer &Serialize(FSerializer &arc, const char *key, FName &value, FName *d
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
//
|
// Note that the sound name here is not reliable because it's a file name, not a unique alias.
|
||||||
|
// Currently the index is the only means to retrieve the sound on loading.
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
FSerializer &Serialize(FSerializer &arc, const char *key, FSoundID &sid, FSoundID *def)
|
FSerializer &Serialize(FSerializer &arc, const char *key, FSoundID &sid, FSoundID *def)
|
||||||
{
|
{
|
||||||
|
#if 1
|
||||||
|
int id = sid;
|
||||||
|
Serialize(arc, key, sid, def);
|
||||||
|
if (arc.isReading()) sid = FSoundID(id);
|
||||||
|
#else
|
||||||
if (arc.isWriting())
|
if (arc.isWriting())
|
||||||
{
|
{
|
||||||
if (!arc.w->inObject() || def == nullptr || sid != *def)
|
if (!arc.w->inObject() || def == nullptr || sid != *def)
|
||||||
|
@ -1508,6 +1514,7 @@ FSerializer &Serialize(FSerializer &arc, const char *key, FSoundID &sid, FSoundI
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
return arc;
|
return arc;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1610,3 +1617,5 @@ FSerializer &Serialize(FSerializer &arc, const char *key, NumericValue &value, N
|
||||||
}
|
}
|
||||||
return arc;
|
return arc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SaveRecords saveRecords;
|
||||||
|
|
|
@ -270,4 +270,39 @@ FSerializer &Serialize(FSerializer &arc, const char *key, TFlags<T, TT> &flags,
|
||||||
return Serialize(arc, key, flags.Value, def? &def->Value : nullptr);
|
return Serialize(arc, key, flags.Value, def? &def->Value : nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Automatic save record registration
|
||||||
|
|
||||||
|
struct SaveRecord
|
||||||
|
{
|
||||||
|
const char* GameModule;
|
||||||
|
void (*Handler)(FSerializer& arc);
|
||||||
|
|
||||||
|
SaveRecord(const char* nm, void (*handler)(FSerializer& arc));
|
||||||
|
};
|
||||||
|
|
||||||
|
struct SaveRecords
|
||||||
|
{
|
||||||
|
TArray<SaveRecord*> records;
|
||||||
|
|
||||||
|
void RunHandlers(const char* gameModule, FSerializer& arc)
|
||||||
|
{
|
||||||
|
for (auto record : records)
|
||||||
|
{
|
||||||
|
if (!strcmp(gameModule, record->GameModule))
|
||||||
|
{
|
||||||
|
record->Handler(arc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
extern SaveRecords saveRecords;
|
||||||
|
|
||||||
|
inline SaveRecord::SaveRecord(const char* nm, void (*handler)(FSerializer& arc))
|
||||||
|
{
|
||||||
|
GameModule = nm;
|
||||||
|
Handler = handler;
|
||||||
|
saveRecords.records.Push(this);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue