-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrenderer.js
More file actions
51 lines (51 loc) · 1.69 KB
/
Copy pathrenderer.js
File metadata and controls
51 lines (51 loc) · 1.69 KB
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
/*
Renderer.js
Requires Utils.js amd Logger.js
*/
/**
* Creates a 'scene'. A scene contains all the atoms and renderers and stuff
* for a single simulation. Multiple scenes can be run at a time.
*/
window['Scene'] = function() {
var self = this;
self.registry = {};
self.registry.physicsHandlers = new Array();
/**
* Registers a physics handler.
* @param handler: physics handler to register
* @param seniority: [Optional, default -1] order at which they are called (higher numbers called first)
* @see Scene#update(ticks)
*/
self.registerPhysicsHandler = function(handler, seniority/*optional*/) {
self.registry.physicsHandlers.push({handler:handler, seniority:(ISSET(seniority)?seniority:-1)});
return self;//allow for chaining
};
/**
* Updates the scene the specified number of ticks.
* @param ticks: [Optional, default 1] number of ticks to update.
* @return errorlevel: 0 is good, -1 or a thrown error is bad.
*/
self.update = function(ticks) {
var logger = Logger.create("renderer.js", "Scene#update");
if (ISSET(ticks)) {
if(ticks <= 0) {
throw(new Error("Called Scene.update(ticks) with ticks=" + ticks + " (ticks must be greater than 0)."));
return -1;//probably unreachable code
}
for(var i = 0; i < ticks; i++) {
self.update();
}
return 0;
} else {
//order physicsHandlers
var handlerArr = {};
for(var handlerObj in self.registry.physicsHandlers) {
if(typeof handlerArr[handlerObj['seniority']] !== 'object') handlerArr[handlerObj['seniority']] = [];
handlerArr[handlerObj['seniority']].push(handlerObj['handler']);
}
//call physicshandlers, in order.
//TODO finish
}
}
return self;
}