Skip to content

Add four sample dice sets to install: marble, steel, green resin, red glass - #389

Open
drehtuer wants to merge 2 commits into
feature/designer-material-and-roundnessfrom
feature/sample-dice-sets
Open

drehtuer wants to merge 2 commits into
feature/designer-material-and-roundnessfrom
feature/sample-dice-sets

Conversation

@drehtuer

@drehtuer drehtuer commented Oct 5, 2026

Copy link
Copy Markdown
Owner

Four finished dice sets for trying the import from a file and from a link, and for seeing what the set format's materials do on the tray. Each defines the ten standard dice, so plain notation (marble:d20, steel:3d6) rolls it once installed.

Set What it exercises
marble artwork on every face: veined stone with the numbers cut in; density 2.7, polished
steel metallic = 1, density = 7.8, brushed
green-resin translucency = 45: somewhat see-through
red-glass translucency = 100, roughness = 0.05: clear and polished

Where things are

  • sample-sets/<id>/ holds each package. sample-sets/<id>.zip is the same folder packed for the file picker, one folder deep.
  • sample-sets/build-archives.py writes the zips. It needs only Python, and it writes the same bytes on every run.
  • MarbleArtwork (render/filament test sources) draws the marble atlases at 128 px a cell, about 0.8 MB in total.
    • Since a drawn face is not printed (decision 96), the numbers are taken from the app's own printing (DieNumbers), so a marble d4's corner numbers and a d20's marked 6. sit exactly where a plain die's would.
    • To regenerate: DINFINITY_WRITE_EXAMPLES=1 ./gradlew :render:filament:testDebugUnitTest --tests '*MarbleArtworkTest*' --rerun.
  • The sets live outside examples/ because examples/ is a package an author copies and zips. Packages nested in it would ride along, and the installer takes the first diceset.toml it finds.

Tests

  • SampleArchivesTest (dicesets/install):
    • Every committed zip installs through PackageInstaller (the file-picker path) with no warnings.
    • Each zip holds exactly its folder, byte for byte, so a stale zip fails the build.
    • Each set is made of what its name says.
  • MarbleArtworkTest (render/filament):
    • The committed PNGs are what the generator draws.
    • The set file asks for exactly those dice.
    • Every face counts as artwork.
    • The numbers sit where the app prints them.
    • Spare grid cells stay clear.
  • Test inputs: the folders these tests read are now declared inputs of the test tasks. That also closes a gap for ExampleDiceSetTest, which reads examples/ without declaring it, so a changed example could replay a cached pass.
  • Locally in the devcontainer:
    • Tests, ktlint, detekt and lint are green for dicesets/format, dicesets/install and render/filament.
    • verifyDocsIndex and verifyDocsLinks pass.
    • The Documentation job's checks pass: mermaid (22 diagrams) and markdownlint.

Docs

  • Added: sample-sets/README.md (what each set shows, how to install from a file or a link, how the files are made and checked).
  • Linked from: README.md (feature line and doc table), docs/dice-sets.md and examples/README.md.
  • Tracking: a line in docs/STATUS.md, and an owner judgement item in docs/TODO.md 4.4.

Not done

  • Not installed on the phone yet; the phone was offline. The link form https://github.com/drehtuer/dInfinityApp/tree/<ref>/sample-sets/<id> works once this is on main. Until then, use the commit, e.g. …/tree/208958ec/sample-sets/marble. A branch name with a / in it, like this one's, cannot be told apart from the folder path.

🤖 Generated with Claude Code

drehtuer and others added 2 commits October 5, 2026 21:38
… glass

For trying the import from a file and from a link, and for seeing what the
set format's materials do. Each defines the ten standard dice, so plain
notation rolls it once installed.

Marble has artwork on every face, and since a drawn face is not printed
(decision 96) its numbers are cut into the picture from the app's own
printing (DieNumbers), so a d4's corners and a d20's marked 6. sit where a
plain die's would. MarbleArtworkTest holds the committed PNGs to the
generator; SampleArchivesTest installs every committed zip through
PackageInstaller and holds each to its folder byte for byte.

The sets live in sample-sets/ rather than examples/: examples/ is a package
an author copies and zips, and packages nested in it would ride along and
could be installed in its place.

The tests read files outside their module, so the folders they read are now
declared test inputs; examples/ was not, for ExampleDiceSetTest, and a
changed example could replay a cached pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@sonarqubecloud

sonarqubecloud Bot commented Oct 5, 2026

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
0.0% Coverage on New Code (required ≥ 80%)

See analysis details on SonarQube Cloud

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant