app.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. /**
  2. * @author mrdoob / http://mrdoob.com/
  3. */
  4. var APP = {
  5. Player: function () {
  6. var loader = new THREE.ObjectLoader();
  7. var camera, scene, renderer;
  8. var scripts = {};
  9. this.dom = undefined;
  10. this.load = function ( json ) {
  11. renderer = new THREE.WebGLRenderer( { antialias: true } );
  12. renderer.setPixelRatio( window.devicePixelRatio );
  13. camera = loader.parse( json.camera );
  14. scene = loader.parse( json.scene );
  15. scripts = {
  16. init: [],
  17. keydown: [],
  18. keyup: [],
  19. mousedown: [],
  20. mouseup: [],
  21. mousemove: [],
  22. update: []
  23. };
  24. for ( var uuid in json.scripts ) {
  25. var object = scene.getObjectByProperty( 'uuid', uuid, true );
  26. var sources = json.scripts[ uuid ];
  27. for ( var i = 0; i < sources.length; i ++ ) {
  28. var script = sources[ i ];
  29. script.compiled = new Function( 'event', script.source ).bind( object );
  30. scripts[ script.event ].push( script.compiled );
  31. }
  32. }
  33. dispatch( scripts.init, {} );
  34. this.dom = renderer.domElement;
  35. };
  36. this.setSize = function ( width, height ) {
  37. camera.aspect = width / height;
  38. camera.updateProjectionMatrix();
  39. renderer.setSize( width, height );
  40. };
  41. var dispatch = function ( array, event ) {
  42. for ( var i = 0, l = array.length; i < l; i ++ ) {
  43. array[ i ]( event );
  44. }
  45. };
  46. var request;
  47. var animate = function ( time ) {
  48. request = requestAnimationFrame( animate );
  49. dispatch( scripts.update, { time: time } );
  50. renderer.render( scene, camera );
  51. };
  52. this.play = function () {
  53. document.addEventListener( 'keydown', onDocumentKeyDown );
  54. document.addEventListener( 'keyup', onDocumentKeyUp );
  55. document.addEventListener( 'mousedown', onDocumentMouseDown );
  56. document.addEventListener( 'mouseup', onDocumentMouseUp );
  57. document.addEventListener( 'mousemove', onDocumentMouseMove );
  58. request = requestAnimationFrame( animate );
  59. };
  60. this.stop = function () {
  61. document.removeEventListener( 'keydown', onDocumentKeyDown );
  62. document.removeEventListener( 'keyup', onDocumentKeyUp );
  63. document.removeEventListener( 'mousedown', onDocumentMouseDown );
  64. document.removeEventListener( 'mouseup', onDocumentMouseUp );
  65. document.removeEventListener( 'mousemove', onDocumentMouseMove );
  66. cancelAnimationFrame( request );
  67. };
  68. //
  69. var onDocumentKeyDown = function ( event ) {
  70. dispatch( scripts.keydown, event );
  71. };
  72. var onDocumentKeyUp = function ( event ) {
  73. dispatch( scripts.keyup, event );
  74. };
  75. var onDocumentMouseDown = function ( event ) {
  76. dispatch( scripts.mousedown, event );
  77. };
  78. var onDocumentMouseUp = function ( event ) {
  79. dispatch( scripts.mouseup, event );
  80. };
  81. var onDocumentMouseMove = function ( event ) {
  82. dispatch( scripts.mousemove, event );
  83. };
  84. }
  85. };