1
0
Fork 0
spacetac/src/ui/battle/ArenaDrone.ts

90 lines
2.7 KiB
TypeScript
Raw Normal View History

2017-02-09 00:00:35 +00:00
module TS.SpaceTac.UI {
2017-02-08 18:54:02 +00:00
/**
* Drone sprite in the arena
*/
export class ArenaDrone extends Phaser.Group {
2017-05-10 17:48:28 +00:00
// Link to view
view: BattleView;
2017-02-08 18:54:02 +00:00
// Link to displayed drone
2017-02-09 00:00:35 +00:00
drone: Drone;
2017-02-08 18:54:02 +00:00
// Sprite
2017-05-10 17:48:28 +00:00
sprite: Phaser.Button;
2017-02-08 18:54:02 +00:00
// Radius
radius: Phaser.Graphics;
// Activation effect
activation: Phaser.Graphics;
2017-05-10 23:13:56 +00:00
// Destroyed state
destroyed = false;
2017-02-09 00:00:35 +00:00
constructor(battleview: BattleView, drone: Drone) {
2017-02-08 18:54:02 +00:00
super(battleview.game);
2017-05-10 17:48:28 +00:00
this.view = battleview;
2017-02-08 18:54:02 +00:00
this.drone = drone;
this.radius = new Phaser.Graphics(this.game, 0, 0);
this.radius.lineStyle(2, 0xe9f2f9, 0.3);
2017-02-08 18:54:02 +00:00
this.radius.beginFill(0xe9f2f9, 0.0);
this.radius.drawCircle(0, 0, drone.radius * 2);
this.radius.endFill();
this.addChild(this.radius);
this.activation = new Phaser.Graphics(this.game, 0, 0);
this.activation.lineStyle(2, 0xe9f2f9, 0.7);
this.activation.beginFill(0xe9f2f9, 0.0);
this.activation.drawCircle(0, 0, drone.radius * 2);
this.activation.endFill();
this.activation.visible = false;
this.addChild(this.activation);
2017-05-10 17:48:28 +00:00
this.sprite = new Phaser.Button(this.game, 0, 0, `battle-actions-deploy-${drone.code}`);
2017-02-08 18:54:02 +00:00
this.sprite.anchor.set(0.5, 0.5);
this.sprite.scale.set(0.1, 0.1);
this.addChild(this.sprite);
this.view.tooltip.bindDynamicText(this.sprite, () => {
return this.destroyed ? "" : this.drone.getDescription();
});
2017-02-08 18:54:02 +00:00
}
/**
* Start the activation animation
*
* Return the animation duration
*/
setApplied(): number {
2017-05-10 23:13:56 +00:00
if (this.destroyed) {
return 0;
}
this.activation.scale.set(0.001, 0.001);
this.activation.visible = true;
let tween = this.game.tweens.create(this.activation.scale).to({ x: 1, y: 1 }, 500);
tween.onComplete.addOnce(() => this.activation.visible = false);
tween.start();
return 500;
}
2017-05-10 23:13:56 +00:00
/**
* Set the sprite as destroyed
*/
setDestroyed() {
this.destroyed = true;
this.game.tweens.create(this).to({ alpha: 0.3 }, 300).delay(200).start();
let tween = this.game.tweens.create(this.radius.scale).to({ x: 0, y: 0 }, 500);
tween.onComplete.addOnce(() => {
this.radius.destroy();
this.activation.destroy();
});
tween.start();
}
2017-02-08 18:54:02 +00:00
}
}