about summary refs log tree commit diff stats
path: root/Source/PuzzleSerializer.cpp
diff options
context:
space:
mode:
authorjbzdarkid <jbzdarkid@gmail.com>2019-11-22 10:04:19 -0800
committerjbzdarkid <jbzdarkid@gmail.com>2019-11-22 10:04:19 -0800
commit059e44fa16b649938d79597bcf8f41bf4aa136ab (patch)
tree255c9f256ecae0923e872e62ccaab48221f12743 /Source/PuzzleSerializer.cpp
parentcbdf87bb8aaebca9c969dfec3c1664b9b6355a0d (diff)
downloadwitness-tutorializer-059e44fa16b649938d79597bcf8f41bf4aa136ab.tar.gz
witness-tutorializer-059e44fa16b649938d79597bcf8f41bf4aa136ab.tar.bz2
witness-tutorializer-059e44fa16b649938d79597bcf8f41bf4aa136ab.zip
fix more asymmetrical gap bugs
Diffstat (limited to 'Source/PuzzleSerializer.cpp')
-rw-r--r--Source/PuzzleSerializer.cpp20
1 files changed, 14 insertions, 6 deletions
diff --git a/Source/PuzzleSerializer.cpp b/Source/PuzzleSerializer.cpp index a131376..fb4166b 100644 --- a/Source/PuzzleSerializer.cpp +++ b/Source/PuzzleSerializer.cpp
@@ -485,7 +485,6 @@ void PuzzleSerializer::WriteSymmetry(const Puzzle& p, int id) {
485 reflectionData[location] = symLocation; 485 reflectionData[location] = symLocation;
486 reflectionData[symLocation] = location; 486 reflectionData[symLocation] = location;
487 if (p.grid[x][y].end != Cell::Dir::NONE) { 487 if (p.grid[x][y].end != Cell::Dir::NONE) {
488 // Rely on symmetry to set the other pair
489 location = extra_xy_to_loc(p, x, y); 488 location = extra_xy_to_loc(p, x, y);
490 Pos sym = p.GetSymmetricalPos(x, y); 489 Pos sym = p.GetSymmetricalPos(x, y);
491 symLocation = extra_xy_to_loc(p, sym.x, sym.y); 490 symLocation = extra_xy_to_loc(p, sym.x, sym.y);
@@ -503,11 +502,20 @@ void PuzzleSerializer::WriteSymmetry(const Puzzle& p, int id) {
503 int location = extra_xy_to_loc(p, x, y); 502 int location = extra_xy_to_loc(p, x, y);
504 int symLocation = extra_xy_to_loc(p, sym.x, sym.y); 503 int symLocation = extra_xy_to_loc(p, sym.x, sym.y);
505 // Each gap results in two intersections, @Assume they're written consecutively 504 // Each gap results in two intersections, @Assume they're written consecutively
506 // Rely on symmetry to set the other pairs 505
507 reflectionData[location] = symLocation; 506 if ((x%2 != 0 && p.symmetry & Puzzle::Symmetry::X) ||
508 reflectionData[location-1] = symLocation-1; 507 (y%2 != 0 && p.symmetry & Puzzle::Symmetry::Y)) {
509 reflectionData[symLocation] = location; 508 // Write data inverted, because it's being reflected
510 reflectionData[symLocation-1] = location-1; 509 reflectionData[location] = symLocation-1;
510 reflectionData[location-1] = symLocation;
511 reflectionData[symLocation] = location-1;
512 reflectionData[symLocation-1] = location;
513 } else { // Write data normally
514 reflectionData[location] = symLocation;
515 reflectionData[location-1] = symLocation-1;
516 reflectionData[symLocation] = location;
517 reflectionData[symLocation-1] = location-1;
518 }
511 } 519 }
512 } 520 }
513 521