import { Container, PixelText, worldToScreen } from '@rpg/engine';
/** Цель кнопки действия (от роутера): kind — для будущих иконок. */
export interface InteractTargetInfo {
kind: string;
label: string;
tile: { x: number; y: number };
}
/**
* Подпись «[E] Имя» над ближайшей целью кнопки действия. Один вью на сцену
* (в worldRoot — масштабируется зумом камеры): позиция над тайлом цели,
* видна только когда цель есть. Заменяет прежние подписи per-object —
* NPC впервые получают подписи тоже.
*/
export class InteractHint {
readonly view = new Container();
private text: PixelText;
constructor() {
this.text = new PixelText({ text: '', size: 9, color: 0xd8c79a });
this.text.anchor.set(0.5, 1);
this.view.addChild(this.text);
this.view.visible = false;
}
/** Показать цель (null — скрыть). Центр тайла переводится в px внутри worldRoot. */
show(target: InteractTargetInfo | null): void {
if (!target) {
this.view.visible = false;
return;
}
const c = worldToScreen(target.tile.x + 0.5, target.tile.y + 0.5);
this.text.text = `[E] ${target.label}`;
this.view.position.set(Math.round(c.x), Math.round(c.y) - 20);
this.view.visible = true;
}
destroy(): void {
this.view.destroy({ children: true });
}
}