diff --git a/doomsday/libdoomsday/include/doomsday/defs/episode.h b/doomsday/libdoomsday/include/doomsday/defs/episode.h index 5392ca7b80..4ec37f37aa 100644 --- a/doomsday/libdoomsday/include/doomsday/defs/episode.h +++ b/doomsday/libdoomsday/include/doomsday/defs/episode.h @@ -44,6 +44,13 @@ class LIBDOOMSDAY_PUBLIC Episode : public de::RecordAccessor operator bool() const; int order() const; + de::Record &addHub(); + + int hubCount() const; + bool hasHub(int index) const; + de::Record &hub(int index); + de::Record const &hub(int index) const; + private: de::Record *_def; ///< Modifiable access. }; diff --git a/doomsday/libdoomsday/src/defs/episode.cpp b/doomsday/libdoomsday/src/defs/episode.cpp index a5dbd4c307..a88ad34732 100644 --- a/doomsday/libdoomsday/src/defs/episode.cpp +++ b/doomsday/libdoomsday/src/defs/episode.cpp @@ -37,6 +37,7 @@ void Episode::resetToDefaults() _def->addText("menuHelpInfo", ""); // None. _def->addText("menuImage", ""); // URI. None. _def->addText("menuShortcut", ""); // Key name. None. + _def->addArray("hub", new ArrayValue); } Episode &Episode::operator = (Record *d) @@ -57,4 +58,40 @@ Episode::operator bool() const return accessedRecordPtr() != 0; } +Record &Episode::addHub() +{ + DENG2_ASSERT(_def); + + Record *def = new Record; + + def->addText ("id", 0); + def->addArray("map", new ArrayValue); + + (*_def)["hub"].value() + .add(new RecordValue(def, RecordValue::OwnsRecord)); + + return *def; +} + +int Episode::hubCount() const +{ + return int(geta("hub").size()); +} + +bool Episode::hasHub(int index) const +{ + return index >= 0 && index < hubCount(); +} + +Record &Episode::hub(int index) +{ + DENG2_ASSERT(_def); + return *_def->geta("hub")[index].as().record(); +} + +Record const &Episode::hub(int index) const +{ + return *geta("hub")[index].as().record(); +} + } // namespace defn