Spaces:
Running
Running
import Phaser from 'phaser'; | |
export default class ui extends Phaser.Scene { | |
constructor () { | |
super({ | |
key: 'ui', | |
active: true | |
}); | |
this.debug = false; | |
this.debugOffset = -250; | |
this.boundsBuffer = 300; | |
this.viewport = { | |
displayBounds: {}, | |
displayBoundsBuffer: {}, | |
worldBounds: {}, | |
worldBoundsBuffer: {} | |
}; | |
this.preloadComplete = false; | |
this.initialized = false; | |
} | |
preload () { | |
this.common = this.sys.game.common; | |
this.preloadComplete = true; | |
} | |
create () { | |
if (!this.preloadComplete) | |
return; | |
this.common.ui = this; | |
this.initialized = true; | |
} | |
updateBounds () { | |
if (!this.common || !this.common.world || !this.common.world.worldCamera) | |
return; | |
let camera = this.common.world.worldCamera.camera; | |
this.viewport.width = document.documentElement.clientWidth; | |
this.viewport.height = document.documentElement.clientHeight; | |
this.viewport.displayBounds.topLeft = new Phaser.Geom.Point(0 + this.debugOffset, 0 + this.debugOffset); | |
this.viewport.displayBounds.bottomLeft = new Phaser.Geom.Point(0 + this.debugOffset, this.viewport.height - this.debugOffset); | |
this.viewport.displayBounds.topRight = new Phaser.Geom.Point(this.viewport.width - this.debugOffset, 0 + this.debugOffset); | |
this.viewport.displayBounds.bottomRight = new Phaser.Geom.Point(this.viewport.width - this.debugOffset, this.viewport.height - this.debugOffset); | |
this.viewport.displayBounds.width = this.viewport.displayBounds.bottomRight.x - this.viewport.displayBounds.topLeft.x; | |
this.viewport.displayBounds.height = this.viewport.displayBounds.bottomLeft.y - this.viewport.displayBounds.topLeft.y; | |
this.viewport.displayBounds.rect = new Phaser.Geom.Rectangle(this.viewport.displayBounds.topLeft.x, this.viewport.displayBounds.topLeft.y, this.viewport.displayBounds.width, this.viewport.displayBounds.height); | |
this.viewport.displayBoundsBuffer.topLeft = new Phaser.Geom.Point(this.viewport.displayBounds.topLeft.x + this.boundsBuffer, this.viewport.displayBounds.topLeft.y + this.boundsBuffer); | |
this.viewport.displayBoundsBuffer.bottomLeft = new Phaser.Geom.Point(this.viewport.displayBounds.bottomLeft.x + this.boundsBuffer, this.viewport.displayBounds.bottomLeft.y - this.boundsBuffer); | |
this.viewport.displayBoundsBuffer.topRight = new Phaser.Geom.Point(this.viewport.displayBounds.topRight.x - this.boundsBuffer, this.viewport.displayBounds.topRight.y + this.boundsBuffer); | |
this.viewport.displayBoundsBuffer.bottomRight = new Phaser.Geom.Point(this.viewport.displayBounds.bottomRight.x - this.boundsBuffer, this.viewport.displayBounds.bottomRight.y - this.boundsBuffer); | |
this.viewport.displayBoundsBuffer.width = this.viewport.displayBoundsBuffer.bottomRight.x - this.viewport.displayBoundsBuffer.topLeft.x; | |
this.viewport.displayBoundsBuffer.height = this.viewport.displayBoundsBuffer.bottomLeft.y - this.viewport.displayBoundsBuffer.topLeft.y; | |
this.viewport.displayBoundsBuffer.rect = new Phaser.Geom.Rectangle(this.viewport.displayBoundsBuffer.topLeft.x, this.viewport.displayBoundsBuffer.topLeft.y, this.viewport.displayBoundsBuffer.width, this.viewport.displayBoundsBuffer.height); | |
this.viewport.worldBounds.topLeft = camera.getWorldPoint(this.viewport.displayBounds.topLeft.x, this.viewport.displayBounds.topLeft.y); | |
this.viewport.worldBounds.bottomLeft = camera.getWorldPoint(this.viewport.displayBounds.bottomLeft.x, this.viewport.displayBounds.bottomLeft.y); | |
this.viewport.worldBounds.topRight = camera.getWorldPoint(this.viewport.displayBounds.topRight.x, this.viewport.displayBounds.topRight.y); | |
this.viewport.worldBounds.bottomRight = camera.getWorldPoint(this.viewport.displayBounds.bottomRight.x, this.viewport.displayBounds.bottomRight.y); | |
this.viewport.worldBounds.width = this.viewport.worldBounds.bottomRight.x - this.viewport.worldBounds.topLeft.x; | |
this.viewport.worldBounds.height = this.viewport.worldBounds.bottomLeft.y - this.viewport.worldBounds.topLeft.y; | |
this.viewport.worldBounds.rect = new Phaser.Geom.Rectangle(this.viewport.worldBounds.topLeft.x, this.viewport.worldBounds.topLeft.y, this.viewport.worldBounds.width, this.viewport.worldBounds.height); | |
this.viewport.worldBoundsBuffer.topLeft = camera.getWorldPoint(this.viewport.displayBoundsBuffer.topLeft.x, this.viewport.displayBoundsBuffer.topLeft.y); | |
this.viewport.worldBoundsBuffer.bottomLeft = camera.getWorldPoint(this.viewport.displayBoundsBuffer.bottomLeft.x, this.viewport.displayBoundsBuffer.bottomLeft.y); | |
this.viewport.worldBoundsBuffer.topRight = camera.getWorldPoint(this.viewport.displayBoundsBuffer.topRight.x, this.viewport.displayBoundsBuffer.topRight.y); | |
this.viewport.worldBoundsBuffer.bottomRight = camera.getWorldPoint(this.viewport.displayBoundsBuffer.bottomRight.x, this.viewport.displayBoundsBuffer.bottomRight.y); | |
this.viewport.worldBoundsBuffer.width = this.viewport.worldBoundsBuffer.bottomRight.x - this.viewport.worldBoundsBuffer.topLeft.x; | |
this.viewport.worldBoundsBuffer.height = this.viewport.worldBoundsBuffer.bottomLeft.y - this.viewport.worldBoundsBuffer.topLeft.y; | |
this.viewport.worldBoundsBuffer.rect = new Phaser.Geom.Rectangle(this.viewport.worldBoundsBuffer.topLeft.x, this.viewport.worldBoundsBuffer.topLeft.y, this.viewport.worldBoundsBuffer.width, this.viewport.worldBoundsBuffer.height); | |
if (!this.displayArea && !this.displayAreaBuffer && this.debug) { | |
this.displayArea = this.add.graphics(); | |
this.displayArea.fillStyle(0xAA0000, .25); | |
this.displayArea.lineStyle(2, 0xAA0000, 1); | |
this.displayArea.fillRectShape(this.viewport.displayBounds.rect); | |
this.displayArea.strokeRectShape(this.viewport.displayBounds.rect); | |
this.displayArea.setDepth(999999999); | |
this.displayAreaBuffer = this.add.graphics(); | |
this.displayAreaBuffer.fillStyle(0xAAAA00, .25); | |
this.displayAreaBuffer.lineStyle(2, 0xAAAA00, 1); | |
this.displayAreaBuffer.fillRectShape(this.viewport.displayBoundsBuffer.rect); | |
this.displayAreaBuffer.strokeRectShape(this.viewport.displayBoundsBuffer.rect); | |
this.displayAreaBuffer.setDepth(999999999); | |
//this.displayAreaBuffer.setVisible(false); | |
} | |
this.common.viewport = this.viewport; | |
} | |
// update (time, delta) { | |
// this.updateBounds(); | |
// } | |
resize () { | |
this.cameras.main.setViewport(0, 0, document.documentElement.clientWidth, document.documentElement.clientHeight); | |
if (this.displayArea && this.displayAreaBuffer && this.debug) { | |
this.displayArea.clear(); | |
this.displayAreaBuffer.clear(); | |
this.displayArea = undefined; | |
this.displayAreaBuffer = undefined; | |
} | |
} | |
shutdown () { | |
if (!this.initialized) | |
return; | |
this.initialized = false; | |
this.preloadComplete = false; | |
this.scene.stop(); | |
} | |
} |