mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-20 07:31:30 -07:00
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.
This commit is contained in:
@ -243,7 +243,7 @@ void spectrectx_step_hex(SpectreContext *ctx, SpectreCoords *sc,
|
|||||||
* delivering both plane and combinatorial coordinates as they go */
|
* delivering both plane and combinatorial coordinates as they go */
|
||||||
Spectre *spectre_initial(SpectreContext *ctx);
|
Spectre *spectre_initial(SpectreContext *ctx);
|
||||||
Spectre *spectre_adjacent(SpectreContext *ctx, const Spectre *src_spec,
|
Spectre *spectre_adjacent(SpectreContext *ctx, const Spectre *src_spec,
|
||||||
unsigned src_edge);
|
unsigned src_edge, unsigned *dst_edge);
|
||||||
|
|
||||||
/* For extracting the point coordinates */
|
/* For extracting the point coordinates */
|
||||||
typedef struct Coord {
|
typedef struct Coord {
|
||||||
|
@ -154,7 +154,7 @@ Spectre *spectre_initial(SpectreContext *ctx)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Spectre *spectre_adjacent(SpectreContext *ctx, const Spectre *src_spec,
|
Spectre *spectre_adjacent(SpectreContext *ctx, const Spectre *src_spec,
|
||||||
unsigned src_edge)
|
unsigned src_edge, unsigned *dst_edge_out)
|
||||||
{
|
{
|
||||||
unsigned dst_edge;
|
unsigned dst_edge;
|
||||||
Spectre *dst_spec = snew(Spectre);
|
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);
|
spectrectx_step(ctx, dst_spec->sc, src_edge, &dst_edge);
|
||||||
spectre_place(dst_spec, src_spec->vertices[(src_edge+1) % 14],
|
spectre_place(dst_spec, src_spec->vertices[(src_edge+1) % 14],
|
||||||
src_spec->vertices[src_edge], dst_edge);
|
src_spec->vertices[src_edge], dst_edge);
|
||||||
|
if (dst_edge_out)
|
||||||
|
*dst_edge_out = dst_edge;
|
||||||
return dst_spec;
|
return dst_spec;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -454,7 +456,7 @@ void spectrectx_generate(SpectreContext *ctx,
|
|||||||
for (edge = 0; edge < 14; edge++) {
|
for (edge = 0; edge < 14; edge++) {
|
||||||
Spectre *new_spec;
|
Spectre *new_spec;
|
||||||
|
|
||||||
new_spec = spectre_adjacent(ctx, spec, edge);
|
new_spec = spectre_adjacent(ctx, spec, edge, NULL);
|
||||||
|
|
||||||
if (find234(placed, new_spec, NULL)) {
|
if (find234(placed, new_spec, NULL)) {
|
||||||
spectre_free(new_spec);
|
spectre_free(new_spec);
|
||||||
|
Reference in New Issue
Block a user