chiark / gitweb /
Net: highlight more errors in locked tiles.
authorJacob Nevins <jacobn@chiark.greenend.org.uk>
Sun, 23 Sep 2018 15:36:30 +0000 (16:36 +0100)
committerJacob Nevins <jacobn@chiark.greenend.org.uk>
Sun, 23 Sep 2018 15:36:30 +0000 (16:36 +0100)
If a locked tile has an edge pointing at a barrier, or at another
locked tile without a matching edge, colour that edge red.

net.c

diff --git a/net.c b/net.c
index 905297d83afcfac4283686bfe29c94163b948473..8757ce3c188cc2766f2b2efccac004725a84fa37 100644 (file)
--- a/net.c
+++ b/net.c
@@ -2915,7 +2915,25 @@ static void game_redraw(drawing *dr, game_drawstate *ds,
                 }
 
                 if (t & d) {
-                    int edgeval = (t & ERR(d) ? 3 : t & ACTIVE ? 2 : 1);
+                    int edgeval;
+
+                    /* Highlight as an error any edge in a locked tile that
+                     * is adjacent to a lack-of-edge in another locked tile,
+                     * or to a barrier */
+                    if (t & LOCKED) {
+                        if (barrier(state, gx, gy) & d) {
+                            t |= ERR(d);
+                        } else {
+                            int ox, oy, t2;
+                            OFFSET(ox, oy, gx, gy, d, state);
+                            t2 = tile(state, ox, oy);
+                            if ((t2 & LOCKED) && !(t2 & F(d))) {
+                                t |= ERR(d);
+                            }
+                        }
+                    }
+
+                    edgeval = (t & ERR(d) ? 3 : t & ACTIVE ? 2 : 1);
                     todraw(ds, dx, dy) |= edgeval << (TILE_WIRE_SHIFT + dsh*2);
                     if (!(gx == tx && gy == ty)) {
                         todraw(ds, dx + X(d), dy + Y(d)) |=