Fixed tooltips being stuck on destroyed objects
This commit is contained in:
parent
370252ce6e
commit
c5c141edcb
|
@ -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, () => {
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue