chiark / gitweb /
wip cards on track
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 3 Mar 2019 02:55:35 +0000 (02:55 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 3 Mar 2019 02:55:35 +0000 (02:55 +0000)
generate-board

index 1ba27f8d0eadaff0ca7f34408964078889234914..a7ae78610d15a74b31b1c15e048e8c5bff19f48f 100755 (executable)
@@ -530,11 +530,13 @@ sub water_cubes($){
   }
 }
 
+my $deck_h = 89 * MM2PT;
+
 sub decks(){
   my $lw = $edge_lw/2;
   o("  /deck1path {\n");
   my $w = 63 * MM2PT;
-  my $h = 89 * MM2PT;
+  my $h = $deck_h;
   my $r =  5 * MM2PT;
   o("      ",($w/2)," 0 moveto\n");
   my @p = ([ $w, 0 ],
@@ -577,22 +579,36 @@ sub sea_track(){
   }
   for my $i (0..$#pos-1) {
     my $differs = $track->[$i] != $track->[$i+1];
-    next unless $differs || $track->[$i]==2 && $track->[$i+2]!=2;
     o("  $prepline\n");
     o("  gsave ",
       psvec($pos[$i] + mkvec(-0.0 * $token_sz, $dy/2))," translate\n");
-    if ($differs) {
-      o("  0 0 moveto",
-       " ",psvec(mkvec( $token_sz * 1.25 + $cube_sz, 0 )),
-       " rlineto stroke\n");
+    if ($i >= 1 &&
+       $track->[$i] == $track->[$i-1] &&
+       ($i == 1 ||
+        $track->[$i] != $track->[$i-2])) {
+      my $shrink = ($hs_sz / $deck_h);
+      o("    gsave % T M $i\n");
+      o("      0 -$dy translate\n");
+      o("      gsave");
+      o("        $shrink dup scale\n");
+      o("        newpath ", ($hs_lw / $shrink)," setlinewidth deck1path stroke\n");
+      o("      grestore");
+      o("    grestore\n");
+    }
+    if ($differs || $track->[$i]==2 && $track->[$i+2]!=2) {
+      if ($differs) {
+       o("  0 0 moveto",
+         " ",psvec(mkvec( $token_sz * 1.25 + $cube_sz, 0 )),
+         " rlineto stroke\n");
+      }
+      o("  ",($token_sz * 0.6 + $cube_gap)," ",($cube_gap + $hs_lw),
+       " translate\n");
+      water_cubes(2);
+      my $new_n = $track->[$i+1] - 2;
+      o("  ", 0.5 * (water_cubes_sz(2) - water_cubes_sz($new_n)),
+       "  ",       (water_cubes_sz(2)-water_cubes_sz(1)), " translate\n");
+      water_cubes($new_n);
     }
-    o("  ",($token_sz * 0.6 + $cube_gap)," ",($cube_gap + $hs_lw),
-      " translate\n");
-    water_cubes(2);
-    my $new_n = $track->[$i+1] - 2;
-    o("  ", 0.5 * (water_cubes_sz(2) - water_cubes_sz($new_n)),
-      "  ",       (water_cubes_sz(2)-water_cubes_sz(1)), " translate\n");
-    water_cubes($new_n);
     o("  grestore\n");
   }
   o("  grestore\n");
@@ -743,13 +759,13 @@ fill_faces();
 edge_faces();
 dykes();
 label_faces();
+decks();
 sea_track();
 hs_initial();
 # xxx HS initial locations
 # xxx HS instructions
 # xxx overall instructions
 play_hint();
-decks();
 postamble();
 
 print STDERR Dumper(\%region) if $ENV{'GENERATE_BOARD_DUP'};