From 93ee128879a4c2d02d26a81398ececc53d71c2e6 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 22 Oct 2026 08:05:26 +0000 Subject: [PATCH] =?UTF-8?q?Hustler-Pixelwelt=20T4:=20Overseer=20ohne=20Pun?= =?UTF-8?q?kte,=20Zzz,=20Dampf=20und=20Stecker-Schild,=20au=C3=9Ferhalb=20?= =?UTF-8?q?von=20=E2=80=9Earbeitet=E2=80=9C=20nur=20gedimmt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- src/lib/hustlerSicht.js | 12 +++++++----- tests/unit/hustlerSicht.test.mjs | 15 +++++++++------ 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/lib/hustlerSicht.js b/src/lib/hustlerSicht.js index cd04bae..2b7c2ae 100644 --- a/src/lib/hustlerSicht.js +++ b/src/lib/hustlerSicht.js @@ -89,8 +89,9 @@ export function figurZustand(workerId, eintrag, { paused = false } = {}) { hut, pose, klasse: ovs ? 'hk-spr hk-ovs-klein' : `hk-spr hk-fig-${hut}-${pose}`, - punkte: status === 'wartet', - zzz: status === 'leerlauf', + // Der Overseer ist ein schwebender Kristall: keine Kaffeepunkte und kein Zzz, außerhalb von „arbeitet“ nur gedimmt (Controller-Beschluss) + punkte: status === 'wartet' && !ovs, + zzz: status === 'leerlauf' && !ovs, bildschirm: status === 'arbeitet' && !ovs, radar: workerId === 'rita' && status === 'arbeitet', alarm: status === 'fehler', @@ -174,10 +175,11 @@ export function detailModell(workerId, eintrag, trace, now) { figur: ovs ? 'hk-spr hk-gr-overseer' : `hk-spr hk-gr-${hut}-${POSE_NACH_STATUS[status]}`, overlays: { monitor: status === 'arbeitet' && !ovs, - dampf: status === 'wartet', - zzz: status === 'leerlauf', + dampf: status === 'wartet' && !ovs, + zzz: status === 'leerlauf' && !ovs, wirbel: ovs, - schild: status === 'grau', + schild: status === 'grau' && !ovs, + gedimmt: ovs && status !== 'arbeitet', alarm: status === 'fehler', }, } diff --git a/tests/unit/hustlerSicht.test.mjs b/tests/unit/hustlerSicht.test.mjs index 670c5ad..0b53528 100644 --- a/tests/unit/hustlerSicht.test.mjs +++ b/tests/unit/hustlerSicht.test.mjs @@ -200,6 +200,7 @@ test('figurZustand: Overseer in allen Status – eigenes Sprite, gedimmt außer assert.equal(f.raumGrau, false, status) assert.equal(f.raum, 'bruecke', status) assert.equal(f.alarm, status === 'fehler', status) + assert.equal(f.punkte, false, status); assert.equal(f.zzz, false, status) assert.match(f.label, /^Overseer, Opus, /, status) } assert.equal(figurZustand('otto', eintrag('arbeitet')).label, 'Overseer, Opus, arbeitet') @@ -334,7 +335,7 @@ test('detailModell: voller Trace – alle Felder', () => { assert.equal(d.nummer, '9 / 19') assert.equal(d.szene, 'hk-sz hk-sz-buero') assert.equal(d.figur, 'hk-spr hk-gr-muetze-arbeiten') - assert.deepEqual({ ...d.overlays }, { monitor: true, dampf: false, zzz: false, wirbel: false, schild: false, alarm: false }) + assert.deepEqual({ ...d.overlays }, { monitor: true, dampf: false, zzz: false, wirbel: false, schild: false, gedimmt: false, alarm: false }) // Spur: neueste zuerst, Zeit in Berlin (heute nur Uhrzeit), sichere Links bleiben Links assert.deepEqual(d.spur, traceRows(VOLLER_TRACE.events, JETZT)) assert.deepEqual(d.spur.map((z) => z.id), ['b', 'a', 'c']) @@ -456,11 +457,11 @@ test('detailModell: Etage · Raum, Nummer und Name für alle 19 aus dem Roster', test('detailModell: Szene, große Figur und Zusätze je Status', () => { const erwartet = { - arbeitet: { szene: 'hk-sz hk-sz-buero', figur: 'hk-spr hk-gr-kappe-arbeiten', overlays: { monitor: true, dampf: false, zzz: false, wirbel: false, schild: false, alarm: false } }, - wartet: { szene: 'hk-sz hk-sz-buero', figur: 'hk-spr hk-gr-kappe-warten', overlays: { monitor: false, dampf: true, zzz: false, wirbel: false, schild: false, alarm: false } }, - leerlauf: { szene: 'hk-sz hk-sz-buero', figur: 'hk-spr hk-gr-kappe-schlafen', overlays: { monitor: false, dampf: false, zzz: true, wirbel: false, schild: false, alarm: false } }, - grau: { szene: 'hk-sz hk-sz-nicht', figur: 'hk-spr hk-gr-kappe-nicht', overlays: { monitor: false, dampf: false, zzz: false, wirbel: false, schild: true, alarm: false } }, - fehler: { szene: 'hk-sz hk-sz-buero', figur: 'hk-spr hk-gr-kappe-nicht', overlays: { monitor: false, dampf: false, zzz: false, wirbel: false, schild: false, alarm: true } }, + arbeitet: { szene: 'hk-sz hk-sz-buero', figur: 'hk-spr hk-gr-kappe-arbeiten', overlays: { monitor: true, dampf: false, zzz: false, wirbel: false, schild: false, gedimmt: false, alarm: false } }, + wartet: { szene: 'hk-sz hk-sz-buero', figur: 'hk-spr hk-gr-kappe-warten', overlays: { monitor: false, dampf: true, zzz: false, wirbel: false, schild: false, gedimmt: false, alarm: false } }, + leerlauf: { szene: 'hk-sz hk-sz-buero', figur: 'hk-spr hk-gr-kappe-schlafen', overlays: { monitor: false, dampf: false, zzz: true, wirbel: false, schild: false, gedimmt: false, alarm: false } }, + grau: { szene: 'hk-sz hk-sz-nicht', figur: 'hk-spr hk-gr-kappe-nicht', overlays: { monitor: false, dampf: false, zzz: false, wirbel: false, schild: true, gedimmt: false, alarm: false } }, + fehler: { szene: 'hk-sz hk-sz-buero', figur: 'hk-spr hk-gr-kappe-nicht', overlays: { monitor: false, dampf: false, zzz: false, wirbel: false, schild: false, gedimmt: false, alarm: true } }, } for (const status of STATUS) { const d = detailModell('max', eintrag(status), null, JETZT) @@ -480,6 +481,8 @@ test('detailModell: Overseer steht auf der Brücke mit Wirbel, in jedem Status m assert.equal(d.figur, 'hk-spr hk-gr-overseer', status) assert.equal(d.overlays.wirbel, true, status) assert.equal(d.overlays.monitor, false, status) + assert.equal(d.overlays.dampf, false, status); assert.equal(d.overlays.zzz, false, status); assert.equal(d.overlays.schild, false, status) + assert.equal(d.overlays.gedimmt, status !== 'arbeitet', status); assert.equal(d.overlays.alarm, status === 'fehler', status) assert.equal(d.name, 'Overseer') } assert.equal(detailModell('otto', eintrag('arbeitet'), null, JETZT).nummer, '1 / 19')