workadventure/front/src/Phaser/Components/EmoteMenu.ts

59 lines
2 KiB
TypeScript
Raw Normal View History

2021-06-29 08:37:01 +02:00
import Sprite = Phaser.GameObjects.Sprite;
import Text = Phaser.GameObjects.Text;
2021-07-21 09:41:22 +02:00
import DOMElement = Phaser.GameObjects.DOMElement;
import { DEPTH_UI_INDEX } from "../Game/DepthIndexes";
import { waScaleManager } from "../Services/WaScaleManager";
import { EmojiButton } from "@joeattardi/emoji-button";
import { HtmlUtils } from "../../WebRtc/HtmlUtils";
2021-06-29 08:37:01 +02:00
2021-07-21 09:41:22 +02:00
export const EmoteMenuClickEvent = "emoteClick";
2021-06-29 08:37:01 +02:00
export class EmoteMenu extends Phaser.GameObjects.Container {
private resizeCallback: OmitThisParameter<() => void>;
2021-07-21 09:41:22 +02:00
private container: DOMElement;
private picker: EmojiButton;
2021-06-29 08:37:01 +02:00
2021-07-21 09:41:22 +02:00
constructor(scene: Phaser.Scene, x: number, y: number) {
2021-06-29 08:37:01 +02:00
super(scene, x, y);
2021-07-21 09:41:22 +02:00
this.setDepth(DEPTH_UI_INDEX);
2021-06-29 08:37:01 +02:00
this.scene.add.existing(this);
2021-07-21 09:41:22 +02:00
this.container = new DOMElement(this.scene, 0, 0, "div", "", "");
this.container.setClassName("emoji-container");
const scalingFactor = waScaleManager.uiScalingFactor * 0.5;
this.container.setScale(scalingFactor);
this.add(this.container);
const emojiContainer = HtmlUtils.querySelectorOrFail(".emoji-container");
this.picker = new EmojiButton({ rootElement: emojiContainer });
this.picker.on("emoji", (selection) => {
this.emit(EmoteMenuClickEvent, selection.emoji);
});
2021-06-29 08:37:01 +02:00
this.resize();
this.resizeCallback = this.resize.bind(this);
this.scene.scale.on(Phaser.Scale.Events.RESIZE, this.resizeCallback);
}
2021-07-21 09:41:22 +02:00
public isOpen(): boolean {
return this.picker.isPickerVisible();
2021-06-29 08:37:01 +02:00
}
2021-07-21 09:41:22 +02:00
public openPicker() {
const emojiContainer = HtmlUtils.querySelectorOrFail(".emoji-container");
this.picker.showPicker(emojiContainer);
}
public closePicker() {
this.picker.hidePicker();
2021-06-29 08:37:01 +02:00
}
private resize() {
this.setScale(waScaleManager.uiScalingFactor);
}
public destroy() {
this.scene.scale.removeListener(Phaser.Scale.Events.RESIZE, this.resizeCallback);
super.destroy();
}
2021-07-21 09:41:22 +02:00
}