diff --git a/client/src/scenes/GameScene.ts b/client/src/scenes/GameScene.ts index 7d434a4..eb06b1a 100644 --- a/client/src/scenes/GameScene.ts +++ b/client/src/scenes/GameScene.ts @@ -7,6 +7,7 @@ import { CommandPanel } from '../ui/CommandPanel.js'; import { SuperlativesPanel } from '../ui/SuperlativesPanel.js'; import { LeftPanel } from '../ui/LeftPanel.js'; import { EventsFeed } from '../ui/EventsFeed.js'; +import { InventionsPanel } from '../ui/InventionsPanel.js'; import { InteractionEmojiManager } from '../ui/InteractionEmoji.js'; import type { WorldState, StateUpdate, EntityState, Appearance, NarrationEvent, MemoryEvent } from '@dflike/shared'; import { TILE_SIZE, SPRITE_FRAME_WIDTH, SPRITE_FRAME_HEIGHT, SPRITE_COLS, Direction, Terrain, TILESET_TILE_SIZE, TILESET_SCALE, DAY_HOURS, TOTAL_HOURS, SUNSET_DURATION_HOURS, SUNRISE_DURATION_HOURS, NIGHT_DARKNESS } from '@dflike/shared'; @@ -37,6 +38,7 @@ export class GameScene extends Phaser.Scene { private superlativesPanel!: SuperlativesPanel; private leftPanel!: LeftPanel; private eventsFeed!: EventsFeed; + private inventionsPanel!: InventionsPanel; private highlightEnabled = false; private highlightedSpriteId: number | null = null; private dayNightOverlay!: Phaser.GameObjects.Graphics; @@ -72,15 +74,26 @@ export class GameScene extends Phaser.Scene { this.superlativesPanel = new SuperlativesPanel(); this.eventsFeed = new EventsFeed(); + this.inventionsPanel = new InventionsPanel(); this.leftPanel = new LeftPanel( this.superlativesPanel.getElement(), this.eventsFeed.getElement(), + this.inventionsPanel.getElement(), ); + this.inventionsPanel.onUnseenChanged = (hasUnseen) => { + if (hasUnseen && this.leftPanel.getActiveTab() !== 'inventions') { + this.leftPanel.showNotificationDot(); + } + }; + document.addEventListener('left-panel-opened', ((e: CustomEvent) => { if (e.detail.tab === 'stats') { this.client.subscribeSuperlatives(); } + if (e.detail.tab === 'inventions') { + this.inventionsPanel.clearUnseen(); + } }) as EventListener); document.addEventListener('left-panel-closed', () => { @@ -235,6 +248,14 @@ export class GameScene extends Phaser.Scene { } }; + this.client.onInventionEvent = (data) => { + this.inventionsPanel.addInvention(data); + }; + + this.client.onInventionHistory = (data) => { + this.inventionsPanel.loadHistory(data); + }; + document.addEventListener('narration-follow', ((e: CustomEvent) => { const { entityId } = e.detail; const npcIds = this.getNpcIds();