Skip to content

Commit

Permalink
Refactor|libdoomsday|DED: Base Episode, MapInfo and MapGraphNode on D…
Browse files Browse the repository at this point in the history
…efinition
  • Loading branch information
danij-deng committed Aug 8, 2014
1 parent f5e3845 commit a14f9db
Show file tree
Hide file tree
Showing 7 changed files with 58 additions and 156 deletions.
2 changes: 1 addition & 1 deletion doomsday/client/src/gl/gl_main.cpp
Expand Up @@ -649,7 +649,7 @@ void GL_TotalRestore()
if(MapDef *mapDef = App_WorldSystem().map().def())
{
int idx = defs.getMapInfoNum(mapDef->composeUri());
if(idx >= 0) mapInfo = &defs.mapInfos[idx];
if(idx >= 0) mapInfo = defs.mapInfos[idx];
}
}

Expand Down
23 changes: 6 additions & 17 deletions doomsday/libdoomsday/include/doomsday/defs/episode.h
Expand Up @@ -19,42 +19,31 @@
#ifndef LIBDOOMSDAY_DEFN_EPISODE_H
#define LIBDOOMSDAY_DEFN_EPISODE_H

#include "../libdoomsday.h"
#include "definition.h"
#include <de/RecordAccessor>

namespace defn {

/**
* Utility for handling episode definitions.
*/
class LIBDOOMSDAY_PUBLIC Episode : public de::RecordAccessor
class LIBDOOMSDAY_PUBLIC Episode : public Definition
{
public:
Episode() : RecordAccessor(0), _def(0) {}
Episode(Episode const &other)
: RecordAccessor(other)
, _def(other._def) {}
Episode(de::Record &d) : RecordAccessor(d), _def(&d) {}
Episode(de::Record const &d) : RecordAccessor(d), _def(0) {}
Episode() : Definition() {}
Episode(Episode const &other) : Definition(other) {}
Episode(de::Record &d) : Definition(d) {}
Episode(de::Record const &d) : Definition(d) {}

void resetToDefaults();

Episode &operator = (de::Record *d);

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;

de::Record *tryFindMapGraphNode(de::String const &mapId);

private:
de::Record *_def; ///< Modifiable access.
};

} // namespace defn
Expand Down
23 changes: 6 additions & 17 deletions doomsday/libdoomsday/include/doomsday/defs/mapgraphnode.h
Expand Up @@ -19,40 +19,29 @@
#ifndef LIBDOOMSDAY_DEFN_MAPGRAPHNODE_H
#define LIBDOOMSDAY_DEFN_MAPGRAPHNODE_H

#include "../libdoomsday.h"
#include "definition.h"
#include <de/RecordAccessor>

namespace defn {

/**
* Utility for handling "map-connectivity graph, node" definitions.
*/
class LIBDOOMSDAY_PUBLIC MapGraphNode : public de::RecordAccessor
class LIBDOOMSDAY_PUBLIC MapGraphNode : public Definition
{
public:
MapGraphNode() : RecordAccessor(0), _def(0) {}
MapGraphNode(MapGraphNode const &other)
: RecordAccessor(other)
, _def(other._def) {}
MapGraphNode(de::Record &d) : RecordAccessor(d), _def(&d) {}
MapGraphNode(de::Record const &d) : RecordAccessor(d), _def(0) {}
MapGraphNode() : Definition() {}
MapGraphNode(MapGraphNode const &other) : Definition(other) {}
MapGraphNode(de::Record &d) : Definition(d) {}
MapGraphNode(de::Record const &d) : Definition(d) {}

void resetToDefaults();

MapGraphNode &operator = (de::Record *d);

operator bool() const;
int order() const;

de::Record &addExit();

int exitCount() const;
bool hasExit(int index) const;
de::Record &exit(int index);
de::Record const &exit(int index) const;

private:
de::Record *_def; ///< Modifiable access.
};

} // namespace defn
Expand Down
22 changes: 6 additions & 16 deletions doomsday/libdoomsday/include/doomsday/defs/mapinfo.h
Expand Up @@ -19,7 +19,7 @@
#ifndef LIBDOOMSDAY_DEFN_MAPINFO_H
#define LIBDOOMSDAY_DEFN_MAPINFO_H

#include "../libdoomsday.h"
#include "definition.h"
#include <de/RecordAccessor>

/// @todo These values should be tweaked a bit.
Expand All @@ -35,25 +35,15 @@ namespace defn {
/**
* Utility for handling mapinfo definitions.
*/
class LIBDOOMSDAY_PUBLIC MapInfo : public de::RecordAccessor
class LIBDOOMSDAY_PUBLIC MapInfo : public Definition
{
public:
MapInfo() : RecordAccessor(0), _def(0) {}
MapInfo(MapInfo const &other)
: RecordAccessor(other)
, _def(other._def) {}
MapInfo(de::Record &d) : RecordAccessor(d), _def(&d) {}
MapInfo(de::Record const &d) : RecordAccessor(d), _def(0) {}
MapInfo() : Definition() {}
MapInfo(MapInfo const &other) : Definition(other) {}
MapInfo(de::Record &d) : Definition(d) {}
MapInfo(de::Record const &d) : Definition(d) {}

void resetToDefaults();

MapInfo &operator = (de::Record *d);

operator bool() const;
int order() const;

private:
de::Record *_def; ///< Modifiable access.
};

} // namespace defn
Expand Down
51 changes: 14 additions & 37 deletions doomsday/libdoomsday/src/defs/episode.cpp
Expand Up @@ -28,49 +28,27 @@ namespace defn {

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.
_def->addText("menuImage", ""); // URI. None.
_def->addText("menuShortcut", ""); // Key name. None.
_def->addArray("hub", new ArrayValue);
}

Episode &Episode::operator = (Record *d)
{
setAccessedRecord(*d);
_def = d;
return *this;
}

int Episode::order() const
{
if(!accessedRecordPtr()) return -1;
return geti("__order__");
}

Episode::operator bool() const
{
return accessedRecordPtr() != 0;
def().addText("id", "");
def().addText("startMap", "Maps:"); // URI. Unknown.
def().addText("title", "Untitled");
def().addText("menuHelpInfo", ""); // None.
def().addText("menuImage", ""); // URI. None.
def().addText("menuShortcut", ""); // Key name. None.
def().addArray("hub", new ArrayValue);
}

Record &Episode::addHub()
{
DENG2_ASSERT(_def);

Record *def = new Record;
Record *hub = new Record;

def->addText ("id", "");
def->addArray("map", new ArrayValue);
hub->addText ("id", "");
hub->addArray("map", new ArrayValue);

(*_def)["hub"].value<ArrayValue>()
.add(new RecordValue(def, RecordValue::OwnsRecord));
def()["hub"].value<ArrayValue>()
.add(new RecordValue(hub, RecordValue::OwnsRecord));

return *def;
return *hub;
}

int Episode::hubCount() const
Expand All @@ -85,8 +63,7 @@ bool Episode::hasHub(int index) const

Record &Episode::hub(int index)
{
DENG2_ASSERT(_def);
return *_def->geta("hub")[index].as<RecordValue>().record();
return *def().geta("hub")[index].as<RecordValue>().record();
}

Record const &Episode::hub(int index) const
Expand Down
43 changes: 10 additions & 33 deletions doomsday/libdoomsday/src/defs/mapgraphnode.cpp
Expand Up @@ -28,45 +28,23 @@ namespace defn {

void MapGraphNode::resetToDefaults()
{
DENG2_ASSERT(_def);

// Add all expected fields with their default values.
_def->addText ("id", "");
_def->addNumber("warpNumber", 0);
_def->addArray ("exit", new ArrayValue);
}

MapGraphNode &MapGraphNode::operator = (Record *d)
{
setAccessedRecord(*d);
_def = d;
return *this;
}

int MapGraphNode::order() const
{
if(!accessedRecordPtr()) return -1;
return geti("__order__");
}

MapGraphNode::operator bool() const
{
return accessedRecordPtr() != 0;
def().addText ("id", "");
def().addNumber("warpNumber", 0);
def().addArray ("exit", new ArrayValue);
}

Record &MapGraphNode::addExit()
{
DENG2_ASSERT(_def);

Record *def = new Record;
Record *exit = new Record;

def->addText("id", 0);
def->addText("targetMap", "");
exit->addText("id", "");
exit->addText("targetMap", "");

(*_def)["exit"].value<ArrayValue>()
.add(new RecordValue(def, RecordValue::OwnsRecord));
def()["exit"].value<ArrayValue>()
.add(new RecordValue(exit, RecordValue::OwnsRecord));

return *def;
return *exit;
}

int MapGraphNode::exitCount() const
Expand All @@ -81,8 +59,7 @@ bool MapGraphNode::hasExit(int index) const

Record &MapGraphNode::exit(int index)
{
DENG2_ASSERT(_def);
return *_def->geta("exit")[index].as<RecordValue>().record();
return *def().geta("exit")[index].as<RecordValue>().record();
}

Record const &MapGraphNode::exit(int index) const
Expand Down
50 changes: 15 additions & 35 deletions doomsday/libdoomsday/src/defs/mapinfo.cpp
Expand Up @@ -29,45 +29,25 @@ namespace defn {

void MapInfo::resetToDefaults()
{
DENG2_ASSERT(_def);

// Add all expected fields with their default values.
_def->addText ("id", "");
_def->addText ("title", "Untitled");
_def->addText ("author", "Unknown");
_def->addNumber("flags", 0);
_def->addText ("music", "");
_def->addNumber("parTime", -1); // unknown
_def->addArray ("fogColor", new ArrayValue(Vector3f(DEFAULT_FOG_COLOR_RED, DEFAULT_FOG_COLOR_GREEN, DEFAULT_FOG_COLOR_BLUE)));
_def->addNumber("fogStart", DEFAULT_FOG_START);
_def->addNumber("fogEnd", DEFAULT_FOG_END);
_def->addNumber("fogDensity", DEFAULT_FOG_DENSITY);
_def->addNumber("ambient", 0);
_def->addNumber("gravity", 1);
_def->addText ("skyId", "");
_def->addText ("execute", "");
def().addText ("id", "");
def().addText ("title", "Untitled");
def().addText ("author", "Unknown");
def().addNumber("flags", 0);
def().addText ("music", "");
def().addNumber("parTime", -1); // unknown
def().addArray ("fogColor", new ArrayValue(Vector3f(DEFAULT_FOG_COLOR_RED, DEFAULT_FOG_COLOR_GREEN, DEFAULT_FOG_COLOR_BLUE)));
def().addNumber("fogStart", DEFAULT_FOG_START);
def().addNumber("fogEnd", DEFAULT_FOG_END);
def().addNumber("fogDensity", DEFAULT_FOG_DENSITY);
def().addNumber("ambient", 0);
def().addNumber("gravity", 1);
def().addText ("skyId", "");
def().addText ("execute", "");

QScopedPointer<Record> sky(new Record);
Sky(*sky).resetToDefaults();
_def->add ("sky", sky.take());
}

MapInfo &MapInfo::operator = (Record *d)
{
setAccessedRecord(*d);
_def = d;
return *this;
}

int MapInfo::order() const
{
if(!accessedRecordPtr()) return -1;
return geti("__order__");
}

MapInfo::operator bool() const
{
return accessedRecordPtr() != 0;
def().add ("sky", sky.take());
}

} // namespace defn

0 comments on commit a14f9db

Please sign in to comment.