Issue #5: Mouse handling — zoom-to-mouse + middle-click pan #10
@@ -52,19 +52,10 @@ export class CameraSystem {
|
||||
d: kb.addKey(Phaser.Input.Keyboard.KeyCodes.D),
|
||||
}
|
||||
|
||||
// Scroll wheel zoom — zoom toward mouse pointer
|
||||
this.scene.input.on('wheel', (ptr: Phaser.Input.Pointer, _objs: unknown, _dx: number, dy: number) => {
|
||||
// Scroll wheel zoom
|
||||
this.scene.input.on('wheel', (_ptr: Phaser.Input.Pointer, _objs: unknown, _dx: number, dy: number) => {
|
||||
const newZoom = Phaser.Math.Clamp(cam.zoom - Math.sign(dy) * ZOOM_STEP, MIN_ZOOM, MAX_ZOOM)
|
||||
if (newZoom === cam.zoom) return
|
||||
|
||||
// ptr.worldX/Y is pre-computed by Phaser and represents the world position under the pointer
|
||||
const worldX = ptr.worldX
|
||||
const worldY = ptr.worldY
|
||||
|
||||
// Apply zoom first, then reposition scroll so worldX stays under ptr.x
|
||||
cam.setZoom(newZoom)
|
||||
cam.scrollX = worldX - ptr.x / newZoom
|
||||
cam.scrollY = worldY - ptr.y / newZoom
|
||||
})
|
||||
|
||||
// Middle-click pan: start on button down
|
||||
|
||||
Reference in New Issue
Block a user