Skip to content

Commit

Permalink
Map: Various API improvements
Browse files Browse the repository at this point in the history
Throw an error when attempting to access missing data (blockmaps,
BSP and thinker lists).

Deferred construction of the thinker lists until after the initial
editing phase has ended.
  • Loading branch information
danij-deng committed Jun 15, 2013
1 parent 3c59944 commit 03817b9
Show file tree
Hide file tree
Showing 15 changed files with 326 additions and 242 deletions.
297 changes: 165 additions & 132 deletions doomsday/client/include/world/map.h

Large diffs are not rendered by default.

5 changes: 1 addition & 4 deletions doomsday/client/src/edit_bias.cpp
Expand Up @@ -698,10 +698,7 @@ static void SBE_DrawLevelGauge(Point2Raw const *origin, int height)
else
src = SBE_GetNearest();

BspLeaf *bspLeaf = App_World().map().bspLeafAtPoint(src->origin);
if(!bspLeaf) return;

Sector &sector = bspLeaf->sector();
Sector &sector = App_World().map().bspLeafAt(src->origin).sector();
if(lastSector != &sector)
{
minLevel = maxLevel = sector.lightLevel();
Expand Down
22 changes: 7 additions & 15 deletions doomsday/client/src/render/blockmapvisual.cpp
Expand Up @@ -526,34 +526,26 @@ void Rend_BlockmapDebug()
Map &map = App_World().map();
switch(bmapShowDebug)
{
default: // MobjLinks.
if(!map.mobjBlockmap()) return;

blockmap = map.mobjBlockmap();
default: // Mobjs.
blockmap = &map.mobjBlockmap();
cellDrawer = rendCellMobjs;
objectTypeName = "Mobjs";
break;

case 2: // Lines.
if(!map.lineBlockmap()) return;

blockmap = map.lineBlockmap();
blockmap = &map.lineBlockmap();
cellDrawer = rendCellLines;
objectTypeName = "Lines";
break;

case 3: // BspLeafs.
if(!map.bspLeafBlockmap()) return;

blockmap = map.bspLeafBlockmap();
case 3: // BSP leafs.
blockmap = &map.bspLeafBlockmap();
cellDrawer = rendCellBspLeafs;
objectTypeName = "BSP Leafs";
break;

case 4: // PolyobjLinks.
if(!map.polyobjBlockmap()) return;

blockmap = map.polyobjBlockmap();
case 4: // Polyobjs.
blockmap = &map.polyobjBlockmap();
cellDrawer = rendCellPolyobjs;
objectTypeName = "Polyobjs";
break;
Expand Down
12 changes: 6 additions & 6 deletions doomsday/client/src/render/lightgrid.cpp
Expand Up @@ -547,9 +547,9 @@ DENG2_OBSERVES(Sector, LightLevelChange)

samplePoint = origin + off + samplePoints[0];

BspLeaf *bspLeaf = map.bspLeafAtPoint(samplePoint);
if(bspLeaf->pointInside(samplePoint))
ssamples[idx] = bspLeaf->sectorPtr();
BspLeaf &bspLeaf = map.bspLeafAt(samplePoint);
if(bspLeaf.pointInside(samplePoint))
ssamples[idx] = bspLeaf.sectorPtr();
else
ssamples[idx] = 0;

Expand Down Expand Up @@ -596,9 +596,9 @@ DENG2_OBSERVES(Sector, LightLevelChange)
// We haven't sampled this point yet.
samplePoint = origin + off + samplePoints[n];

BspLeaf *bspLeaf = map.bspLeafAtPoint(samplePoint);
if(bspLeaf->pointInside(samplePoint))
ssamples[idx] = bspLeaf->sectorPtr();
BspLeaf &bspLeaf = map.bspLeafAt(samplePoint);
if(bspLeaf.pointInside(samplePoint))
ssamples[idx] = bspLeaf.sectorPtr();
else
ssamples[idx] = 0;
}
Expand Down
2 changes: 1 addition & 1 deletion doomsday/client/src/render/lumobj.cpp
Expand Up @@ -1134,7 +1134,7 @@ static boolean LOIT_ClipLumObj(void *data, void * /*context*/)

luminousClipped[lumIdx] = 1;

if(LineSightTest(eye, origin, -1, 1, LS_PASSLEFT | LS_PASSOVER | LS_PASSUNDER).trace(*App_World().map().bspRoot()))
if(LineSightTest(eye, origin, -1, 1, LS_PASSLEFT | LS_PASSOVER | LS_PASSUNDER).trace(App_World().map().bspRoot()))
{
luminousClipped[lumIdx] = 0; // Will have a halo.
}
Expand Down
4 changes: 2 additions & 2 deletions doomsday/client/src/render/rend_bias.cpp
Expand Up @@ -677,7 +677,7 @@ BEGIN_PROF( PROF_BIAS_UPDATE );
float const maxLevel = s->sectorLevel[1];
float const oldIntensity = s->intensity;

Sector &sector = map.bspLeafAtPoint(s->origin)->sector();
Sector &sector = map.bspLeafAt(s->origin).sector();

// The lower intensities are useless for light emission.
if(sector.lightLevel() >= maxLevel)
Expand Down Expand Up @@ -1039,7 +1039,7 @@ void SB_EvalPoint(float light[4], vertexillum_t *illum,
Vector3d surfacePoint = point + delta / 100;

if(useSightCheck &&
!LineSightTest(s->origin, surfacePoint).trace(*App_World().map().bspRoot()))
!LineSightTest(s->origin, surfacePoint).trace(App_World().map().bspRoot()))
{
// LOS fail.
if(casted)
Expand Down
2 changes: 1 addition & 1 deletion doomsday/client/src/render/rend_decor.cpp
Expand Up @@ -413,7 +413,7 @@ static uint generateDecorLights(MaterialSnapshot::Decoration const &decor,
if(Surface::DecorSource *source = suf.newDecoration())
{
source->origin = origin;
source->bspLeaf = App_World().map().bspLeafAtPoint(origin);
source->bspLeaf = &App_World().map().bspLeafAt(origin);
source->decor = &decor;
decorCount++;
}
Expand Down
2 changes: 1 addition & 1 deletion doomsday/client/src/render/rend_main.cpp
Expand Up @@ -2471,7 +2471,7 @@ void Rend_RenderMap()
currentBspLeaf = 0;

// Draw the world!
traverseBspAndDrawLeafs(App_World().map().bspRoot());
traverseBspAndDrawLeafs(&App_World().map().bspRoot());

Rend_RenderMobjShadows();
}
Expand Down
12 changes: 5 additions & 7 deletions doomsday/client/src/render/rend_particle.cpp
Expand Up @@ -408,8 +408,6 @@ static void setupModelParamsForParticle(rendmodelparams_t* params,
params->origin[VZ] = params->gzt = origin[VY];
params->distance = dist;

BspLeaf *bspLeaf = App_World().map().bspLeafAtPoint(Vector2d(origin[VX], origin[VY]));

params->extraScale = size; // Extra scaling factor.
params->mf = &modefs[dst->model];
params->alwaysInterpolate = true;
Expand Down Expand Up @@ -484,11 +482,11 @@ static void setupModelParamsForParticle(rendmodelparams_t* params,

Rend_ApplyTorchLight(params->ambientColor, params->distance);

lparams.starkLight = false;
lparams.origin[VX] = params->origin[VX];
lparams.origin[VY] = params->origin[VY];
lparams.origin[VZ] = params->origin[VZ];
lparams.bspLeaf = bspLeaf;
lparams.starkLight = false;
lparams.origin[VX] = params->origin[VX];
lparams.origin[VY] = params->origin[VY];
lparams.origin[VZ] = params->origin[VZ];
lparams.bspLeaf = &App_World().map().bspLeafAt(Vector2d(origin[VX], origin[VY]));
lparams.ambientColor = params->ambientColor;

params->vLightListIdx = R_CollectAffectingLights(&lparams);
Expand Down
6 changes: 3 additions & 3 deletions doomsday/client/src/world/api_map.cpp
Expand Up @@ -1564,15 +1564,15 @@ DENG_EXTERN_C int P_MobjUnlink(mobj_t *mo)
DENG_EXTERN_C BspLeaf *P_BspLeafAtPoint_FixedPrecision(const_pvec2d_t point)
{
if(!App_World().hasMap()) return 0;
return App_World().map().bspLeafAtPoint_FixedPrecision(point);
return &App_World().map().bspLeafAt_FixedPrecision(point);
}

#undef P_BspLeafAtPoint_FixedPrecisionXY
DENG_EXTERN_C BspLeaf *P_BspLeafAtPoint_FixedPrecisionXY(coord_t x, coord_t y)
{
if(!App_World().hasMap()) return 0;
coord_t point[2] = { x, y };
return App_World().map().bspLeafAtPoint_FixedPrecision(point);
return &App_World().map().bspLeafAt_FixedPrecision(point);
}

#undef P_MobjLinesIterator
Expand Down Expand Up @@ -1693,7 +1693,7 @@ DENG_EXTERN_C boolean P_CheckLineSight(const_pvec3d_t from, const_pvec3d_t to, c
{
if(!App_World().hasMap()) return false; // I guess?
return LineSightTest(Vector3d(from), Vector3d(to),
dfloat(bottomSlope), dfloat(topSlope), flags).trace(*App_World().map().bspRoot());
dfloat(bottomSlope), dfloat(topSlope), flags).trace(App_World().map().bspRoot());
}

#undef P_TraceLOS
Expand Down

0 comments on commit 03817b9

Please sign in to comment.