Skip to content

Commit

Permalink
Cleanup|World|Map: Minor internal map API cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
danij-deng committed Oct 2, 2013
1 parent c8edd13 commit afeb9f6
Show file tree
Hide file tree
Showing 11 changed files with 65 additions and 67 deletions.
3 changes: 3 additions & 0 deletions doomsday/client/include/world/blockmap.h
Expand Up @@ -136,6 +136,9 @@ class Blockmap
DENG2_PRIVATE(d)
};

typedef Blockmap::Cell BlockmapCell;
typedef Blockmap::CellBlock BlockmapCellBlock;

} //namespace de

#endif // DENG_WORLD_BLOCKMAP_H
21 changes: 2 additions & 19 deletions doomsday/client/include/world/map.h
Expand Up @@ -24,9 +24,8 @@
#include <QList>
#include <QSet>

#include <de/vector1.h> /// @todo remove me

#include <de/Observers>
#include <de/Vector>

#include "Mesh"

Expand Down Expand Up @@ -519,25 +518,9 @@ class Map
* interceptable object linked within Blockmap cells which cover the path
* this defines.
*/
int pathTraverse(const_pvec2d_t from, const_pvec2d_t to, int flags,
int pathTraverse(de::Vector2d const &from, de::Vector2d const &to, int flags,
traverser_t callback, void *context = 0);

/**
* @copydoc pathTraverse()
*
* @param fromX X axis map space coordinate for the path origin.
* @param fromY Y axis map space coordinate for the path origin.
* @param toX X axis map space coordinate for the path destination.
* @param toY Y axis map space coordinate for the path destination.
*/
inline int pathTraverse(coord_t fromX, coord_t fromY, coord_t toX, coord_t toY,
int flags, traverser_t callback, void *context = 0)
{
coord_t from[2] = { fromX, fromY };
coord_t to[2] = { toX, toY };
return pathTraverse(from, to, flags, callback, context);
}

/**
* Retrieve an immutable copy of the LOS trace line state.
*
Expand Down
32 changes: 16 additions & 16 deletions doomsday/client/src/render/blockmapvisual.cpp
Expand Up @@ -150,7 +150,7 @@ static int drawBspLeaf(BspLeaf *bspLeaf, void * /*parameters*/)
return false; // Continue iteration.
}

static int drawCellLines(Blockmap const &bmap, Blockmap::Cell const &cell, void *parameters)
static int drawCellLines(Blockmap const &bmap, BlockmapCell const &cell, void *parameters)
{
glBegin(GL_LINES);
bmap.iterate(cell, (int (*)(void*,void*)) drawLine, parameters);
Expand All @@ -169,31 +169,31 @@ static int drawCellPolyobjLines(void *object, void *parameters)
return false; // Continue iteration.
}

static int drawCellPolyobjs(Blockmap const &bmap, Blockmap::Cell const &cell, void *parameters)
static int drawCellPolyobjs(Blockmap const &bmap, BlockmapCell const &cell, void *parameters)
{
glBegin(GL_LINES);
bmap.iterate(cell, (int (*)(void*,void*)) drawCellPolyobjLines, parameters);
glEnd();
return false; // Continue iteration.
}

static int drawCellMobjs(Blockmap const &bmap, Blockmap::Cell const &cell, void *parameters)
static int drawCellMobjs(Blockmap const &bmap, BlockmapCell const &cell, void *parameters)
{
glBegin(GL_QUADS);
bmap.iterate(cell, (int (*)(void*,void*)) drawMobj, parameters);
glEnd();
return false; // Continue iteration.
}

static int drawCellBspLeafs(Blockmap const &bmap, Blockmap::Cell const &cell, void *parameters)
static int drawCellBspLeafs(Blockmap const &bmap, BlockmapCell const &cell, void *parameters)
{
bmap.iterate(cell, (int (*)(void*,void*)) drawBspLeaf, parameters);
return false; // Continue iteration.
}

static void drawBackground(Blockmap const &bmap)
{
Blockmap::Cell const &bmapDimensions = bmap.dimensions();
BlockmapCell const &bmapDimensions = bmap.dimensions();

// Scale modelview matrix so we can express cell geometry
// using a cell-sized unit coordinate space.
Expand All @@ -216,7 +216,7 @@ static void drawBackground(Blockmap const &bmap)
* Draw the "null cells" over the top.
*/
glColor4f(0, 0, 0, .95f);
Blockmap::Cell cell;
BlockmapCell cell;
for(cell.y = 0; cell.y < bmapDimensions.y; ++cell.y)
for(cell.x = 0; cell.x < bmapDimensions.x; ++cell.x)
{
Expand Down Expand Up @@ -312,7 +312,7 @@ static void drawBlockmapInfo(Point2Raw const *_origin, Blockmap const *blockmap)
}

static void drawCellInfoBox(Blockmap const *blockmap, Point2Raw const *origin,
char const *objectTypeName, Blockmap::Cell const &cell)
char const *objectTypeName, BlockmapCell const &cell)
{
uint count = blockmap->cellElementCount(cell);
char info[160];
Expand All @@ -327,12 +327,12 @@ static void drawCellInfoBox(Blockmap const *blockmap, Point2Raw const *origin,
* @param cellDrawer Blockmap cell content drawing callback. Can be @a NULL.
*/
static void drawBlockmap(Blockmap const &bmap, mobj_t *followMobj,
int (*cellDrawer) (Blockmap const &bmap, Blockmap::Cell const &cell, void *parameters))
int (*cellDrawer) (Blockmap const &bmap, BlockmapCell const &cell, void *parameters))
{
Blockmap::CellBlock vCellBlock;
Blockmap::Cell vCell;
BlockmapCellBlock vCellBlock;
BlockmapCell vCell;

Blockmap::Cell const &dimensions = bmap.dimensions();
BlockmapCell const &dimensions = bmap.dimensions();
Vector2d const &cellDimensions = bmap.cellDimensions();

if(followMobj)
Expand Down Expand Up @@ -379,7 +379,7 @@ static void drawBlockmap(Blockmap const &bmap, mobj_t *followMobj,
// Highlight cells the followed Mobj "touches".
glBegin(GL_QUADS);

Blockmap::Cell cell;
BlockmapCell cell;
for(cell.y = vCellBlock.min.y; cell.y <= vCellBlock.max.y; ++cell.y)
for(cell.x = vCellBlock.min.x; cell.x <= vCellBlock.max.x; ++cell.x)
{
Expand Down Expand Up @@ -442,7 +442,7 @@ static void drawBlockmap(Blockmap const &bmap, mobj_t *followMobj,
// First, the cells outside the "touch" range (crimson).
validCount++;
glColor4f(.33f, 0, 0, .75f);
Blockmap::Cell cell;
BlockmapCell cell;
for(cell.y = 0; cell.y < dimensions.y; ++cell.y)
for(cell.x = 0; cell.x < dimensions.x; ++cell.x)
{
Expand Down Expand Up @@ -478,7 +478,7 @@ static void drawBlockmap(Blockmap const &bmap, mobj_t *followMobj,
// Draw all cells without color coding.
validCount++;
glColor4f(.33f, 0, 0, .75f);
Blockmap::Cell cell;
BlockmapCell cell;
for(cell.y = 0; cell.y < dimensions.y; ++cell.y)
for(cell.x = 0; cell.x < dimensions.x; ++cell.x)
{
Expand Down Expand Up @@ -508,7 +508,7 @@ static void drawBlockmap(Blockmap const &bmap, mobj_t *followMobj,

void Rend_BlockmapDebug()
{
int (*cellDrawer) (Blockmap const &blockmap, Blockmap::Cell const &cell, void *parameters);
int (*cellDrawer) (Blockmap const &blockmap, BlockmapCell const &cell, void *parameters);
char const *objectTypeName;
mobj_t *followMobj = 0;
Blockmap const *blockmap;
Expand Down Expand Up @@ -587,7 +587,7 @@ void Rend_BlockmapDebug()
{
// About the cell the followed Mobj is in.
bool didClip;
Blockmap::Cell cell = blockmap->toCell(followMobj->origin, &didClip);
BlockmapCell cell = blockmap->toCell(followMobj->origin, &didClip);
if(!didClip)
{
origin.x = DENG_GAMEVIEW_WIDTH / 2;
Expand Down
44 changes: 23 additions & 21 deletions doomsday/client/src/world/api_map.cpp
Expand Up @@ -1550,31 +1550,31 @@ DENG_EXTERN_C int P_MobjUnlink(mobj_t *mo)
}

#undef P_MobjLinesIterator
DENG_EXTERN_C int P_MobjLinesIterator(mobj_t *mo, int (*callback) (Line *, void *), void *parameters)
DENG_EXTERN_C int P_MobjLinesIterator(mobj_t *mo, int (*callback) (Line *, void *), void *context)
{
if(!mo || !Mobj_IsLinked(*mo)) return false; // Continue iteration.
return Mobj_BspLeafAtOrigin(*mo).map().mobjLinesIterator(mo, callback, parameters);
return Mobj_BspLeafAtOrigin(*mo).map().mobjLinesIterator(mo, callback, context);
}

#undef P_MobjSectorsIterator
DENG_EXTERN_C int P_MobjSectorsIterator(mobj_t *mo, int (*callback) (Sector *, void *), void *parameters)
DENG_EXTERN_C int P_MobjSectorsIterator(mobj_t *mo, int (*callback) (Sector *, void *), void *context)
{
if(!mo || !Mobj_IsLinked(*mo)) return false; // Continue iteration.
return Mobj_BspLeafAtOrigin(*mo).map().mobjSectorsIterator(mo, callback, parameters);
return Mobj_BspLeafAtOrigin(*mo).map().mobjSectorsIterator(mo, callback, context);
}

#undef P_LineMobjsIterator
DENG_EXTERN_C int P_LineMobjsIterator(Line *line, int (*callback) (mobj_t *, void *), void *parameters)
DENG_EXTERN_C int P_LineMobjsIterator(Line *line, int (*callback) (mobj_t *, void *), void *context)
{
if(!line) return false; // Continue iteration.
return line->map().lineMobjsIterator(line, callback, parameters);
return line->map().lineMobjsIterator(line, callback, context);
}

#undef P_SectorTouchingMobjsIterator
DENG_EXTERN_C int P_SectorTouchingMobjsIterator(Sector *sector, int (*callback) (mobj_t *, void *), void *parameters)
DENG_EXTERN_C int P_SectorTouchingMobjsIterator(Sector *sector, int (*callback) (mobj_t *, void *), void *context)
{
if(!sector) return false; // Continue iteration.
return sector->map().sectorTouchingMobjsIterator(sector, callback, parameters);
return sector->map().sectorTouchingMobjsIterator(sector, callback, context);
}

#undef P_SectorAtPoint_FixedPrecision
Expand All @@ -1594,42 +1594,42 @@ DENG_EXTERN_C Sector *P_SectorAtPoint_FixedPrecisionXY(coord_t x, coord_t y)

#undef P_MobjsBoxIterator
DENG_EXTERN_C int P_MobjsBoxIterator(AABoxd const *box,
int (*callback) (mobj_t *, void *), void *parameters)
int (*callback) (mobj_t *, void *), void *context)
{
if(!box || !App_World().hasMap()) return false; // Continue iteration.
return App_World().map().mobjsBoxIterator(*box, callback, parameters);
return App_World().map().mobjsBoxIterator(*box, callback, context);
}

#undef P_PolyobjsBoxIterator
DENG_EXTERN_C int P_PolyobjsBoxIterator(AABoxd const *box,
int (*callback) (struct polyobj_s *, void *), void *parameters)
int (*callback) (struct polyobj_s *, void *), void *context)
{
if(!box || !App_World().hasMap()) return false; // Continue iteration.
return App_World().map().polyobjsBoxIterator(*box, callback, parameters);
return App_World().map().polyobjsBoxIterator(*box, callback, context);
}

#undef P_LinesBoxIterator
DENG_EXTERN_C int P_LinesBoxIterator(AABoxd const *box, int flags,
int (*callback) (Line *, void *), void *parameters)
int (*callback) (Line *, void *), void *context)
{
if(!box || !App_World().hasMap()) return false; // Continue iteration.
return App_World().map().linesBoxIterator(*box, flags, callback, parameters);
return App_World().map().linesBoxIterator(*box, flags, callback, context);
}

#undef P_BspLeafsBoxIterator
DENG_EXTERN_C int P_BspLeafsBoxIterator(AABoxd const *box, Sector *sector,
int (*callback) (BspLeaf *, void *), void *parameters)
int (*callback) (BspLeaf *, void *), void *context)
{
if(!box || !App_World().hasMap()) return false; // Continue iteration.
return App_World().map().bspLeafsBoxIterator(*box, sector, callback, parameters);
return App_World().map().bspLeafsBoxIterator(*box, sector, callback, context);
}

#undef P_PathTraverse2
DENG_EXTERN_C int P_PathTraverse2(const_pvec2d_t from, const_pvec2d_t to,
int flags, traverser_t callback, void *parameters)
int flags, traverser_t callback, void *context)
{
if(!App_World().hasMap()) return false; // Continue iteration.
return App_World().map().pathTraverse(from, to, flags, callback, parameters);
return App_World().map().pathTraverse(from, to, flags, callback, context);
}

#undef P_PathTraverse
Expand All @@ -1642,18 +1642,20 @@ DENG_EXTERN_C int P_PathTraverse(const_pvec2d_t from, const_pvec2d_t to,

#undef P_PathXYTraverse2
DENG_EXTERN_C int P_PathXYTraverse2(coord_t fromX, coord_t fromY,
coord_t toX, coord_t toY, int flags, traverser_t callback, void* paramaters)
coord_t toX, coord_t toY, int flags, traverser_t callback, void *context)
{
if(!App_World().hasMap()) return false; // Continue iteration.
return App_World().map().pathTraverse(fromX, fromY, toX, toY, flags, callback, paramaters);
return App_World().map().pathTraverse(Vector2d(fromX, fromY), Vector2d(toX, toY),
flags, callback, context);
}

#undef P_PathXYTraverse
DENG_EXTERN_C int P_PathXYTraverse(coord_t fromX, coord_t fromY, coord_t toX, coord_t toY, int flags,
traverser_t callback)
{
if(!App_World().hasMap()) return false; // Continue iteration.
return App_World().map().pathTraverse(fromX, fromY, toX, toY, flags, callback);
return App_World().map().pathTraverse(Vector2d(fromX, fromY), Vector2d(toX, toY),
flags, callback);
}

#undef P_CheckLineSight
Expand Down
6 changes: 3 additions & 3 deletions doomsday/client/src/world/blockmap.cpp
Expand Up @@ -211,7 +211,7 @@ AABoxd const &Blockmap::bounds() const
return d->bounds;
}

Blockmap::Cell const &Blockmap::dimensions() const
BlockmapCell const &Blockmap::dimensions() const
{
return d->dimensions();
}
Expand All @@ -221,15 +221,15 @@ Vector2d const &Blockmap::cellDimensions() const
return d->cellDimensions;
}

Blockmap::Cell Blockmap::toCell(Vector2d const &point, bool *retDidClip) const
BlockmapCell Blockmap::toCell(Vector2d const &point, bool *retDidClip) const
{
bool didClipX, didClipY;
Cell cell(d->toCellX(point.x, didClipX), d->toCellY(point.y, didClipY));
if(retDidClip) *retDidClip = didClipX | didClipY;
return cell;
}

Blockmap::CellBlock Blockmap::toCellBlock(AABoxd const &box, bool *retDidClip) const
BlockmapCellBlock Blockmap::toCellBlock(AABoxd const &box, bool *retDidClip) const
{
bool didClipMin, didClipMax;
CellBlock block(toCell(box.min, &didClipMin), toCell(box.max, &didClipMax));
Expand Down
2 changes: 2 additions & 0 deletions doomsday/client/src/world/bsp/partitioner.cpp
Expand Up @@ -28,6 +28,8 @@
#include <QHash>
#include <QtAlgorithms>

#include <de/vector1.h>

#include <de/Log>

#include "world/map.h"
Expand Down
17 changes: 9 additions & 8 deletions doomsday/client/src/world/map.cpp
Expand Up @@ -22,6 +22,7 @@
*/

#include <de/aabox.h>
#include <de/vector1.h>

#include <de/Rectangle>

Expand Down Expand Up @@ -2244,8 +2245,8 @@ static int traverseCellPath2(Blockmap &bmap, Blockmap::Cell const &fromCell,
}

static int traversePath(divline_t &traceLine, Blockmap &bmap,
const_pvec2d_t from_, const_pvec2d_t to_,
int (*callback) (Blockmap::Cell const &cell, void *parameters), void *parameters = 0)
Vector2d const &from_, Vector2d const &to_,
int (*callback) (Blockmap::Cell const &cell, void *context), void *context = 0)
{
// Constant terms implicitly defined by DOOM's original version of this
// algorithm (we must honor these fudge factors for compatibility).
Expand All @@ -2256,8 +2257,8 @@ static int traversePath(divline_t &traceLine, Blockmap &bmap,
vec2d_t max; V2d_Copy(max, bmap.bounds().max);

// We may need to clip and/or fudge these points.
vec2d_t from; V2d_Copy(from, from_);
vec2d_t to; V2d_Copy(to, to_);
vec2d_t from; V2d_Set(from, from_.x, from_.y);
vec2d_t to; V2d_Set(to, to_.x, to_.y);

if(!(from[VX] >= min[VX] && from[VX] <= max[VX] &&
from[VY] >= min[VY] && from[VY] <= max[VY]))
Expand Down Expand Up @@ -2329,7 +2330,7 @@ static int traversePath(divline_t &traceLine, Blockmap &bmap,

V2d_Subtract(from, from, min);
V2d_Subtract(to, to, min);
return traverseCellPath2(bmap, fromCell, toCell, from, to, callback, parameters);
return traverseCellPath2(bmap, fromCell, toCell, from, to, callback, context);
}

struct iteratepolyobjlines_params_t
Expand Down Expand Up @@ -2467,8 +2468,8 @@ static int collectMobjIntercepts(Blockmap::Cell const &cell, void *parameters)
return iterateCellMobjs(*mobjBlockmap, cell, interceptMobjsWorker);
}

int Map::pathTraverse(const_pvec2d_t from, const_pvec2d_t to, int flags,
traverser_t callback, void *parameters)
int Map::pathTraverse(Vector2d const &from, Vector2d const &to, int flags,
traverser_t callback, void *context)
{
// A new intercept trace begins...
P_ClearIntercepts();
Expand All @@ -2494,7 +2495,7 @@ int Map::pathTraverse(const_pvec2d_t from, const_pvec2d_t to, int flags,
}

// Step #2: Process sorted intercepts.
return P_TraverseIntercepts(callback, parameters);
return P_TraverseIntercepts(callback, context);
}

BspLeaf &Map::bspLeafAt(Vector2d const &point) const
Expand Down
2 changes: 2 additions & 0 deletions doomsday/client/src/world/sector.cpp
Expand Up @@ -21,6 +21,8 @@
#include <QList>
#include <QtAlgorithms>

#include <de/vector1.h>

#include <de/Log>

#include "Face"
Expand Down

0 comments on commit afeb9f6

Please sign in to comment.