import Phaser from "phaser"; import type { MockGameObject } from "../mockGameObject"; import Sprite = Phaser.GameObjects.Sprite; import Frame = Phaser.Textures.Frame; export default class MockSprite implements MockGameObject { private phaserSprite; public pipelineData; public texture; public key; public frame; public textureManager; public scene; public anims; public list: MockGameObject[] = []; public name: string; constructor(textureManager, x, y, texture) { this.textureManager = textureManager; this.scene = textureManager.scene; // @ts-ignore Phaser.GameObjects.Sprite.prototype.setInteractive = this.setInteractive; // @ts-ignore Phaser.GameObjects.Sprite.prototype.setTexture = this.setTexture; Phaser.GameObjects.Sprite.prototype.setSizeToFrame = this.setSizeToFrame; Phaser.GameObjects.Sprite.prototype.setFrame = this.setFrame; // Phaser.GameObjects.Sprite.prototype.disable = this.disable; // Phaser.GameObjects.Sprite.prototype.texture = { frameTotal: 1, get: () => null }; this.phaserSprite = new Phaser.GameObjects.Sprite(textureManager.scene, x, y, texture); this.pipelineData = {}; this.texture = { key: texture || "", }; this.anims = { pause: () => null, stop: () => null, }; } setTexture(key: string, frame?: string | number) { return this; } setSizeToFrame(frame?: boolean | Frame): Sprite { return {} as Sprite; } setPipeline(obj) { // Sets the pipeline of this Game Object. return this.phaserSprite.setPipeline(obj); } off(event, callback, source) { } setTintFill(color) { // Sets the tint fill color. return this.phaserSprite.setTintFill(color); } setScale(scale) { return this.phaserSprite.setScale(scale); } setOrigin(x, y) { return this.phaserSprite.setOrigin(x, y); } setSize(width, height) { // Sets the size of this Game Object. return this.phaserSprite.setSize(width, height); } once(event, callback, source) { return this.phaserSprite.once(event, callback, source); } removeFromDisplayList() { // same as remove or destroy return this.phaserSprite.removeFromDisplayList(); } addedToScene() { // This callback is invoked when this Game Object is added to a Scene. return this.phaserSprite.addedToScene(); } setVisible(visible) { return this.phaserSprite.setVisible(visible); } setPosition(x, y) { return this.phaserSprite.setPosition(x, y); } setRotation(radians) { return this.phaserSprite.setRotation(radians); } stop() { return this.phaserSprite.stop(); } setInteractive = () => null; on(event, callback, source) { return this.phaserSprite.on(event, callback, source); } setAlpha(alpha) { return this.phaserSprite.setAlpha(alpha); } setTint(color) { // Sets the tint of this Game Object. return this.phaserSprite.setTint(color); } setFrame(frame, updateSize?: boolean, updateOrigin?: boolean) { // Sets the frame this Game Object will use to render with. this.frame = frame; return frame; } setPositionRelative(source, x, y) { /// Sets the position of this Game Object to be a relative position from the source Game Object. return this.phaserSprite.setPositionRelative(source, x, y); } setY(y) { return this.phaserSprite.setY(y); } setCrop(x, y, width, height) { // Sets the crop size of this Game Object. return this.phaserSprite.setCrop(x, y, width, height); } clearTint() { // Clears any previously set tint. return this.phaserSprite.clearTint(); } disableInteractive() { // Disables Interactive features of this Game Object. return null; } apply() { return this.phaserSprite.apply(); } play() { // return this.phaserSprite.play(); return this; } setPipelineData(key, value) { this.pipelineData[key] = value; } destroy() { return this.phaserSprite.destroy(); } setName(name) { return this.phaserSprite.setName(name); } setAngle(angle) { return this.phaserSprite.setAngle(angle); } setMask() { } add(obj) { // Adds a child to this Game Object. this.list.push(obj); } removeAll() { // Removes all Game Objects from this Container. this.list = []; } addAt(obj, index) { // Adds a Game Object to this Container at the given index. this.list.splice(index, 0, obj); } remove(obj) { const index = this.list.indexOf(obj); if (index !== -1) { this.list.splice(index, 1); } } getIndex(obj) { const index = this.list.indexOf(obj); return index || -1; } getAt(index) { return this.list[index]; } getAll() { return this.list; } }