void BlockInfo::Generate(FRandomStream* randStream) { bIsSolid = false; bool needsGeneration = true; int genTryCount = 0; do { //get a random direction int direction = randStream->RandRange(0, 3); EGridDirection::Type gridDirection; switch (direction) { case 0: gridDirection = EGridDirection::GD_UP; break; case 1: gridDirection = EGridDirection::GD_RIGHT; break; case 2: gridDirection = EGridDirection::GD_DOWN; break; case 3: gridDirection = EGridDirection::GD_LEFT; break } BlockInfo* randBlock = GetAdjacent(gridDirection);//get a block in a random direction if (!randBlock || !randBlock->IsRemoveable() || randBlock->IsEdge())//check if that block is removeable { genTryCount++; continue; } randBlock->Generate(randStream); genTryCount++; } while (needsGeneration && genTryCount < 4); }