-
Notifications
You must be signed in to change notification settings - Fork 1
/
boxregistry.js
73 lines (59 loc) · 1.73 KB
/
boxregistry.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
"use strict";
define([], function() {
function create() {
var objects = {};
var idCount = 0;
var deletionListeners = [];
function nextId() {
return idCount++;
}
function registerBody( body ) {
var id = nextId();
body.userData = id;
var object = {
id:id,
body:body,
onContact: undefined,
isMarkedForDeletion:false,
is: function(object) { return object.id === id; },
};
objects[id] = object;
return object;
}
function getByBody( body ) {
var id = body.userData;
return objects[id];
}
function getByFixture( fixture ) {
var body = fixture.GetBody();
return getByBody( body );
}
function addDeletionListener( callback ) {
deletionListeners.push( callback );
}
function notifyDeletionListeners( object ) {
deletionListeners.forEach( function( listener ) {
listener( object );
});
}
function processDeletions() {
for( var id in objects ) {
var object = objects[id];
if( object.isMarkedForDeletion ) {
notifyDeletionListeners( object );
delete objects[id];
}
}
}
return {
getByBody:getByBody,
getByFixture:getByFixture,
registerBody:registerBody,
processDeletions:processDeletions,
addDeletionListener:addDeletionListener,
}
}
return {
create:create
}
});