1
0
Fork 0
spacetac/src/ui/common/Tools.ts

70 lines
2.1 KiB
TypeScript
Raw Normal View History

2017-02-09 00:00:35 +00:00
module TS.SpaceTac.UI {
// Common UI tools functions
export class Tools {
/**
* Setup a hover/hold/click routine on an object
*
* This should span the bridge between desktop and mobile targets.
*/
static setHoverClick(obj: Phaser.Button, enter: Function, leave: Function, click: Function, hovertime = 300, holdtime = 600) {
let holdstart = new Date();
let enternext = null;
let hovered = false;
obj.input.useHandCursor = true;
let prevententer = () => {
if (enternext != null) {
Timer.global.cancel(enternext);
enternext = null;
}
};
obj.onInputOver.add(() => {
2017-02-16 22:59:41 +00:00
enternext = Timer.global.schedule(hovertime, enter);
hovered = true;
});
obj.onInputOut.add(() => {
prevententer();
leave();
hovered = false;
});
obj.onInputDown.add(() => {
prevententer();
holdstart = new Date();
2017-02-16 22:59:41 +00:00
enternext = Timer.global.schedule(holdtime, enter);
});
obj.onInputUp.add(() => {
prevententer();
if (new Date().getTime() - holdstart.getTime() < holdtime) {
if (!hovered) {
enter();
}
click();
if (!hovered) {
leave();
}
} else if (!hovered) {
leave();
}
});
}
// Constraint an angle in radians the ]-pi;pi] range.
static normalizeAngle(angle: number): number {
angle = angle % (2 * Math.PI);
if (angle <= -Math.PI) {
return angle + 2 * Math.PI;
} else if (angle > Math.PI) {
return angle - 2 * Math.PI;
} else {
return angle;
}
}
}
}