From ddad669c31c9c75d5c3a96920a0715fd8a161eed Mon Sep 17 00:00:00 2001 From: danij Date: Tue, 29 Jul 2014 00:35:27 +0100 Subject: [PATCH] libdoomsday|DED: Store Episode definitions in a DEDRegister --- doomsday/client/src/def_main.cpp | 1 + .../libdoomsday/include/doomsday/defs/ded.h | 7 +++++++ doomsday/libdoomsday/src/defs/ded.cpp | 20 +++++++++++++++++++ doomsday/libdoomsday/src/defs/episode.cpp | 1 + 4 files changed, 29 insertions(+) diff --git a/doomsday/client/src/def_main.cpp b/doomsday/client/src/def_main.cpp index 585048e039..02ff78429c 100644 --- a/doomsday/client/src/def_main.cpp +++ b/doomsday/client/src/def_main.cpp @@ -1562,6 +1562,7 @@ void Def_Read() LOG_RES_MSG(_E(b) "Definitions:"); de::String str; QTextStream os(&str); + os << defCountMsg(defs.episodes.size(), "episodes"); os << defCountMsg(defs.groups.size(), "animation groups"); os << defCountMsg(defs.compositeFonts.size(), "composite fonts"); os << defCountMsg(defs.details.size(), "detail textures"); diff --git a/doomsday/libdoomsday/include/doomsday/defs/ded.h b/doomsday/libdoomsday/include/doomsday/defs/ded.h index bebe54e96c..5981b9194e 100644 --- a/doomsday/libdoomsday/include/doomsday/defs/ded.h +++ b/doomsday/libdoomsday/include/doomsday/defs/ded.h @@ -55,6 +55,9 @@ struct LIBDOOMSDAY_PUBLIC ded_s //DEDArray flags; DEDRegister flags; + // Episodes. + DEDRegister episodes; + // Map object information. DEDArray mobjs; @@ -135,6 +138,8 @@ struct LIBDOOMSDAY_PUBLIC ded_s int addFlag(char const *id, int value); + int addEpisode(); + int addMapInfo(); int addModel(); @@ -161,6 +166,8 @@ struct LIBDOOMSDAY_PUBLIC ded_s int getStateNum(char const *id) const; + int getEpisodeNum(de::String const &id) const; + int getMapInfoNum(de::Uri const &uri) const; int getModelNum(char const *id) const; diff --git a/doomsday/libdoomsday/src/defs/ded.cpp b/doomsday/libdoomsday/src/defs/ded.cpp index 8f14d8b6d2..3f175a0f2d 100644 --- a/doomsday/libdoomsday/src/defs/ded.cpp +++ b/doomsday/libdoomsday/src/defs/ded.cpp @@ -18,6 +18,7 @@ */ #include "doomsday/defs/ded.h" +#include "doomsday/defs/episode.h" #include "doomsday/defs/mapinfo.h" #include "doomsday/defs/model.h" #include "doomsday/defs/sky.h" @@ -50,11 +51,13 @@ float ded_ptcstage_t::particleRadius(int ptcIDX) const ded_s::ded_s() : flags (names.addRecord("flags")) + , episodes(names.addRecord("episodes")) , mapInfos(names.addRecord("mapInfos")) , models (names.addRecord("models")) , skies (names.addRecord("skies")) { flags.addLookupKey("id"); + episodes.addLookupKey("id"); mapInfos.addLookupKey("id"); models.addLookupKey("id", DEDRegister::OnlyFirst); models.addLookupKey("state"); @@ -81,6 +84,13 @@ int ded_s::addFlag(char const *id, int value) return def.geti("__order__"); } +int ded_s::addEpisode() +{ + Record &def = episodes.append(); + defn::Episode(def).resetToDefaults(); + return def.geti("__order__"); +} + int ded_s::addMapInfo() { Record &def = mapInfos.append(); @@ -105,6 +115,7 @@ int ded_s::addSky() void ded_s::release() { flags.clear(); + episodes.clear(); mobjs.clear(); states.clear(); sprites.clear(); @@ -538,6 +549,15 @@ int ded_s::evalFlags2(char const *ptr) const return value; } +int ded_s::getEpisodeNum(String const &id) const +{ + if(Record const *def = episodes.tryFind("id", id)) + { + return def->geti("__order__"); + } + return -1; +} + int ded_s::getMapInfoNum(de::Uri const &uri) const { if(Record const *def = mapInfos.tryFind("id", uri.compose())) diff --git a/doomsday/libdoomsday/src/defs/episode.cpp b/doomsday/libdoomsday/src/defs/episode.cpp index d43a86d799..a5dbd4c307 100644 --- a/doomsday/libdoomsday/src/defs/episode.cpp +++ b/doomsday/libdoomsday/src/defs/episode.cpp @@ -31,6 +31,7 @@ void Episode::resetToDefaults() DENG2_ASSERT(_def); // Add all expected fields with their default values. + _def->addText("id", ""); _def->addText("startMap", "Maps:"); // URI. Unknown. _def->addText("title", "Untitled"); _def->addText("menuHelpInfo", ""); // None.