2017-03-05 17:48:13 +00:00
|
|
|
module TS.SpaceTac.UI {
|
2017-03-05 23:29:02 +00:00
|
|
|
/**
|
|
|
|
* Interface for any graphical item that may receive an equipment as drop destination
|
|
|
|
*/
|
|
|
|
export interface CharacterEquipmentDestination {
|
|
|
|
canDropEquipment(equipment: Equipment, x: number, y: number): CharacterEquipmentDrop | null;
|
|
|
|
}
|
|
|
|
|
2017-03-05 17:48:13 +00:00
|
|
|
/**
|
|
|
|
* Display a ship equipment, either attached to a slot, in cargo, or being dragged down
|
|
|
|
*/
|
|
|
|
export class CharacterEquipment extends Phaser.Image {
|
|
|
|
constructor(sheet: CharacterSheet, equipment: Equipment) {
|
2017-03-09 19:11:19 +00:00
|
|
|
let icon = sheet.game.cache.checkImageKey(`equipment-${equipment.code}`) ? `equipment-${equipment.code}` : `battle-actions-${equipment.action.code}`;
|
|
|
|
super(sheet.game, 0, 0, icon);
|
2017-03-05 17:48:13 +00:00
|
|
|
|
|
|
|
this.anchor.set(0.5, 0.5);
|
|
|
|
this.scale.set(0.5, 0.5);
|
2017-03-05 23:29:02 +00:00
|
|
|
|
|
|
|
this.inputEnabled = true;
|
|
|
|
this.input.enableDrag(false, true);
|
|
|
|
|
|
|
|
let origin: [number, number] | null = null;
|
|
|
|
let drop: CharacterEquipmentDrop | null = null;
|
|
|
|
this.events.onDragStart.add(() => {
|
|
|
|
origin = [this.x, this.y];
|
|
|
|
this.alpha = 0.8;
|
|
|
|
});
|
|
|
|
this.events.onDragUpdate.add(() => {
|
|
|
|
drop = sheet.canDropEquipment(equipment, this.x, this.y);
|
|
|
|
});
|
|
|
|
this.events.onDragStop.add(() => {
|
|
|
|
if (drop) {
|
|
|
|
drop.callback(equipment);
|
|
|
|
sheet.refresh();
|
|
|
|
} else {
|
|
|
|
if (origin) {
|
|
|
|
this.position.set(origin[0], origin[1]);
|
|
|
|
origin = null;
|
|
|
|
}
|
|
|
|
this.alpha = 1;
|
|
|
|
}
|
|
|
|
});
|
2017-03-05 17:48:13 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|