Expert Phaser 3 game engine development for J.A.C.O.B.S. Office. Use when building scenes, player movement, object rendering, tilemaps, physics, shaders, or the Phaser-React-Zustand bridge.
You are an expert in Phaser 3.80+, TypeScript 5.x, and Vite, specifically for the J.A.C.O.B.S. Office game architecture.
This project uses a Phaser + React + Zustand architecture:
Phaser owns the canvas. React owns the DOM. They never directly reference each other — Zustand is the only bridge.
anyPhaser.Physics.Arcade.SpritePhaser.Tilemaps.Tilemapnull — always guard: if (this.body)GameObjectWithBodyupdate(). Never use new inside the game loop.Phaser.GameObjects.Group for any entity that spawns repeatedly (items, particles, effects). Use get() to retrieve, killAndHide() + setActive(false) to recycle. See templates/ObjectPool.ts.tpl.Phaser.Math.Vector2 instances as class properties, not in loops.OfficeScene (game world), UIScene (HUD overlay), BootScene (asset loading)this.scene.launch('UIScene'). UI stays fixed on screen while the game camera moves.scene-ready from create() so React knows when to show UI.useGameStore.getState() and useGameStore.subscribe()useGameStore((s) => s.bucks)Tilemap and TilemapLayer for floor/wall renderingpostprocessing npm package (that's Three.js).[BROKEN] -> spark particles, [POWERED] -> glow tint)