void MoveAllDescendants(cPlacedPieces & a_PlacedPieces, size_t a_Pivot, int a_HeightDifference) { size_t num = a_PlacedPieces.size(); cPlacedPiece * Pivot = a_PlacedPieces[a_Pivot]; for (size_t i = a_Pivot + 1; i < num; i++) { if ( (a_PlacedPieces[i]->GetParent() == Pivot) && // It is a direct dependant of the pivot !((const cPrefab &)a_PlacedPieces[i]->GetPiece()).ShouldMoveToGround() // It attaches strictly by connectors ) { a_PlacedPieces[i]->MoveToGroundBy(a_HeightDifference); MoveAllDescendants(a_PlacedPieces, i, a_HeightDifference); } } // for i - a_PlacedPieces[] }
cNetherFort(cNetherFortGen & a_ParentGen, int a_OriginX, int a_OriginZ, int a_GridSize, int a_MaxDepth, int a_Seed) : super(a_OriginX, a_OriginZ), m_ParentGen(a_ParentGen), m_GridSize(a_GridSize), m_Seed(a_Seed) { // TODO: Proper Y-coord placement int BlockY = 64; // Generate pieces: for (int i = 0; m_Pieces.size() < (size_t)(a_MaxDepth * a_MaxDepth / 8 + a_MaxDepth); i++) { cBFSPieceGenerator pg(cNetherFortGen::m_PiecePool, a_Seed + i); pg.PlacePieces(a_OriginX, BlockY, a_OriginZ, a_MaxDepth, m_Pieces); } }