diff options
| author | Simon Tatham <anakin@pobox.com> | 2023-06-18 13:33:28 +0100 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2023-06-18 14:33:53 +0100 |
| commit | 14db5e0145e0942e5cf851d696aebd2347418087 (patch) | |
| tree | 91cbd829bec15eb052133489b077b8b16aee4815 | |
| parent | 68a1e8413c500f62f81c5a283de47bf404346edc (diff) | |
| download | puzzles-14db5e0145e0942e5cf851d696aebd2347418087.zip puzzles-14db5e0145e0942e5cf851d696aebd2347418087.tar.gz puzzles-14db5e0145e0942e5cf851d696aebd2347418087.tar.bz2 puzzles-14db5e0145e0942e5cf851d696aebd2347418087.tar.xz | |
spectre_adjacent: optionally report dst_edge.
Previously, you'd ask this function 'What lies on the other side of
edge #i of this Spectre tile?' and it would tell you the identity of
another Spectre. Now it will also tell you which _edge_ of that
Spectre adjoins the specified edge of the input one. This will be used
in the extra spectre-test mode I'm about to add.
| -rw-r--r-- | spectre-internal.h | 2 | ||||
| -rw-r--r-- | spectre.c | 6 |
2 files changed, 5 insertions, 3 deletions
diff --git a/spectre-internal.h b/spectre-internal.h index bbb2561..e43d30b 100644 --- a/spectre-internal.h +++ b/spectre-internal.h @@ -243,7 +243,7 @@ void spectrectx_step_hex(SpectreContext *ctx, SpectreCoords *sc, * delivering both plane and combinatorial coordinates as they go */ Spectre *spectre_initial(SpectreContext *ctx); Spectre *spectre_adjacent(SpectreContext *ctx, const Spectre *src_spec, - unsigned src_edge); + unsigned src_edge, unsigned *dst_edge); /* For extracting the point coordinates */ typedef struct Coord { @@ -154,7 +154,7 @@ Spectre *spectre_initial(SpectreContext *ctx) } Spectre *spectre_adjacent(SpectreContext *ctx, const Spectre *src_spec, - unsigned src_edge) + unsigned src_edge, unsigned *dst_edge_out) { unsigned dst_edge; Spectre *dst_spec = snew(Spectre); @@ -162,6 +162,8 @@ Spectre *spectre_adjacent(SpectreContext *ctx, const Spectre *src_spec, spectrectx_step(ctx, dst_spec->sc, src_edge, &dst_edge); spectre_place(dst_spec, src_spec->vertices[(src_edge+1) % 14], src_spec->vertices[src_edge], dst_edge); + if (dst_edge_out) + *dst_edge_out = dst_edge; return dst_spec; } @@ -454,7 +456,7 @@ void spectrectx_generate(SpectreContext *ctx, for (edge = 0; edge < 14; edge++) { Spectre *new_spec; - new_spec = spectre_adjacent(ctx, spec, edge); + new_spec = spectre_adjacent(ctx, spec, edge, NULL); if (find234(placed, new_spec, NULL)) { spectre_free(new_spec); |