Kennungen, Kachelformen und Platzhalter für die Grafik

Jede Grafik auf dem Spielfeld bekommt eine Kennung. Art zeichnet sie im
gewählten Stil oder aus einem Bild gleichen Namens unter game/art.
ArtStyle zeichnet vorerst schlichte Platzhalter. TileShape beschreibt
die Nachbarn einer Kachel, damit Felsmassen außen rund und innen
geschlossen gezeichnet werden können. Die drei Stile Warm, Pastell und
Glimmen gibt es schon mit Namen, noch ohne eigene Zeichnungen.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
Steven Wroblewski
2026-10-02 11:24:45 +02:00
parent 5e9836c64a
commit 9921aba63a
19 changed files with 574 additions and 0 deletions
+38
View File
@@ -0,0 +1,38 @@
extends TestCase
## A map of three by three tiles, row by row, with rock (1) in the middle and
## in the top right corner.
const CODES := [0, 0, 1, 0, 1, 0, 0, 0, 0]
func _flags() -> PackedByteArray:
return TileShape.flags(PackedByteArray(CODES), [1])
func test_flags_mark_the_tiles_of_the_given_codes() -> void:
check_eq(_flags(), PackedByteArray([0, 0, 1, 0, 1, 0, 0, 0, 0]), "rock is marked")
check_eq(TileShape.flags(PackedByteArray([0, 1, 2]), [1, 2]), PackedByteArray([0, 1, 1]), "several codes")
func test_a_mask_holds_the_marked_neighbours_clockwise_from_north() -> void:
check_eq(TileShape.mask(_flags(), 3, 3, Vector2i(1, 1), false), TileShape.NE, "the middle sees the corner")
check_eq(TileShape.mask(_flags(), 3, 3, Vector2i(1, 2), false), TileShape.N, "below the middle")
check_eq(TileShape.mask(_flags(), 3, 3, Vector2i(2, 1), false), TileShape.N | TileShape.W, "right of the middle")
check_eq(TileShape.mask(_flags(), 3, 3, Vector2i(0, 0), false), TileShape.SE, "the top left corner")
func test_beyond_the_edge_neighbours_count_as_marked_if_asked() -> void:
var corner := TileShape.mask(_flags(), 3, 3, Vector2i(0, 0), true)
var outside := TileShape.N | TileShape.NE | TileShape.NW | TileShape.W | TileShape.SW
check_eq(corner, outside | TileShape.SE, "five neighbours lie outside")
func test_variants_stay_the_same_and_differ_between_neighbours() -> void:
check_eq(TileShape.variant(Vector2i(4, 7)), TileShape.variant(Vector2i(4, 7)), "the same every time")
var seen := {}
for y in 4:
for x in 4:
var variant := TileShape.variant(Vector2i(x, y))
check(variant >= 0, "never negative: %d" % variant)
seen[variant] = true
check_eq(seen.size(), 16, "sixteen tiles, sixteen variants")