Omnibus's picture
Upload 27 files
c679a93
export default class Controls {
constructor(scene, channel) {
this.scene = scene
this.channel = channel
this.left = false
this.right = false
this.up = false
this.controls = []
this.none = true
this.prevNone = true
// add a second pointer
scene.input.addPointer()
const detectPointer = (gameObject, down) => {
if (gameObject.btn) {
switch (gameObject.btn) {
case 'left':
this.left = down
break
case 'right':
this.right = down
break
case 'up':
this.up = down
break
}
}
}
scene.input.on('gameobjectdown', (pointer, gameObject) => detectPointer(gameObject, true))
scene.input.on('gameobjectup', (pointer, gameObject) => detectPointer(gameObject, false))
let left = new Control(scene, 0, 0, 'left').setRotation(-0.5 * Math.PI)
let right = new Control(scene, 0, 0, 'right').setRotation(0.5 * Math.PI)
let up = new Control(scene, 0, 0, 'up')
this.controls.push(left, right, up)
this.resize()
this.scene.events.on('update', this.update, this)
}
controlsDown() {
return { left: this.left, right: this.right, up: this.up, none: this.none }
}
resize() {
const SCALE = 1
const controlsRadius = (192 / 2) * SCALE
const w = this.scene.cameras.main.width - 10 - controlsRadius
const h = this.scene.cameras.main.height - 10 - controlsRadius
let positchannelns = [
{
x: controlsRadius + 10,
y: h
},
{ x: controlsRadius + 214, y: h },
{ x: w, y: h }
]
this.controls.forEach((ctl, i) => {
ctl.setPosition(positchannelns[i].x, positchannelns[i].y)
ctl.setScale(SCALE)
})
}
update() {
this.none = this.left || this.right || this.up ? false : true
if (!this.none || this.none !== this.prevNone) {
let total = 0
if (this.left) total += 1
if (this.right) total += 2
if (this.up) total += 4
let str36 = total.toString(36)
this.channel.emit('playerMove', str36)
}
this.prevNone = this.none
}
}
class Control extends Phaser.GameObjects.Image {
constructor(scene, x, y, btn) {
super(scene, x, y, 'controls')
scene.add.existing(this)
this.btn = btn
this.setInteractive().setScrollFactor(0).setAlpha(0.2).setDepth(2)
// if (!scene.sys.game.device.input.touch) this.setAlpha(0)
}
}