Skip to content

Instantly share code, notes, and snippets.

@PierrePaul
Last active September 14, 2016 08:16
Show Gist options
  • Save PierrePaul/e6d623f136efc3f8bb14 to your computer and use it in GitHub Desktop.
Save PierrePaul/e6d623f136efc3f8bb14 to your computer and use it in GitHub Desktop.
Phaser virtual joystick
/// <reference path="../lib/phaser.d.ts"/>
/// <reference path="../lib/socket.io.d.ts"/>
/// <reference path="ship.ts"/>
module AstRoidGame {
export class ControlStick extends Phaser.Group {
controlField: Phaser.Sprite;
stickCenterPos: Phaser.Point;
stick: Phaser.Sprite;
game: Phaser.Game;
isUp: boolean;
isDown: boolean;
isLeft: boolean;
isRight: boolean;
constructor(game: Phaser.Game, group: Phaser.Group, x:number, y:number) {
super(game, group, 'ControlStick');
this.game = game;
this.controlField = this.game.add.sprite(x, y, 'hud-control-field', 0, this);
this.controlField.fixedToCamera = true;
this.controlField.anchor.set(0, 1);
var centerX = this.controlField.x + (this.controlField.width / 2);
var centerY = this.controlField.y - (this.controlField.height / 2);
this.stickCenterPos = new Phaser.Point(centerX, centerY);
this.stick = this.game.add.sprite(centerX, centerY, 'hud-control-stick', 0, this);
if(!this.game.device.desktop){
this.stick.scale.set(1.15);
}
this.stick.anchor.set(0.5);
this.stick.fixedToCamera = true;
this.stick.inputEnabled = true;
this.stick.input.enableDrag();
this.stick.events.onDragUpdate.add(this.dragStart, this);
}
dragStart(sprite, pointerDirection) {
var deltaX = pointerDirection.x - this.stickCenterPos.x;
var deltaY = pointerDirection.y - this.stickCenterPos.y;
var maxPixel = 50;
var minPixel = -50;
var threshold = 30;
if(deltaX > maxPixel){
this.stick.cameraOffset.x = this.stickCenterPos.x + maxPixel;
}else if(deltaX < minPixel){
this.stick.cameraOffset.x = this.stickCenterPos.x + minPixel;
}else {
this.stick.cameraOffset.x = this.stickCenterPos.x + deltaX;
}
this.isRight = false;
this.isLeft = false;
if(deltaX > threshold){
this.isRight = true;
}else if(deltaX < -threshold){
this.isLeft = true;
}
if(deltaY > maxPixel){
this.stick.cameraOffset.y = this.stickCenterPos.y + maxPixel;
}else if(deltaY < minPixel){
this.stick.cameraOffset.y = this.stickCenterPos.y + minPixel;
}else {
this.stick.cameraOffset.y = this.stickCenterPos.y + deltaY;
}
this.isUp = false;
this.isDown = false;
if(deltaY < -threshold){
this.isUp = true;
}else if(deltaY > threshold){
this.isDown = true;
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment