Skip to content

Commit d12522e

Browse files
committed
Pointer Over and Out events and lists working
1 parent b7d4559 commit d12522e

10 files changed

Lines changed: 176 additions & 12 deletions

File tree

v3/src/checksum.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
var CHECKSUM = {
2-
build: '3d091d10-67d2-11e7-977c-8588186fe9f9'
2+
build: '29bc3100-6824-11e7-b3dd-8943a02e40de'
33
};
44
module.exports = CHECKSUM;

v3/src/input/GlobalInputManager.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,16 @@ var GlobalInputManager = new Class({
5353
this.mouse.boot();
5454
},
5555

56-
update: function ()
56+
update: function (time, delta)
5757
{
5858
this.keyboard.update();
5959

6060
var len = this.queue.length;
6161

62+
var pointer = this.activePointer;
63+
64+
pointer.hasMoved = false;
65+
6266
if (!this.enabled || len === 0)
6367
{
6468
return;
@@ -68,10 +72,6 @@ var GlobalInputManager = new Class({
6872
// be modified during the processing phase
6973
var queue = this.queue.splice(0, len);
7074

71-
var pointer = this.activePointer;
72-
73-
pointer.hasMoved = false;
74-
7575
// Process the event queue, dispatching all of the events that have stored up
7676
for (var i = 0; i < len; i++)
7777
{
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
var Class = require('../../utils/Class');
2+
var Event = require('../../events/Event');
3+
4+
var PointerDownEvent = new Class({
5+
6+
Extends: Event,
7+
8+
initialize:
9+
10+
function PointerDownEvent (pointer, gameObject)
11+
{
12+
Event.call(this, 'POINTER_DOWN_EVENT');
13+
14+
this.pointer = pointer;
15+
this.gameObject = gameObject;
16+
17+
// this.x;
18+
// this.y;
19+
}
20+
21+
});
22+
23+
module.exports = PointerDownEvent;
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
var Class = require('../../utils/Class');
2+
var Event = require('../../events/Event');
3+
4+
var PointerOutEvent = new Class({
5+
6+
Extends: Event,
7+
8+
initialize:
9+
10+
function PointerOutEvent (pointer, gameObject)
11+
{
12+
Event.call(this, 'POINTER_OUT_EVENT');
13+
14+
this.pointer = pointer;
15+
this.gameObject = gameObject;
16+
17+
// this.x;
18+
// this.y;
19+
}
20+
21+
});
22+
23+
module.exports = PointerOutEvent;
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
var Class = require('../../utils/Class');
2+
var Event = require('../../events/Event');
3+
4+
var PointerOverEvent = new Class({
5+
6+
Extends: Event,
7+
8+
initialize:
9+
10+
function PointerOverEvent (pointer, gameObject)
11+
{
12+
Event.call(this, 'POINTER_OVER_EVENT');
13+
14+
this.pointer = pointer;
15+
this.gameObject = gameObject;
16+
17+
// this.x;
18+
// this.y;
19+
}
20+
21+
});
22+
23+
module.exports = PointerOverEvent;
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
var Class = require('../../utils/Class');
2+
var Event = require('../../events/Event');
3+
4+
var PointerUpEvent = new Class({
5+
6+
Extends: Event,
7+
8+
initialize:
9+
10+
function PointerUpEvent (pointer, gameObject)
11+
{
12+
Event.call(this, 'POINTER_UP_EVENT');
13+
14+
this.pointer = pointer;
15+
this.gameObject = gameObject;
16+
17+
// this.x;
18+
// this.y;
19+
}
20+
21+
});
22+
23+
module.exports = PointerUpEvent;

v3/src/input/events/index.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// Phaser.Input.Events
2+
3+
module.exports = {
4+
5+
DOWN: require('./PointerDownEvent'),
6+
OUT: require('./PointerOutEvent'),
7+
OVER: require('./PointerOverEvent'),
8+
UP: require('./PointerUpEvent')
9+
10+
};

v3/src/input/mouse/events/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
// Phaser.Input.Mouse.Events
12

23
module.exports = {
34
DOWN: require('./MouseDownEvent'),

v3/src/plugins/InputManager.js

Lines changed: 64 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
var Class = require('../utils/Class');
2+
var InputEvent = require('../input/events');
23

34
var InputManager = new Class({
45

@@ -9,7 +10,7 @@ var InputManager = new Class({
910
// The State that owns this plugin
1011
this.state = state;
1112

12-
this.cameras = state.cameras.cameras;
13+
this.cameras;
1314

1415
// GlobalInputManager
1516
this.manager = game.input;
@@ -21,11 +22,23 @@ var InputManager = new Class({
2122
this.mouse = this.manager.mouse;
2223

2324
this._size = 0;
25+
26+
// All interactive objects
2427
this._list = [];
28+
29+
// Only those which are currently below a pointer (any pointer)
30+
this._over = [];
31+
32+
// Objects waiting to be inserted or removed from the active list
2533
this._pendingInsertion = [];
2634
this._pendingRemoval = [];
2735
},
2836

37+
boot: function ()
38+
{
39+
this.cameras = this.state.sys.cameras.cameras;
40+
},
41+
2942
begin: function ()
3043
{
3144
var toRemove = this._pendingRemoval.length;
@@ -53,13 +66,14 @@ var InputManager = new Class({
5366
}
5467
}
5568

56-
// Move pending to active
69+
// Move pending to active (can swap for concat splice if we don't need anything extra here)
70+
5771
for (i = 0; i < toInsert; i++)
5872
{
5973
gameObject = this._pendingInsertion[i];
6074

6175
// Swap for Input Enabled Object
62-
this._list.push({ gameObject: gameObject, over: false, down: false, localX: 0, localY: 0 });
76+
this._list.push(gameObject);
6377
}
6478

6579
this._size = this._list.length;
@@ -85,20 +99,64 @@ var InputManager = new Class({
8599

86100
processPointer: function (pointer)
87101
{
88-
var over = [];
102+
var i;
103+
var tested = [];
104+
var justOut = [];
105+
var justOver = [];
106+
var stillOver = [];
89107

90108
// Returns an array of objects the pointer is over
91109

92-
for (var i = 0; i < this.cameras.length; i++)
110+
for (i = 0; i < this.cameras.length; i++)
93111
{
94112
var camera = this.cameras[i];
95113

96114
if (camera.inputEnabled)
97115
{
98-
over = over.concat(this.manager.hitTest(this._list, pointer.x, pointer.y, camera));
116+
tested = tested.concat(this.manager.hitTest(this._list, pointer.x, pointer.y, camera));
117+
}
118+
}
119+
120+
for (i = 0; i < tested.length; i++)
121+
{
122+
var item = tested[i];
123+
124+
if (this._over.indexOf(item) !== -1)
125+
{
126+
stillOver.push(item);
99127
}
128+
else
129+
{
130+
justOver.push(item);
131+
}
132+
}
133+
134+
this._over.forEach(function(item) {
135+
136+
if (tested.indexOf(item) === -1)
137+
{
138+
justOut.push(item);
139+
}
140+
141+
});
142+
143+
// Now we can process what has happened
144+
for (i = 0; i < justOut.length; i++)
145+
{
146+
// Dispatch event? (include the pointer)
147+
this.events.dispatch(new InputEvent.OUT(pointer, justOut[i]));
100148
}
101149

150+
for (i = 0; i < justOver.length; i++)
151+
{
152+
// Dispatch event? (include the pointer)
153+
this.events.dispatch(new InputEvent.OVER(pointer, justOver[i]));
154+
}
155+
156+
// Store everything that is currently over
157+
this._over = stillOver.concat(justOver);
158+
159+
// console.log('tested', tested.length, 'justOver', justOver.length, 'justOut', justOut.length, 'stillOver', stillOver.length, '_over', this._over.length);
102160
},
103161

104162
add: function (child)

v3/src/state/Systems.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,9 @@ var Systems = new Class({
9393
this.time = new Clock(state);
9494
this.tweens = new TweenManager(state);
9595

96+
// Sometimes the managers need access to a system created after them
97+
this.inputManager.boot();
98+
9699
this.inject();
97100
},
98101

0 commit comments

Comments
 (0)