1
0
Fork 0

Fixed tooltips being stuck on destroyed objects

This commit is contained in:
Michaël Lemaire 2017-06-22 20:18:36 +02:00
parent 370252ce6e
commit c5c141edcb
2 changed files with 34 additions and 6 deletions

View file

@ -16,8 +16,6 @@ module TS.SpaceTac.UI.Specs {
});
it("handles hover and click on desktops and mobile targets", function (done) {
jasmine.clock().uninstall();
let newButton: () => [Phaser.Button, any] = () => {
var button = new Phaser.Button(testgame.ui);
var funcs = {
@ -49,7 +47,25 @@ module TS.SpaceTac.UI.Specs {
expect(funcs.leave).toHaveBeenCalledTimes(1);
expect(funcs.click).toHaveBeenCalledTimes(1);
// Leaves on destroy
[button, funcs] = newButton();
button.onInputDown.dispatch();
jasmine.clock().tick(150);
expect(funcs.enter).toHaveBeenCalledTimes(1);
expect(funcs.leave).toHaveBeenCalledTimes(0);
expect(funcs.click).toHaveBeenCalledTimes(0);
button.events.onDestroy.dispatch();
expect(funcs.enter).toHaveBeenCalledTimes(1);
expect(funcs.leave).toHaveBeenCalledTimes(1);
expect(funcs.click).toHaveBeenCalledTimes(0);
button.onInputDown.dispatch();
button.onInputUp.dispatch();
expect(funcs.enter).toHaveBeenCalledTimes(1);
expect(funcs.leave).toHaveBeenCalledTimes(1);
expect(funcs.click).toHaveBeenCalledTimes(0);
// Hold to hover on mobile
jasmine.clock().uninstall();
[button, funcs] = newButton();
button.onInputDown.dispatch();
Timer.global.schedule(150, () => {

View file

@ -53,6 +53,7 @@ module TS.SpaceTac.UI {
let enternext: Function | null = null;
let entercalled = false;
let cursorinside = false;
let destroyed = false;
obj.input.useHandCursor = true;
@ -67,9 +68,11 @@ module TS.SpaceTac.UI {
};
let effectiveenter = () => {
enternext = null;
entercalled = true;
enter();
if (!destroyed) {
enternext = null;
entercalled = true;
enter();
}
}
let effectiveleave = () => {
@ -82,11 +85,14 @@ module TS.SpaceTac.UI {
if (obj.events) {
obj.events.onDestroy.addOnce(() => {
prevententer();
destroyed = true;
effectiveleave();
});
}
obj.onInputOver.add(() => {
if (destroyed) return;
if (obj.visible && obj.alpha) {
cursorinside = true;
enternext = Timer.global.schedule(hovertime, effectiveenter);
@ -94,11 +100,15 @@ module TS.SpaceTac.UI {
});
obj.onInputOut.add(() => {
if (destroyed) return;
cursorinside = false;
effectiveleave();
});
obj.onInputDown.add(() => {
if (destroyed) return;
if (obj.visible && obj.alpha) {
holdstart = new Date();
if (!cursorinside && !enternext) {
@ -108,6 +118,8 @@ module TS.SpaceTac.UI {
});
obj.onInputUp.add(() => {
if (destroyed) return;
if (!cursorinside) {
effectiveleave();
}