Add game components 246-268; data.DrawSlot, Canvas.TextVeil

Health, mana and experience bars, quarter hearts, lives, a spinning
coin counter, score board, stage timer, minimap with fog, compass,
hotbar, paper-doll equipment, skill tree, skill buttons with cooldown
wipes, status effects, a boss bar, damage numbers, quest log and
tracker, party frames, character sheet, level-up screen and shop.
data exports DrawSlot so every slot looks alike; pixel adds TextVeil
for dissolving text. Messages the font cannot draw are fixed and
TestMessagesHaveGlyphs holds every message to the font.
This commit is contained in:
ZacharyZhang-NY committed 2026-10-12 01:53:20 -04:00
1 parent 596c62e026
commit f48075230f
42 files changed
+3260 -26

No files matched your search

+23
View File
@@ -268,3 +268,26 @@ func boolInt(b bool) int {
}
return 0
}
func TestTextVeilKeepsDotsBelowTheLevel(t *testing.T) {
plain := canvas(t, 40, 40, func(g pixel.Canvas) { g.Text(2, 2, "HM", pixel.Ink, 2) })
for _, level := range []int{0, 8, 16} {
veil := canvas(t, 40, 40, func(g pixel.Canvas) { g.TextVeil(2, 2, "HM", pixel.Ink, level, 2) })
kept, all := 0, 0
for y := range 40 {
for x := range 40 {
ink, got := plain.at(x, y) == pixel.Ink, veil.at(x, y) == pixel.Ink
if got && (!ink || pixel.Bayer(x, y) >= level) {
t.Fatalf("level %d: dot %d,%d drawn", level, x, y)
}
if ink && pixel.Bayer(x, y) < level && !got {
t.Fatalf("level %d: dot %d,%d missing", level, x, y)
}
kept, all = kept+boolInt(got), all+boolInt(ink)
}
}
if want := all * level / 16; kept < want-all/8 || kept > want+all/8 {
t.Fatalf("level %d kept %d of %d dots", level, kept, all)
}
}
}