diff --git a/doomsday/engine/include/map/surface.h b/doomsday/engine/include/map/surface.h index e053675843..d4b2a56d66 100644 --- a/doomsday/engine/include/map/surface.h +++ b/doomsday/engine/include/map/surface.h @@ -43,7 +43,7 @@ typedef struct surfacedecor_s { typedef struct surface_s { //runtime_mapdata_header_t header; ddmobj_base_t base; - void* owner; // Either @c DMU_SIDEDEF, or @c DMU_PLANE + de::MapElement *owner; // Either @c DMU_SIDEDEF, or @c DMU_PLANE int flags; // SUF_ flags int oldFlags; material_t* material; diff --git a/doomsday/engine/src/edit_map.cpp b/doomsday/engine/src/edit_map.cpp index a32539295f..0082d94a89 100644 --- a/doomsday/engine/src/edit_map.cpp +++ b/doomsday/engine/src/edit_map.cpp @@ -98,9 +98,9 @@ static SideDef* createSide(void) e_map->sideDefs.push_back(side); side->buildData.index = e_map->sideDefs.size(); // 1-based index, 0 = NIL. - side->SW_bottomsurface.owner = (void*) side; - side->SW_middlesurface.owner = (void*) side; - side->SW_topsurface.owner = (void*) side; + side->SW_bottomsurface.owner = side; + side->SW_middlesurface.owner = side; + side->SW_topsurface.owner = side; return side; } @@ -1955,7 +1955,7 @@ uint MPE_PlaneCreate(uint sector, coord_t height, const ddstring_t* materialUri, Sector* s = e_map->sectors[sector - 1]; Plane* pln = new Plane; - pln->surface.owner = (void*) pln; + pln->surface.owner = pln; pln->height = height; assignSurfaceMaterial(&pln->surface, materialUri); diff --git a/doomsday/engine/src/map/bsp/partitioner.cpp b/doomsday/engine/src/map/bsp/partitioner.cpp index 777ecc5f5e..8604229ac9 100644 --- a/doomsday/engine/src/map/bsp/partitioner.cpp +++ b/doomsday/engine/src/map/bsp/partitioner.cpp @@ -371,7 +371,7 @@ struct Partitioner::Instance scanRegion.maxX = MAX_OF(line->L_v1origin[VX], line->L_v2origin[VX]) + DIST_EPSILON; } validCount++; - GameMap_LineDefsBoxIterator(map, &scanRegion, testForWindowEffectWorker, (void*)&p); + GameMap_LineDefsBoxIterator(map, &scanRegion, testForWindowEffectWorker, &p); if(p.backOpen && p.frontOpen && line->L_frontsector == p.backOpen) { @@ -1931,11 +1931,13 @@ struct Partitioner::Instance if(tree.isLeaf()) { + DENG2_ASSERT(dmuOb->type() == DMU_BSPLEAF); // There is now one less BspLeaf. numLeafs -= 1; } else { + DENG2_ASSERT(dmuOb->type() == DMU_BSPNODE); // There is now one less BspNode. numNodes -= 1; } diff --git a/doomsday/engine/src/map/hedge.cpp b/doomsday/engine/src/map/hedge.cpp index 8e87f15c08..82d59b8b63 100644 --- a/doomsday/engine/src/map/hedge.cpp +++ b/doomsday/engine/src/map/hedge.cpp @@ -422,7 +422,7 @@ int HEdge_GetProperty(const HEdge* hedge, setargs_t* args) DMU_GetValue(DMT_HEDGE_LINEDEF, &hedge->lineDef, args, 0); break; case DMU_FRONT_SECTOR: { - Sector* sec = hedge->sector? hedge->sector : NULL; + Sector* sec = hedge->sector; DMU_GetValue(DMT_HEDGE_SECTOR, &sec, args, 0); break; } case DMU_BACK_SECTOR: { diff --git a/doomsday/engine/src/map/p_dmu.cpp b/doomsday/engine/src/map/p_dmu.cpp index 860cade82a..66fd028e57 100644 --- a/doomsday/engine/src/map/p_dmu.cpp +++ b/doomsday/engine/src/map/p_dmu.cpp @@ -1128,18 +1128,18 @@ static int setProperty(void *obj, void *context) { if(R_UpdateSurface(updateSurface, false)) { - switch(DMU_GetType(updateSurface->owner)) + switch(updateSurface->owner->type()) { case DMU_SIDEDEF: - updateSidedef = (SideDef *)updateSurface->owner; + updateSidedef = updateSurface->owner->castTo(); break; case DMU_PLANE: - updatePlane = (Plane *)updateSurface->owner; + updatePlane = updateSurface->owner->castTo(); break; default: - LegacyCore_FatalError("SetPropert: Internal error, surface owner unknown."); + DENG2_ASSERT(false); // Unsupported type. } } } diff --git a/doomsday/engine/src/map/r_world.cpp b/doomsday/engine/src/map/r_world.cpp index 5c5f9dfa79..68e63fa2d6 100644 --- a/doomsday/engine/src/map/r_world.cpp +++ b/doomsday/engine/src/map/r_world.cpp @@ -485,7 +485,7 @@ Plane *R_NewPlaneForSector(Sector *sec) suf->normal[VZ] = 1; V3f_BuildTangents(suf->tangent, suf->bitangent, suf->normal); - suf->owner = (void*) plane; + suf->owner = plane; /// @todo The initial material should be the "unknown" material. Surface_SetMaterial(suf, NULL); Surface_SetMaterialOrigin(suf, 0, 0); diff --git a/doomsday/engine/src/map/surface.cpp b/doomsday/engine/src/map/surface.cpp index 3de0871d8e..047dc2b05d 100644 --- a/doomsday/engine/src/map/surface.cpp +++ b/doomsday/engine/src/map/surface.cpp @@ -46,9 +46,9 @@ boolean Surface_AttachedToMap(Surface *suf) { DENG_ASSERT(suf); if(!suf->owner) return false; - if(DMU_GetType(suf->owner) == DMU_PLANE) + if(suf->owner->type() == DMU_PLANE) { - Sector *sec = ((Plane *)suf->owner)->sector; + Sector *sec = suf->owner->castTo()->sector; if(0 == sec->bspLeafCount) return false; } @@ -87,10 +87,10 @@ boolean Surface_SetMaterial(Surface *suf, material_t *mat) R_SurfaceListAdd(GameMap_DecoratedSurfaces(map), suf); } - if(DMU_GetType(suf->owner) == DMU_PLANE) + if(suf->owner->type() == DMU_PLANE) { ded_ptcgen_t const *def = App_Materials()->ptcGenDef(*mat); - P_SpawnPlaneParticleGen(def, (Plane *)suf->owner); + P_SpawnPlaneParticleGen(def, suf->owner->castTo()); } } } @@ -265,10 +265,10 @@ void Surface_UpdateBaseOrigin(Surface *suf) LOG_AS("Surface_UpdateBaseOrigin"); if(!suf->owner) return; - switch(DMU_GetType(suf->owner)) + switch(suf->owner->type()) { case DMU_PLANE: { - Plane *pln = (Plane *)suf->owner; + Plane *pln = suf->owner->castTo(); Sector *sec = pln->sector; DENG_ASSERT(sec); @@ -278,7 +278,7 @@ void Surface_UpdateBaseOrigin(Surface *suf) break; } case DMU_SIDEDEF: { - SideDef *side = (SideDef *)suf->owner; + SideDef *side = suf->owner->castTo(); LineDef *line = side->line; Sector *sec; DENG_ASSERT(line); @@ -327,7 +327,8 @@ void Surface_UpdateBaseOrigin(Surface *suf) default: LOG_DEBUG("Invalid DMU type %s for owner object %p.") - << DMU_Str(DMU_GetType(suf->owner)) << de::dintptr(suf->owner); + << DMU_Str(suf->owner->type()) << de::dintptr(suf->owner); + DENG2_ASSERT(false); } } diff --git a/doomsday/engine/src/render/lumobj.cpp b/doomsday/engine/src/render/lumobj.cpp index 147429794a..9b1a1a0968 100644 --- a/doomsday/engine/src/render/lumobj.cpp +++ b/doomsday/engine/src/render/lumobj.cpp @@ -951,10 +951,10 @@ END_PROF( PROF_LUMOBJ_FRAME_SORT ); */ static boolean createGlowLightForSurface(Surface *suf, void * /*parameters*/) { - switch(DMU_GetType(suf->owner)) + switch(suf->owner->type()) { case DMU_PLANE: { - Plane *pln = reinterpret_cast(suf->owner); + Plane *pln = suf->owner->castTo(); Sector *sec = pln->sector; // Only produce a light for sectors with open space. @@ -997,8 +997,7 @@ static boolean createGlowLightForSurface(Surface *suf, void * /*parameters*/) return true; // Not yet supported by this algorithm. default: - Con_Error("createGlowLightForSurface: Internal error, unknown type %s.", - DMU_Str(DMU_GetType(suf->owner))); + DENG2_ASSERT(false); // Invalid type. } return true; } diff --git a/doomsday/engine/src/render/rend_decor.cpp b/doomsday/engine/src/render/rend_decor.cpp index dbaf3f88a0..4ff6e5054c 100644 --- a/doomsday/engine/src/render/rend_decor.cpp +++ b/doomsday/engine/src/render/rend_decor.cpp @@ -347,20 +347,20 @@ boolean R_ProjectSurfaceDecorations(Surface *suf, void *context) { R_ClearSurfaceDecorations(suf); - switch(DMU_GetType(suf->owner)) + switch(suf->owner->type()) { case DMU_SIDEDEF: { - SideDef *sideDef = (SideDef *)suf->owner; + SideDef *sideDef = suf->owner->castTo(); LineDef *line = sideDef->line; updateSideSectionDecorations(line, sideDef == line->L_frontsidedef? FRONT : BACK, &sideDef->SW_middlesurface == suf? SS_MIDDLE : &sideDef->SW_bottomsurface == suf? SS_BOTTOM : SS_TOP); break; } case DMU_PLANE: - updatePlaneDecorations((Plane *)suf->owner); + updatePlaneDecorations(suf->owner->castTo()); break; default: - Con_Error("R_ProjectSurfaceDecorations: Internal Error, unknown type %s.", DMU_Str(DMU_GetType(suf->owner))); + DENG2_ASSERT(false); // Invalid type. break; } suf->inFlags &= ~SUIF_UPDATE_DECORATIONS; diff --git a/doomsday/engine/src/server/sv_pool.cpp b/doomsday/engine/src/server/sv_pool.cpp index 07d397732c..68f887ad02 100644 --- a/doomsday/engine/src/server/sv_pool.cpp +++ b/doomsday/engine/src/server/sv_pool.cpp @@ -2318,10 +2318,10 @@ void Sv_NewSoundDelta(int soundId, mobj_t* emitter, Sector* sourceSector, else if(sourceSurface) { type = DT_SECTOR_SOUND; - switch(DMU_GetType(sourceSurface->owner)) + switch(sourceSurface->owner->type()) { case DMU_PLANE: { - Plane* pln = (Plane*)sourceSurface->owner; + Plane* pln = sourceSurface->owner->castTo(); // Clients need to know which emitter to use. if(emitter) @@ -2369,8 +2369,7 @@ void Sv_NewSoundDelta(int soundId, mobj_t* emitter, Sector* sourceSector, break; } */ default: - DEBUG_Message(("Sv_NewSoundDelta: Invalid DMU type %s for sourceSurface object %p. Sector origin will be used.", - DMU_Str(DMU_GetType(sourceSurface->owner)), sourceSurface->owner)); + DENG2_ASSERT(false); // Invalid map element type. return; } } diff --git a/doomsday/libdeng2/src/scriptsys/scriptlex.cpp b/doomsday/libdeng2/src/scriptsys/scriptlex.cpp index d7bcce0ac3..f548f56966 100644 --- a/doomsday/libdeng2/src/scriptsys/scriptlex.cpp +++ b/doomsday/libdeng2/src/scriptsys/scriptlex.cpp @@ -474,7 +474,7 @@ String ScriptLex::unescapeStringToken(Token const &token) } else if(*ptr == 'x' && (end - ptr > 2)) { - QString num(reinterpret_cast(ptr + 1), 2); + QString num(const_cast(ptr + 1), 2); duint code = num.toInt(0, 16); c = QChar(code); ptr += 2;