Skip to content

Commit

Permalink
Refactor: Replaced GameMap SideDefs traversals with equivalents using…
Browse files Browse the repository at this point in the history
… LineDefs

SideDefs are being phased out, so all traversals of the SideDefs LUT
owned by GameMap have been replaced with equivalents which instead
use the LineDefs LUT.
  • Loading branch information
danij-deng committed Apr 4, 2013
1 parent de72f06 commit 48cd946
Show file tree
Hide file tree
Showing 7 changed files with 73 additions and 39 deletions.
12 changes: 8 additions & 4 deletions doomsday/client/include/map/gamemap.h
Expand Up @@ -174,10 +174,6 @@ class GameMap

inline uint vertexCount() const { return vertexes().count(); }

SideDefs const &sideDefs() const { return _sideDefs; }

inline uint sideDefCount() const { return sideDefs().count(); }

Lines const &lines() const { return _lines; }

inline uint lineCount() const { return lines().count(); }
Expand Down Expand Up @@ -532,6 +528,14 @@ class GameMap
*/
PlaneSet /*const*/ &trackedPlanes();

public: /// @todo Remove:

/// @deprecated SideDefs are being phased out.
SideDefs const &sideDefs() const { return _sideDefs; }

/// @deprecated SideDefs are being phased out.
inline uint sideDefCount() const { return sideDefs().count(); }

public: /// @todo Replace with object level methods:
/**
* Lookup the in-map unique index for @a vertex.
Expand Down
2 changes: 1 addition & 1 deletion doomsday/client/src/client/cl_world.cpp
Expand Up @@ -395,7 +395,7 @@ clplane_t *GameMap::newClPlane(uint sectorIndex, clplanetype_t type, coord_t des
DEBUG_Message(("GameMap::newClPlane: Sector #%i, type:%s, dest:%f, speed:%f",
sectorIndex, type == CPT_FLOOR? "floor" : "ceiling", dest, speed));

if(int( sectorIndex ) >= _sectors.size())
if(int( sectorIndex ) >= sectorCount())
{
DENG_ASSERT(false); // Invalid Sector index.
return 0;
Expand Down
4 changes: 2 additions & 2 deletions doomsday/client/src/edit_map.cpp
Expand Up @@ -1510,9 +1510,9 @@ boolean MPE_End()
findBounds(editMap.vertexes, min, max);

gamemap->initLineBlockmap(min, max);
for(int i = 0; i < gamemap->_lines.count(); ++i)
foreach(LineDef *line, gamemap->lines())
{
gamemap->linkLine(*gamemap->_lines[i]);
gamemap->linkLine(*line);
}

// Mobj and Polyobj blockmaps are maintained dynamically.
Expand Down
34 changes: 22 additions & 12 deletions doomsday/client/src/map/gamemap.cpp
Expand Up @@ -458,11 +458,16 @@ void GameMap::buildSurfaceLists()
d->decoratedSurfaces.clear();
d->glowingSurfaces.clear();

foreach(SideDef *sideDef, _sideDefs)
foreach(LineDef *line, _lines)
for(int i = 0; i < 2; ++i)
{
d->addSurfaceToLists(sideDef->middle());
d->addSurfaceToLists(sideDef->top());
d->addSurfaceToLists(sideDef->bottom());
if(!line->hasSideDef(i))
continue;

SideDef &sideDef = line->sideDef(i);
d->addSurfaceToLists(sideDef.middle());
d->addSurfaceToLists(sideDef.top());
d->addSurfaceToLists(sideDef.bottom());
}

foreach(Sector *sector, _sectors)
Expand Down Expand Up @@ -590,7 +595,7 @@ Sector *GameMap::sectorBySoundEmitter(ddmobj_base_t const &soundEmitter) const
}

/// @todo Optimize: All sound emitters in a sector are linked together forming
/// a chain. Make use of the chains instead of iterating the sidedefs.
/// a chain. Make use of the chains instead of traversing lines.
Surface *GameMap::surfaceBySoundEmitter(ddmobj_base_t const &soundEmitter) const
{
// First try plane surfaces.
Expand All @@ -604,19 +609,24 @@ Surface *GameMap::surfaceBySoundEmitter(ddmobj_base_t const &soundEmitter) const
}

// Perhaps a wall surface?
foreach(SideDef *sideDef, _sideDefs)
foreach(LineDef *line, _lines)
for(int i = 0; i < 2; ++i)
{
if(&soundEmitter == &sideDef->middle().soundEmitter())
if(!line->hasSideDef(i))
continue;

SideDef &sideDef = line->sideDef(i);
if(&soundEmitter == &sideDef.middle().soundEmitter())
{
return &sideDef->middle();
return &sideDef.middle();
}
if(&soundEmitter == &sideDef->bottom().soundEmitter())
if(&soundEmitter == &sideDef.bottom().soundEmitter())
{
return &sideDef->bottom();
return &sideDef.bottom();
}
if(&soundEmitter == &sideDef->top().soundEmitter())
if(&soundEmitter == &sideDef.top().soundEmitter())
{
return &sideDef->top();
return &sideDef.top();
}
}

Expand Down
13 changes: 9 additions & 4 deletions doomsday/client/src/map/r_world.cpp
Expand Up @@ -523,11 +523,16 @@ static void initAllMapSurfaceMaterialOrigins(GameMap &map)
initSurfaceMaterialOrigin(plane->surface());
}

foreach(SideDef *sideDef, map.sideDefs())
foreach(LineDef *line, map.lines())
for(int i = 0; i < 2; ++i)
{
initSurfaceMaterialOrigin(sideDef->top());
initSurfaceMaterialOrigin(sideDef->middle());
initSurfaceMaterialOrigin(sideDef->bottom());
if(!line->hasSideDef(i))
continue;

SideDef &sideDef = line->sideDef(i);
initSurfaceMaterialOrigin(sideDef.top());
initSurfaceMaterialOrigin(sideDef.middle());
initSurfaceMaterialOrigin(sideDef.bottom());
}
}

Expand Down
32 changes: 21 additions & 11 deletions doomsday/client/src/render/r_main.cpp
Expand Up @@ -516,11 +516,16 @@ static void R_UpdateMap()
plane->surface().markAsNeedingDecorationUpdate();
}

foreach(SideDef *sideDef, theMap->sideDefs())
foreach(LineDef *line, theMap->lines())
for(int i = 0; i < 2; ++i)
{
sideDef->top().markAsNeedingDecorationUpdate();
sideDef->middle().markAsNeedingDecorationUpdate();
sideDef->bottom().markAsNeedingDecorationUpdate();
if(!line->hasSideDef(i))
continue;

SideDef &sideDef = line->sideDef(i);
sideDef.top().markAsNeedingDecorationUpdate();
sideDef.middle().markAsNeedingDecorationUpdate();
sideDef.bottom().markAsNeedingDecorationUpdate();
}

/// @todo Is this even necessary?
Expand Down Expand Up @@ -1364,16 +1369,21 @@ void Rend_CacheForMap()
{
MaterialVariantSpec const &spec = Rend_MapSurfaceMaterialSpec();

foreach(SideDef *sideDef, theMap->sideDefs())
foreach(LineDef *line, theMap->lines())
for(int i = 0; i < 2; ++i)
{
if(sideDef->middle().hasMaterial())
App_Materials().cache(sideDef->middle().material(), spec);
if(!line->hasSideDef(i))
continue;

SideDef &sideDef = line->sideDef(i);
if(sideDef.middle().hasMaterial())
App_Materials().cache(sideDef.middle().material(), spec);

if(sideDef->top().hasMaterial())
App_Materials().cache(sideDef->top().material(), spec);
if(sideDef.top().hasMaterial())
App_Materials().cache(sideDef.top().material(), spec);

if(sideDef->bottom().hasMaterial())
App_Materials().cache(sideDef->bottom().material(), spec);
if(sideDef.bottom().hasMaterial())
App_Materials().cache(sideDef.bottom().material(), spec);
}

foreach(Sector *sector, theMap->sectors())
Expand Down
15 changes: 10 additions & 5 deletions doomsday/client/src/render/rend_main.cpp
Expand Up @@ -3139,19 +3139,24 @@ void Rend_RenderSoundOrigins()
if(devSoundOrigins & SOF_SIDEDEF)
{
/// @todo Do not assume current map.
foreach(SideDef *sideDef, theMap->sideDefs())
foreach(LineDef *line, theMap->lines())
for(int i = 0; i < 2; ++i)
{
uint idx = theMap->sideDefIndex(sideDef);
if(!line->hasSideDef(i))
continue;

SideDef &sideDef = line->sideDef(i);
uint idx = theMap->sideDefIndex(&sideDef);
char buf[80];

dd_snprintf(buf, 80, "Side #%i (middle)", idx);
drawSoundOrigin(sideDef->middle().soundEmitter().origin, buf, eye);
drawSoundOrigin(sideDef.middle().soundEmitter().origin, buf, eye);

dd_snprintf(buf, 80, "Side #%i (bottom)", idx);
drawSoundOrigin(sideDef->bottom().soundEmitter().origin, buf, eye);
drawSoundOrigin(sideDef.bottom().soundEmitter().origin, buf, eye);

dd_snprintf(buf, 80, "Side #%i (top)", idx);
drawSoundOrigin(sideDef->top().soundEmitter().origin, buf, eye);
drawSoundOrigin(sideDef.top().soundEmitter().origin, buf, eye);
}
}

Expand Down

0 comments on commit 48cd946

Please sign in to comment.