feat(03-06): add Particles visual mode with per-region id/density (Task 3)
This commit is contained in:
@@ -75,10 +75,51 @@ class RegionVisualizerTest {
|
||||
assertEquals(DebugUtils.FLAG_NO_SOLID, RegionVisualizer.flagsForMode("Outline"));
|
||||
assertEquals(DebugUtils.FLAG_NO_WIREFRAME, RegionVisualizer.flagsForMode("Faces"));
|
||||
assertEquals(DebugUtils.FLAG_NONE, RegionVisualizer.flagsForMode("Both"));
|
||||
assertEquals(DebugUtils.FLAG_NONE, RegionVisualizer.flagsForMode("Particles"));
|
||||
// unknown → Outline
|
||||
assertEquals(DebugUtils.FLAG_NO_SOLID, RegionVisualizer.flagsForMode("xxx"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void parseMode_particlesAccepted() {
|
||||
assertEquals("Particles", RegionVisualizer.normalizeMode("Particles"));
|
||||
}
|
||||
|
||||
// ---------- Particles branch ----------
|
||||
|
||||
@Test
|
||||
void visualize_particlesMode_callsParticleEmitterOncePerEdgePoint() {
|
||||
List<String> particleCalls = new ArrayList<>();
|
||||
RegionVisualizer.ParticleEmitter pe = (w, id, pos) -> particleCalls.add(id + "@" + pos.x + "," + pos.y + "," + pos.z);
|
||||
RegionVisualizer viz = new RegionVisualizer(
|
||||
t -> fail("errorHandler unexpectedly called: " + t),
|
||||
(w, shape, m, c, o, t, f) -> fail("DebugEmitter should not fire in Particles mode"),
|
||||
pe,
|
||||
(w, r) -> r.run(),
|
||||
() -> 0L);
|
||||
|
||||
// unit box at density=1 → 8 corner points emitted.
|
||||
GravityFlipRegion r = region("pz", "#FFFFFF", "Particles", 1000, 0.5);
|
||||
r.setVisualParticleId("Dust_Sparkles_Fine");
|
||||
r.setVisualParticleDensity(1.0);
|
||||
|
||||
viz.visualize(null, snapshotOf(r));
|
||||
assertEquals(8, particleCalls.size(), "unit box + density=1 → 8 corner emissions");
|
||||
// All calls use the requested id (validation falls open in test context).
|
||||
for (String call : particleCalls) {
|
||||
assertTrue(call.startsWith("Dust_Sparkles_Fine@"), "unexpected call: " + call);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void particleDefaults_absentInConstructedRegion() {
|
||||
// Defaults must match the codec's documented defaults (03-06).
|
||||
GravityFlipRegion r = new GravityFlipRegion("x",
|
||||
new Box(new Vector3d(0, 0, 0), new Vector3d(1, 1, 1)), true);
|
||||
assertEquals("Dust_Sparkles_Fine", r.getVisualParticleId());
|
||||
assertEquals(1.0, r.getVisualParticleDensity(), 1e-9);
|
||||
}
|
||||
|
||||
// ---------- matrixFromBox ----------
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user