/
render_system.js
79 lines (68 loc) · 2.68 KB
/
render_system.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
74
75
76
77
78
79
var renderSystem = function(ecs, eventManager, preloader) {
var my = {};
my.hasInit = false;
// When we remove entities they may leave view components hanging around
// and we need to remove them from the stage
my.previouslyRenderedEntities = [];
my.assets = preloader.assets;
var removeOldViews = function(previouslyRenderedEntities, renderedEntities) {
var viewIdsToRemove = _.difference(
_.keys(previouslyRenderedEntities),
_.keys(renderedEntities));
_.forEach(
viewIdsToRemove,
function(viewId) {
var previouslyRenderedEntity = previouslyRenderedEntities[+viewId];
if (previouslyRenderedEntity.remove) {
previouslyRenderedEntity.remove(my);
}
else if (previouslyRenderedEntity) {
var parentName = previouslyRenderedEntity.parentEntity.name;
console.log("Remove method not implemented for entity: " + parentName);
}
});
};
var render = function() {
var renderedEntities = {};
ecs.runSystem(
[componentTypeEnum.VIEW],
function(entity) {
var view = entity.components[componentTypeEnum.VIEW];
if (view.init && !view.hasInit)
{
view.init(my, entity, eventManager);
if (config.gizmoSystemEnabled)
eventManager.vent.trigger("SYSTEM:GIZMO:INIT", my, entity);
view.hasInit = true;
}
view.render(my, entity, eventManager);
renderedEntities[view.id] = view;
});
removeOldViews(my.previouslyRenderedEntities, renderedEntities);
my.previouslyRenderedEntities = renderedEntities;
my.stage.update();
};
var start = function() {
if (my.hasInit)
return;
// Create the easel stage
my.stage = new createjs.Stage('notebooknumbers');
// More stage set up
// Enable touch screen support
if (createjs.Touch.isSupported()) {
console.log("Touch enabled version");
createjs.Touch.enable(my.stage);
} else {
console.log("Non-touch enabled version");
my.stage.enableMouseOver();
}
createjs.Ticker.setFPS(25);
eventManager.vent.on("SYSTEM:RENDER:RENDER", render);
eventManager.vent.trigger("SYSTEM:SCROLL:START", my.stage);
my.hasInit = true;
};
var initialiseEvents = function() {
eventManager.vent.on("SYSTEM:RENDER:START", start);
};
initialiseEvents();
};