From 4f612ad8e3e905edb7064d47176f065630bc4a1e Mon Sep 17 00:00:00 2001 From: danij Date: Sun, 17 Mar 2013 11:48:01 +0000 Subject: [PATCH] Refactor: GameMap's HEdges can now be "finished" during collation As the vertexes list is no longer hardened, it is no longer necessary defer the "finishing" logic. --- doomsday/client/src/edit_bsp.cpp | 47 ++++++++++++-------------------- 1 file changed, 18 insertions(+), 29 deletions(-) diff --git a/doomsday/client/src/edit_bsp.cpp b/doomsday/client/src/edit_bsp.cpp index aab0e55f77..895ff78626 100644 --- a/doomsday/client/src/edit_bsp.cpp +++ b/doomsday/client/src/edit_bsp.cpp @@ -94,12 +94,29 @@ static int hedgeCollector(BspTreeNode& tree, void* parameters) hedge->_origIndex = p->curIdx++; (*p->hedgeLUT)[hedge->_origIndex] = hedge; + if(hedge->hasLine()) + { + Vertex const &vtx = hedge->line().vertex(hedge->lineSideId()); + + hedge->_sector = hedge->line().sectorPtr(hedge->lineSideId()); + hedge->_lineOffset = V2d_Distance(hedge->v1Origin(), vtx.origin()); + } + + hedge->_angle = bamsAtan2(int( hedge->v2Origin()[VY] - hedge->v1Origin()[VY] ), + int( hedge->v2Origin()[VX] - hedge->v1Origin()[VX] )) << FRACBITS; + + // Calculate the length of the segment. + hedge->_length = V2d_Distance(hedge->v2Origin(), hedge->v1Origin()); + + if(hedge->_length == 0) + hedge->_length = 0.01f; // Hmm... + } while((hedge = &hedge->next()) != base); } return false; // Continue traversal. } -static void buildHEdgeLut(BspBuilder& builder, GameMap* map) +static void buildHEdgeLut(BspBuilder &builder, GameMap *map) { DENG2_ASSERT(map); @@ -122,33 +139,6 @@ static void buildHEdgeLut(BspBuilder& builder, GameMap* map) builder.root()->traverseInOrder(hedgeCollector, &parm); } -static void finishHEdges(GameMap *map) -{ - DENG2_ASSERT(map); - - for(uint i = 0; i < map->numHEdges; ++i) - { - HEdge *hedge = map->hedges[i]; - - if(hedge->hasLine()) - { - Vertex const &vtx = hedge->line().vertex(hedge->lineSideId()); - - hedge->_sector = hedge->line().sectorPtr(hedge->lineSideId()); - hedge->_lineOffset = V2d_Distance(hedge->v1Origin(), vtx.origin()); - } - - hedge->_angle = bamsAtan2(int( hedge->v2Origin()[VY] - hedge->v1Origin()[VY] ), - int( hedge->v2Origin()[VX] - hedge->v1Origin()[VX] )) << FRACBITS; - - // Calculate the length of the segment. - hedge->_length = V2d_Distance(hedge->v2Origin(), hedge->v1Origin()); - - if(hedge->_length == 0) - hedge->_length = 0.01f; // Hmm... - } -} - typedef struct { BspBuilder *builder; GameMap *dest; @@ -293,6 +283,5 @@ void MPE_SaveBsp(BspBuilder_c *builder_c, GameMap *map, uint numEditableVertexes buildHEdgeLut(builder, map); collateVertexes(builder, map, &numEditableVertexes, &editableVertexes); - finishHEdges(map); hardenBSP(builder, map); }