@@ -9,9 +9,7 @@ var APP = {
99 var loader = new THREE . ObjectLoader ( ) ;
1010 var camera , scene , renderer ;
1111
12- var scripts = {
13- update : [ ]
14- } ;
12+ var scripts = { } ;
1513
1614 this . dom = undefined ;
1715
@@ -21,27 +19,38 @@ var APP = {
2119 renderer . setPixelRatio ( window . devicePixelRatio ) ;
2220
2321 camera = loader . parse ( json . camera ) ;
24-
2522 scene = loader . parse ( json . scene ) ;
2623
27- scripts . update = [ ] ;
24+ scripts = {
25+ init : [ ] ,
26+ keydown : [ ] ,
27+ keyup : [ ] ,
28+ mousedown : [ ] ,
29+ mouseup : [ ] ,
30+ mousemove : [ ] ,
31+ update : [ ]
32+ } ;
2833
2934 for ( var uuid in json . scripts ) {
3035
3136 var object = scene . getObjectByProperty ( 'uuid' , uuid , true ) ;
37+
3238 var sources = json . scripts [ uuid ] ;
3339
3440 for ( var i = 0 ; i < sources . length ; i ++ ) {
3541
36- var source = sources [ i ] ;
42+ var script = sources [ i ] ;
3743
38- var script = ( new Function ( 'scene' , 'time' , source ) . bind ( object ) ) ;
39- scripts . update . push ( script ) ;
44+ script . compiled = new Function ( 'event' , script . source ) . bind ( object ) ;
45+
46+ scripts [ script . event ] . push ( script . compiled ) ;
4047
4148 }
4249
4350 }
4451
52+ dispatch ( scripts . init , { } ) ;
53+
4554 this . dom = renderer . domElement ;
4655
4756 } ;
@@ -55,34 +64,84 @@ var APP = {
5564
5665 } ;
5766
67+ var dispatch = function ( array , event ) {
68+
69+ for ( var i = 0 , l = array . length ; i < l ; i ++ ) {
70+
71+ array [ i ] ( event ) ;
72+
73+ }
74+
75+ } ;
76+
5877 var request ;
5978
6079 var animate = function ( time ) {
6180
6281 request = requestAnimationFrame ( animate ) ;
6382
64- for ( var i = 0 , l = scripts . update . length ; i < l ; i ++ ) {
65-
66- scripts . update [ i ] ( scene , time ) ;
67-
68- }
83+ dispatch ( scripts . update , { time : time } ) ;
6984
7085 renderer . render ( scene , camera ) ;
7186
7287 } ;
7388
7489 this . play = function ( ) {
7590
91+ document . addEventListener ( 'keydown' , onDocumentKeyDown ) ;
92+ document . addEventListener ( 'keyup' , onDocumentKeyUp ) ;
93+ document . addEventListener ( 'mousedown' , onDocumentMouseDown ) ;
94+ document . addEventListener ( 'mouseup' , onDocumentMouseUp ) ;
95+ document . addEventListener ( 'mousemove' , onDocumentMouseMove ) ;
96+
7697 request = requestAnimationFrame ( animate ) ;
7798
7899 } ;
79100
80101 this . stop = function ( ) {
81102
103+ document . removeEventListener ( 'keydown' , onDocumentKeyDown ) ;
104+ document . removeEventListener ( 'keyup' , onDocumentKeyUp ) ;
105+ document . removeEventListener ( 'mousedown' , onDocumentMouseDown ) ;
106+ document . removeEventListener ( 'mouseup' , onDocumentMouseUp ) ;
107+ document . removeEventListener ( 'mousemove' , onDocumentMouseMove ) ;
108+
82109 cancelAnimationFrame ( request ) ;
83110
84111 } ;
85112
113+ //
114+
115+ var onDocumentKeyDown = function ( event ) {
116+
117+ dispatch ( scripts . keydown , event ) ;
118+
119+ } ;
120+
121+ var onDocumentKeyUp = function ( event ) {
122+
123+ dispatch ( scripts . keyup , event ) ;
124+
125+ } ;
126+
127+ var onDocumentMouseDown = function ( event ) {
128+
129+ dispatch ( scripts . mousedown , event ) ;
130+
131+ } ;
132+
133+ var onDocumentMouseUp = function ( event ) {
134+
135+ dispatch ( scripts . mouseup , event ) ;
136+
137+ } ;
138+
139+ var onDocumentMouseMove = function ( event ) {
140+
141+ dispatch ( scripts . mousemove , event ) ;
142+
143+ } ;
144+
86145 }
87146
88147} ;
0 commit comments