From 4d34f9fa784f575e73df01ab7d2072b8284dcdb0 Mon Sep 17 00:00:00 2001 From: hypercross Date: Sun, 19 Apr 2026 12:50:50 +0800 Subject: [PATCH] refactor(framework): use callback instead of events in dragDropEventEffect Replace Phaser event emissions with a `DragDropCallback` in `dragDropEventEffect` to provide a more explicit and type-safe API for handling drag-and-drop interactions. --- packages/framework/src/index.ts | 2 +- packages/framework/src/utils/dnd.ts | 12 ++++++------ packages/framework/src/utils/index.ts | 1 + 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/packages/framework/src/index.ts b/packages/framework/src/index.ts index 1e36f26..a7c126a 100644 --- a/packages/framework/src/index.ts +++ b/packages/framework/src/index.ts @@ -4,7 +4,7 @@ export type { IDisposable, DisposableItem } from "./utils"; // Drag & drop utilities export { dragDropEventEffect, DragDropEventType } from "./utils"; -export type { DragDropEvent } from "./utils"; +export type { DragDropEvent, DragDropCallback } from "./utils"; // Data-driven object spawning export { spawnEffect } from "./spawner"; diff --git a/packages/framework/src/utils/dnd.ts b/packages/framework/src/utils/dnd.ts index 2709ea2..2b9c7ba 100644 --- a/packages/framework/src/utils/dnd.ts +++ b/packages/framework/src/utils/dnd.ts @@ -18,8 +18,11 @@ export type DragDropEvent = { deltaY: number; }; +export type DragDropCallback = (event: DragDropEvent) => void; + export function dragDropEventEffect( gameObject: Phaser.GameObjects.GameObject, + callback: DragDropCallback, disposables?: DisposableBag, ): () => void { let isDragging = false; @@ -35,8 +38,7 @@ export function dragDropEventEffect( deltaX: 0, deltaY: 0, }; - gameObject.emit("drag", event); - gameObject.emit("dragstart", event); + callback(event); } function onPointerUp(pointer: Phaser.Input.Pointer) { @@ -46,8 +48,7 @@ export function dragDropEventEffect( const deltaX = pointer.x - down.x; const deltaY = pointer.y - down.y; const event: DragDropEvent = { type: DragDropEventType.UP, deltaX, deltaY }; - gameObject.emit("drag", event); - gameObject.emit("dragend", event); + callback(event); down = null; } @@ -61,8 +62,7 @@ export function dragDropEventEffect( deltaX, deltaY, }; - gameObject.emit("drag", event); - gameObject.emit("dragmove", event); + callback(event); } gameObject.on("pointerdown", onPointerDown); diff --git a/packages/framework/src/utils/index.ts b/packages/framework/src/utils/index.ts index 6cbd009..4847db9 100644 --- a/packages/framework/src/utils/index.ts +++ b/packages/framework/src/utils/index.ts @@ -4,4 +4,5 @@ export { dragDropEventEffect, DragDropEventType, type DragDropEvent, + type DragDropCallback, } from "./dnd";