Skip to content

Commit

Permalink
Refactor: GameMap's HEdges can now be "finished" during collation
Browse files Browse the repository at this point in the history
As the vertexes list is no longer hardened, it is no longer necessary
defer the "finishing" logic.
  • Loading branch information
danij-deng committed Mar 17, 2013
1 parent 3c3416d commit 4f612ad
Showing 1 changed file with 18 additions and 29 deletions.
47 changes: 18 additions & 29 deletions doomsday/client/src/edit_bsp.cpp
Expand Up @@ -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);

Expand All @@ -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;
Expand Down Expand Up @@ -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);
}

0 comments on commit 4f612ad

Please sign in to comment.