Compare commits
No commits in common. "91be23088cee38362284be4158333c82994c578a" and "ce525fbbf8c9602489de14f42dacaa4d3dc2fbf0" have entirely different histories.
91be23088c
...
ce525fbbf8
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -9,9 +9,9 @@
|
|||
"activeSeconds": 19608
|
||||
},
|
||||
"sisyphus": false,
|
||||
"revision": 385,
|
||||
"revision": 383,
|
||||
"createdAt": "2026-09-18T22:07:23.053Z",
|
||||
"updatedAt": "2026-09-19T15:40:04.710Z",
|
||||
"updatedAt": "2026-09-19T14:55:35.006Z",
|
||||
"scheduler": {
|
||||
"version": 1,
|
||||
"owner": "01a0b67f-b950-7128-bde1-b1647328e168",
|
||||
|
|
@ -72,8 +72,8 @@
|
|||
"blockCompletion": true,
|
||||
"proposedAt": "2026-09-18T21:58:39.258Z"
|
||||
},
|
||||
"stopReason": "user",
|
||||
"archivedPath": ".pi/goals/archived/goal_2026091909324453_mu7ieab2-f24hte.md"
|
||||
"activePath": ".pi/goals/active_goal_2026091816072305_mu7ieab2-f24hte.md",
|
||||
"stopReason": "user"
|
||||
}
|
||||
|
||||
# Goal Prompt
|
||||
|
|
@ -46,5 +46,3 @@
|
|||
{"type":"task_started","goalId":"mu7ieab2-f24hte","taskId":"task-5","at":"2026-09-19T05:22:27.127Z"}
|
||||
{"type":"task_complete","goalId":"mu7ieab2-f24hte","taskId":"task-5","evidence":"Selecting a filled bay opens BAY MANIFEST (js/ui/ShipWindow.js _paintManifest): goods icon frame, name, CLASS/TIER/BASE VALUE chips (labels from data), flavor, MADE IN origin|hub pool + producer class","at":"2026-09-19T06:10:11.478Z"}
|
||||
{"type":"goal_paused","goalId":"mu7ieab2-f24hte","reason":"user","status":"paused","at":"2026-09-19T14:55:34.986Z"}
|
||||
{"type":"goal_focused","goalId":"mu7ieab2-f24hte","reason":"selected","at":"2026-09-19T15:32:31.167Z"}
|
||||
{"type":"goal_focused","goalId":"mu7ieab2-f24hte","reason":"selected","at":"2026-09-19T15:38:35.941Z"}
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -14,9 +14,6 @@
|
|||
* - quick-succession landings: a superseded tween landing LATE can't
|
||||
* snap the readout back to a stale value (the fragment staggers are
|
||||
* ~70 ms vs a 420 ms count-up — they overlap in real play);
|
||||
* - the main-game entry sequence: the capacity restored from build
|
||||
* records (250 → 500) landing MID count-up must void the stale
|
||||
* tween — the bar may not snap back to 'full' against the OLD cap;
|
||||
* - the fill turns amber (theme 'amber') at capacity;
|
||||
* - clamping (overfull records, negatives), no-op on unchanged value,
|
||||
* and clean teardown.
|
||||
|
|
@ -197,30 +194,6 @@ function makeScene() {
|
|||
assert.ok(Math.abs(hud.fillG.fills.at(-1).w - (hud.innerW * 2) / 250) < 1e-9, '… nor the bar');
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// The main-game entry sequence: the HUD is seeded with the BASE hold
|
||||
// (250) before the build records restore the expanded storage (500) —
|
||||
// the capacity lands MID count-up. The in-flight tween's target fraction
|
||||
// was computed against 250 (= full); when it lands late it must not snap
|
||||
// the fill back to 'full' (the reported bug: 250 / 500 rendered full).
|
||||
// ---------------------------------------------------------------------------
|
||||
{
|
||||
const scene = makeScene();
|
||||
scene.tweens.defer = true;
|
||||
const hud = new MineralHud(scene);
|
||||
hud.set(250, 250); // GameScene.create() — base storage, count-up in flight
|
||||
const t1 = scene._tweens[0]; // superseded count-up (target frac 250/250 = 1)
|
||||
assert.equal(hud.set(250, 500), false, 'the restore only changes the capacity → no new tween');
|
||||
assert.equal(hud.label.text, 'MINERALS 250 / 500', '… the readout shows the new cap');
|
||||
assert.ok(Math.abs(hud.fillG.fills.at(-1).w - hud.innerW * (250 / 500)) < 1e-9,
|
||||
'… and the fill re-draws at the NEW fraction (half)');
|
||||
// The base-hold count-up lands LATE — it must be a no-op now.
|
||||
t1.run();
|
||||
assert.equal(hud.label.text, 'MINERALS 250 / 500', 'the late tween can\'t touch the readout');
|
||||
assert.ok(Math.abs(hud.fillG.fills.at(-1).w - hud.innerW * (250 / 500)) < 1e-9,
|
||||
'… and can\'t snap the bar back to "full"');
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Capacity: amber fill (theme 'amber'); drops don't flash; clamping
|
||||
// ---------------------------------------------------------------------------
|
||||
|
|
@ -267,7 +240,6 @@ function makeScene() {
|
|||
console.log('layout: upper-right corner, screen-fixed (old tether spot): OK');
|
||||
console.log('set(): count-up + bar fill (one tween, exact fraction): OK');
|
||||
console.log('overlap: superseded tween is void (no stale snap-back): OK');
|
||||
console.log('restore: capacity change mid count-up voids the stale tween: OK');
|
||||
console.log('capacity: amber fill + clamping both ends: OK');
|
||||
console.log('teardown: all layers destroyed: OK');
|
||||
console.log('\nmineral-hud: all checks passed');
|
||||
|
|
|
|||
|
|
@ -140,12 +140,7 @@ export class MineralHud extends Phaser.GameObjects.Container {
|
|||
const newMax = Math.max(1, Math.round(Number(max) || 1));
|
||||
if (newMax !== this.max) {
|
||||
// Capacity changed: re-render even if the value didn't, so the
|
||||
// 'n / N' readout and the fraction stay true. Void any in-flight
|
||||
// count-up FIRST — its target fraction was computed against the
|
||||
// OLD max (e.g. 250/250 = 1 before the cap grew to 500), and
|
||||
// without this its late onUpdate/onComplete would snap the fill
|
||||
// back to the stale fraction after we've already re-drawn it.
|
||||
this._gen++;
|
||||
// 'n / N' readout and the fraction stay true.
|
||||
this.max = newMax;
|
||||
this.label.setText(this.format(this.value));
|
||||
this.drawFill(this._frac(this.value));
|
||||
|
|
|
|||
|
|
@ -806,12 +806,7 @@ export class QuestTrackerHud {
|
|||
const cont = new Phaser.GameObjects.Container(s, px, py);
|
||||
s.add.existing(cont);
|
||||
cont.setScrollFactor(0);
|
||||
// Topmost element of the live game: the CLAIM REWARD plate is never
|
||||
// covered where it overlaps the compass arrows (40), the toasts
|
||||
// (45), the deck blocks (50) or the sub-bar (60). Stays UNDER the
|
||||
// modal save panel (70) and the full-screen consoles (80) — they
|
||||
// own the screen while up.
|
||||
cont.setDepth(65);
|
||||
cont.setDepth(31); // just above the tracker's own plate (30)
|
||||
cont.add(g);
|
||||
cont.add(header);
|
||||
for (const b of btns) cont.add(b);
|
||||
|
|
|
|||
Loading…
Reference in New Issue