Workers P2: Archiv-Spot auf den ersten Aktenschrank, Teamfarbton auch im grauen Raum
Der Effektort spots.archiv lag auf Arne (x 130, y 231) statt auf einem gezeichneten Schrank; er sitzt jetzt in der Mitte der obersten Schublade des ersten Aktenschranks (x 148). Graue Räume behalten den Teamfarbton (Alpha 0,10) unter der Grautönung; das Schild ersetzt dort weiter den Titel (Platz). Neue Tests: Zeichnung trifft den Spot für pult, tresor, archiv; grauer Raum mit Tint ohne Titel. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
8555453a74
commit
1aabbef3ab
4 files changed
+71
-7
No files matched your search
@@ -238,3 +238,62 @@ test('Gebäude: Layout ohne Etagen zeichnet nichts und wirft nicht', () => {
|
||||
assert.doesNotThrow(() => B.drawTower(m.ctx, { floors: [], homes: {}, spots: {} }, 1, { at: () => false }))
|
||||
assert.doesNotThrow(() => R.drawRooms(m.ctx, { floors: [], homes: {}, spots: {} }, 1, R.createLook()))
|
||||
})
|
||||
|
||||
// ---- Fix-Runde 1: Zeichnung und Effektorte, graue Räume ----
|
||||
|
||||
// Rechtecke der Raumzeichnung, die den Mittelpunkt der Einheitszelle (x, y) überdecken; die Tönung, die den ganzen Raum füllt, zählt nicht
|
||||
const hitsAt = (floorId, spot, look = R.createLook()) => {
|
||||
const floor = layout.floors.find((f) => f.id === floorId)
|
||||
const full = Math.max(...floor.rooms.map((r) => r.w)) * 3
|
||||
const m = makeCtx()
|
||||
R.drawRooms(m.ctx, { ...layout, floors: [floor] }, 1, look)
|
||||
const cx = spot.x * 3 + 1
|
||||
const cy = spot.y * 3 + 1
|
||||
return m.rects.filter((r) => r.w < full && cx >= r.x && cx < r.x + r.w && cy >= r.y && cy < r.y + r.h)
|
||||
}
|
||||
|
||||
test('Zeichnung trifft den Spot: Briefkasten am Pult, Spitze genau bei spots.pult', () => {
|
||||
const spot = layout.spots.pult
|
||||
assert.ok(hitsAt('freigabe', spot).some((r) => r.fill === TEAM.freigabe), 'Briefkasten unter dem Spot')
|
||||
// Spitze: eine Zeile darüber ist kein Briefkasten mehr
|
||||
assert.ok(!hitsAt('freigabe', { x: spot.x, y: spot.y - 1 }).some((r) => r.fill === TEAM.freigabe))
|
||||
})
|
||||
|
||||
test('Zeichnung trifft den Spot: Tresortür in der Mitte von spots.tresor', () => {
|
||||
const hit = hitsAt('tresor', layout.spots.tresor)
|
||||
assert.ok(hit.some((r) => r.fill === PAL.metal2 && r.w === 22 * 3 && r.h === 20 * 3), 'Tresorkörper unter dem Spot')
|
||||
// die 6 × 6 große Türplatte (x + 8 ... x + 14) umschließt den Spot
|
||||
assert.ok(hit.some((r) => r.fill === PAL.metal && r.w === 6 * 3 && r.h === 6 * 3), 'Türplatte unter dem Spot')
|
||||
})
|
||||
|
||||
test('Zeichnung trifft den Spot: Schublade eines Aktenschranks bei spots.archiv, nicht auf Arne', () => {
|
||||
const spot = layout.spots.archiv
|
||||
const hit = hitsAt('keller', spot)
|
||||
// oberste Schubladenfront (10 × 5) des ersten Aktenschranks
|
||||
assert.ok(hit.some((r) => r.fill === PAL.metal && r.w === 10 * 3 && r.h === 5 * 3), 'Schubladenfront unter dem Spot')
|
||||
assert.ok(hit.some((r) => r.fill === PAL.metal2 && r.w === 12 * 3), 'Schrankkorpus unter dem Spot')
|
||||
// Arnes Platz (Körper 12 breit, 14 hoch, Hut ab y - 2) liegt nicht auf dem Spot
|
||||
const arne = layout.homes.arne
|
||||
assert.ok(!(spot.x >= arne.x && spot.x < arne.x + 12 && spot.y >= arne.y - 2 && spot.y < arne.y + 14))
|
||||
})
|
||||
|
||||
test('grauer Raum: Teamfarbton bleibt, das Schild ersetzt den Titel (kein Platz für beides)', () => {
|
||||
const floor = layout.floors.find((f) => f.id === 'anfragen')
|
||||
const room = floor.rooms.find((r) => r.id === 'kleinanzeigen')
|
||||
assert.equal(room.w, 46)
|
||||
const run = (look) => {
|
||||
const m = makeCtx()
|
||||
R.drawRooms(m.ctx, { ...layout, floors: [{ ...floor, rooms: [room] }] }, 1, look)
|
||||
return m
|
||||
}
|
||||
const normal = run(looks())
|
||||
const grey = run(looks({ greyRooms: new Set(['kleinanzeigen']) }))
|
||||
const tintRects = (m) => m.rects.filter((r) => r.fill === TEAM[room.team] && r.w === room.w * 3 && r.h === floor.h * 3)
|
||||
assert.equal(tintRects(normal).length, 1)
|
||||
assert.equal(tintRects(grey).length, 1, 'Teamfarbton auch im grauen Raum')
|
||||
assert.ok(grey.alphas.includes(0.1) && grey.alphas.includes(0.45), 'Teamfarbton 0,10, darüber die Grautönung 0,45')
|
||||
assert.ok(normal.texts.some((x) => x.text === room.title))
|
||||
assert.ok(!grey.texts.some((x) => x.text === room.title), 'im grauen Raum steht das Schild an der Stelle des Titels')
|
||||
assert.equal(grey.texts.filter((x) => x.text === SIGN).length, 1)
|
||||
assert.equal(normal.texts.filter((x) => x.text === SIGN).length, 0)
|
||||
})
|
||||
Reference in new issue
Block a user