jax 0.0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (446) hide show
  1. data/.gitignore +12 -0
  2. data/.gitmodules +3 -0
  3. data/.rvmrc +7 -0
  4. data/Gemfile +4 -0
  5. data/README.rdoc +32 -0
  6. data/Rakefile +144 -0
  7. data/bin/jax +11 -0
  8. data/builtin/shaders/basic/common.ejs +11 -0
  9. data/builtin/shaders/basic/fragment.ejs +5 -0
  10. data/builtin/shaders/basic/vertex.ejs +13 -0
  11. data/builtin/shaders/depthmap/common.ejs +1 -0
  12. data/builtin/shaders/depthmap/fragment.ejs +5 -0
  13. data/builtin/shaders/depthmap/vertex.ejs +7 -0
  14. data/builtin/shaders/fog/common.ejs +7 -0
  15. data/builtin/shaders/fog/fragment.ejs +23 -0
  16. data/builtin/shaders/fog/manifest.yml +12 -0
  17. data/builtin/shaders/fog/material.js +34 -0
  18. data/builtin/shaders/fog/vertex.ejs +10 -0
  19. data/builtin/shaders/functions/depth_map.ejs +24 -0
  20. data/builtin/shaders/functions/lights.ejs +155 -0
  21. data/builtin/shaders/lighting/common.ejs +5 -0
  22. data/builtin/shaders/lighting/fragment.ejs +34 -0
  23. data/builtin/shaders/lighting/manifest.yml +4 -0
  24. data/builtin/shaders/lighting/material.js +26 -0
  25. data/builtin/shaders/lighting/vertex.ejs +7 -0
  26. data/builtin/shaders/normal_map/common.ejs +12 -0
  27. data/builtin/shaders/normal_map/fragment.ejs +26 -0
  28. data/builtin/shaders/normal_map/manifest.yml +17 -0
  29. data/builtin/shaders/normal_map/material.js +16 -0
  30. data/builtin/shaders/normal_map/vertex.ejs +57 -0
  31. data/builtin/shaders/paraboloid-depthmap/common.ejs +6 -0
  32. data/builtin/shaders/paraboloid-depthmap/fragment.ejs +8 -0
  33. data/builtin/shaders/paraboloid-depthmap/material.js +15 -0
  34. data/builtin/shaders/paraboloid-depthmap/vertex.ejs +26 -0
  35. data/builtin/shaders/shadow_map/common.ejs +14 -0
  36. data/builtin/shaders/shadow_map/fragment.ejs +66 -0
  37. data/builtin/shaders/shadow_map/manifest.yml +1 -0
  38. data/builtin/shaders/shadow_map/material.js +26 -0
  39. data/builtin/shaders/shadow_map/vertex.ejs +46 -0
  40. data/builtin/shaders/texture/common.ejs +4 -0
  41. data/builtin/shaders/texture/fragment.ejs +11 -0
  42. data/builtin/shaders/texture/manifest.yml +17 -0
  43. data/builtin/shaders/texture/material.js +18 -0
  44. data/builtin/shaders/texture/vertex.ejs +9 -0
  45. data/guides/assets/images/book_icon.gif +0 -0
  46. data/guides/assets/images/bullet.gif +0 -0
  47. data/guides/assets/images/chapters_icon.gif +0 -0
  48. data/guides/assets/images/check_bullet.gif +0 -0
  49. data/guides/assets/images/credits_pic_blank.gif +0 -0
  50. data/guides/assets/images/edge_badge.png +0 -0
  51. data/guides/assets/images/feature_tile.gif +0 -0
  52. data/guides/assets/images/footer_tile.gif +0 -0
  53. data/guides/assets/images/getting_started/clean_passing_jasmine_suite.png +0 -0
  54. data/guides/assets/images/getting_started/rock.png +0 -0
  55. data/guides/assets/images/getting_started/rock_normal.png +0 -0
  56. data/guides/assets/images/grey_bullet.gif +0 -0
  57. data/guides/assets/images/header_backdrop.png +0 -0
  58. data/guides/assets/images/header_tile.gif +0 -0
  59. data/guides/assets/images/icons/README +5 -0
  60. data/guides/assets/images/icons/callouts/1.png +0 -0
  61. data/guides/assets/images/icons/callouts/10.png +0 -0
  62. data/guides/assets/images/icons/callouts/11.png +0 -0
  63. data/guides/assets/images/icons/callouts/12.png +0 -0
  64. data/guides/assets/images/icons/callouts/13.png +0 -0
  65. data/guides/assets/images/icons/callouts/14.png +0 -0
  66. data/guides/assets/images/icons/callouts/15.png +0 -0
  67. data/guides/assets/images/icons/callouts/2.png +0 -0
  68. data/guides/assets/images/icons/callouts/3.png +0 -0
  69. data/guides/assets/images/icons/callouts/4.png +0 -0
  70. data/guides/assets/images/icons/callouts/5.png +0 -0
  71. data/guides/assets/images/icons/callouts/6.png +0 -0
  72. data/guides/assets/images/icons/callouts/7.png +0 -0
  73. data/guides/assets/images/icons/callouts/8.png +0 -0
  74. data/guides/assets/images/icons/callouts/9.png +0 -0
  75. data/guides/assets/images/icons/caution.png +0 -0
  76. data/guides/assets/images/icons/example.png +0 -0
  77. data/guides/assets/images/icons/home.png +0 -0
  78. data/guides/assets/images/icons/important.png +0 -0
  79. data/guides/assets/images/icons/next.png +0 -0
  80. data/guides/assets/images/icons/note.png +0 -0
  81. data/guides/assets/images/icons/prev.png +0 -0
  82. data/guides/assets/images/icons/tip.png +0 -0
  83. data/guides/assets/images/icons/up.png +0 -0
  84. data/guides/assets/images/icons/warning.png +0 -0
  85. data/guides/assets/images/nav_arrow.gif +0 -0
  86. data/guides/assets/images/tab_grey.gif +0 -0
  87. data/guides/assets/images/tab_info.gif +0 -0
  88. data/guides/assets/images/tab_note.gif +0 -0
  89. data/guides/assets/images/tab_red.gif +0 -0
  90. data/guides/assets/images/tab_yellow.gif +0 -0
  91. data/guides/assets/images/tab_yellow.png +0 -0
  92. data/guides/assets/javascripts/guides.js +7 -0
  93. data/guides/assets/javascripts/syntaxhighlighter/shBrushAS3.js +59 -0
  94. data/guides/assets/javascripts/syntaxhighlighter/shBrushAppleScript.js +75 -0
  95. data/guides/assets/javascripts/syntaxhighlighter/shBrushBash.js +59 -0
  96. data/guides/assets/javascripts/syntaxhighlighter/shBrushCSharp.js +65 -0
  97. data/guides/assets/javascripts/syntaxhighlighter/shBrushColdFusion.js +100 -0
  98. data/guides/assets/javascripts/syntaxhighlighter/shBrushCpp.js +97 -0
  99. data/guides/assets/javascripts/syntaxhighlighter/shBrushCss.js +91 -0
  100. data/guides/assets/javascripts/syntaxhighlighter/shBrushDelphi.js +55 -0
  101. data/guides/assets/javascripts/syntaxhighlighter/shBrushDiff.js +41 -0
  102. data/guides/assets/javascripts/syntaxhighlighter/shBrushErlang.js +52 -0
  103. data/guides/assets/javascripts/syntaxhighlighter/shBrushGroovy.js +67 -0
  104. data/guides/assets/javascripts/syntaxhighlighter/shBrushJScript.js +52 -0
  105. data/guides/assets/javascripts/syntaxhighlighter/shBrushJava.js +57 -0
  106. data/guides/assets/javascripts/syntaxhighlighter/shBrushJavaFX.js +58 -0
  107. data/guides/assets/javascripts/syntaxhighlighter/shBrushPerl.js +72 -0
  108. data/guides/assets/javascripts/syntaxhighlighter/shBrushPhp.js +88 -0
  109. data/guides/assets/javascripts/syntaxhighlighter/shBrushPlain.js +33 -0
  110. data/guides/assets/javascripts/syntaxhighlighter/shBrushPowerShell.js +74 -0
  111. data/guides/assets/javascripts/syntaxhighlighter/shBrushPython.js +64 -0
  112. data/guides/assets/javascripts/syntaxhighlighter/shBrushRuby.js +55 -0
  113. data/guides/assets/javascripts/syntaxhighlighter/shBrushSass.js +94 -0
  114. data/guides/assets/javascripts/syntaxhighlighter/shBrushScala.js +51 -0
  115. data/guides/assets/javascripts/syntaxhighlighter/shBrushSql.js +66 -0
  116. data/guides/assets/javascripts/syntaxhighlighter/shBrushVb.js +56 -0
  117. data/guides/assets/javascripts/syntaxhighlighter/shBrushXml.js +69 -0
  118. data/guides/assets/javascripts/syntaxhighlighter/shCore.js +17 -0
  119. data/guides/assets/stylesheets/fixes.css +16 -0
  120. data/guides/assets/stylesheets/main.css +445 -0
  121. data/guides/assets/stylesheets/print.css +52 -0
  122. data/guides/assets/stylesheets/reset.css +43 -0
  123. data/guides/assets/stylesheets/style.css +13 -0
  124. data/guides/assets/stylesheets/syntaxhighlighter/shCore.css +226 -0
  125. data/guides/assets/stylesheets/syntaxhighlighter/shCoreDefault.css +328 -0
  126. data/guides/assets/stylesheets/syntaxhighlighter/shCoreDjango.css +331 -0
  127. data/guides/assets/stylesheets/syntaxhighlighter/shCoreEclipse.css +339 -0
  128. data/guides/assets/stylesheets/syntaxhighlighter/shCoreEmacs.css +324 -0
  129. data/guides/assets/stylesheets/syntaxhighlighter/shCoreFadeToGrey.css +328 -0
  130. data/guides/assets/stylesheets/syntaxhighlighter/shCoreMDUltra.css +324 -0
  131. data/guides/assets/stylesheets/syntaxhighlighter/shCoreMidnight.css +324 -0
  132. data/guides/assets/stylesheets/syntaxhighlighter/shCoreRDark.css +324 -0
  133. data/guides/assets/stylesheets/syntaxhighlighter/shThemeDefault.css +117 -0
  134. data/guides/assets/stylesheets/syntaxhighlighter/shThemeDjango.css +120 -0
  135. data/guides/assets/stylesheets/syntaxhighlighter/shThemeEclipse.css +128 -0
  136. data/guides/assets/stylesheets/syntaxhighlighter/shThemeEmacs.css +113 -0
  137. data/guides/assets/stylesheets/syntaxhighlighter/shThemeFadeToGrey.css +117 -0
  138. data/guides/assets/stylesheets/syntaxhighlighter/shThemeJaxGuides.css +116 -0
  139. data/guides/assets/stylesheets/syntaxhighlighter/shThemeMDUltra.css +113 -0
  140. data/guides/assets/stylesheets/syntaxhighlighter/shThemeMidnight.css +113 -0
  141. data/guides/assets/stylesheets/syntaxhighlighter/shThemeRDark.css +113 -0
  142. data/guides/jax_guides.rb +41 -0
  143. data/guides/jax_guides/common.rb +7 -0
  144. data/guides/jax_guides/generator.rb +287 -0
  145. data/guides/jax_guides/helpers.rb +29 -0
  146. data/guides/jax_guides/indexer.rb +69 -0
  147. data/guides/jax_guides/levenshtein.rb +31 -0
  148. data/guides/jax_guides/textile_extensions.rb +61 -0
  149. data/guides/source/getting_started.textile +1171 -0
  150. data/guides/source/index.html.erb +50 -0
  151. data/guides/source/layout.html.erb +158 -0
  152. data/guides/source/lighting.textile +5 -0
  153. data/guides/source/materials.textile +5 -0
  154. data/guides/source/shaders.textile +5 -0
  155. data/guides/source/testing.textile +5 -0
  156. data/guides/w3c_validator.rb +91 -0
  157. data/jax.gems +1 -0
  158. data/jax.gemspec +40 -0
  159. data/lib/jax.rb +28 -0
  160. data/lib/jax/application.rb +92 -0
  161. data/lib/jax/application/configuration.rb +27 -0
  162. data/lib/jax/generators/app.rb +17 -0
  163. data/lib/jax/generators/app/app_generator.rb +78 -0
  164. data/lib/jax/generators/app/templates/Gemfile.tt +3 -0
  165. data/lib/jax/generators/app/templates/Rakefile +6 -0
  166. data/lib/jax/generators/app/templates/app/controllers/application_controller.js.tt +5 -0
  167. data/lib/jax/generators/app/templates/app/helpers/application_helper.js.tt +3 -0
  168. data/lib/jax/generators/app/templates/app/models/.empty_directory +0 -0
  169. data/lib/jax/generators/app/templates/app/resources/.empty_directory +0 -0
  170. data/lib/jax/generators/app/templates/app/views/.empty_directory +0 -0
  171. data/lib/jax/generators/app/templates/config/application.rb.tt +6 -0
  172. data/lib/jax/generators/app/templates/config/boot.rb +13 -0
  173. data/lib/jax/generators/app/templates/config/routes.rb.tt +5 -0
  174. data/lib/jax/generators/app/templates/public/javascripts/jax.js +7561 -0
  175. data/lib/jax/generators/app/templates/public/webgl_not_supported.html +26 -0
  176. data/lib/jax/generators/app/templates/script/jax +7 -0
  177. data/lib/jax/generators/app/templates/spec/javascripts/controllers/application_controller_spec.js +11 -0
  178. data/lib/jax/generators/app/templates/spec/javascripts/helpers/application_helper_spec.js +12 -0
  179. data/lib/jax/generators/app/templates/spec/javascripts/support/jasmine.yml +90 -0
  180. data/lib/jax/generators/app/templates/spec/javascripts/support/jasmine_config.rb +23 -0
  181. data/lib/jax/generators/app/templates/spec/javascripts/support/jasmine_runner.rb +32 -0
  182. data/lib/jax/generators/app/templates/spec/javascripts/support/spec_helpers/jax_spec_helper.js +216 -0
  183. data/lib/jax/generators/app/templates/spec/javascripts/support/spec_layout.html.erb +63 -0
  184. data/lib/jax/generators/commands.rb +81 -0
  185. data/lib/jax/generators/controller/USAGE +9 -0
  186. data/lib/jax/generators/controller/controller_generator.rb +59 -0
  187. data/lib/jax/generators/controller/templates/controller_source.js.tt +16 -0
  188. data/lib/jax/generators/controller/templates/controller_test.js.tt +11 -0
  189. data/lib/jax/generators/controller/templates/helper.js.tt +3 -0
  190. data/lib/jax/generators/controller/templates/helper_test.js.tt +12 -0
  191. data/lib/jax/generators/controller/templates/view.js.tt +4 -0
  192. data/lib/jax/generators/light_source/USAGE +14 -0
  193. data/lib/jax/generators/light_source/light_source_generator.rb +47 -0
  194. data/lib/jax/generators/light_source/templates/light.yml.tt +39 -0
  195. data/lib/jax/generators/material/USAGE +29 -0
  196. data/lib/jax/generators/material/material_generator.rb +81 -0
  197. data/lib/jax/generators/material/templates/append.yml.tt +7 -0
  198. data/lib/jax/generators/material/templates/material.yml.tt +33 -0
  199. data/lib/jax/generators/model/USAGE +5 -0
  200. data/lib/jax/generators/model/model_generator.rb +42 -0
  201. data/lib/jax/generators/model/templates/model.js.tt +11 -0
  202. data/lib/jax/generators/model/templates/test.js.tt +11 -0
  203. data/lib/jax/generators/script_jax_loader.rb +32 -0
  204. data/lib/jax/monkeypatch/jasmine.rb +3 -0
  205. data/lib/jax/monkeypatch/jasmine/config.rb +21 -0
  206. data/lib/jax/monkeypatch/jasmine/server.rb +50 -0
  207. data/lib/jax/packager.rb +58 -0
  208. data/lib/jax/packager/sprockets_template.rb +49 -0
  209. data/lib/jax/resource_compiler.rb +50 -0
  210. data/lib/jax/routes.rb +61 -0
  211. data/lib/jax/shader.rb +158 -0
  212. data/lib/jax/tasks/rake.rb +34 -0
  213. data/lib/jax/version.rb +12 -0
  214. data/public/images/brickwall.jpg +0 -0
  215. data/public/images/jacks.jpg +0 -0
  216. data/public/images/normal_map.jpg +0 -0
  217. data/public/images/rock.png +0 -0
  218. data/public/images/rockNormal.png +0 -0
  219. data/public/images/rss.png +0 -0
  220. data/public/webgl_not_supported.html +26 -0
  221. data/spec/example_app/Gemfile +1 -0
  222. data/spec/example_app/Rakefile +15 -0
  223. data/spec/example_app/app/controllers/application_controller.js +5 -0
  224. data/spec/example_app/app/controllers/courthouse_controller.js +24 -0
  225. data/spec/example_app/app/controllers/lighting_controller.js +69 -0
  226. data/spec/example_app/app/controllers/shadows_controller.js +130 -0
  227. data/spec/example_app/app/controllers/textures_controller.js +52 -0
  228. data/spec/example_app/app/helpers/application_helper.js +3 -0
  229. data/spec/example_app/app/helpers/textures_helper.js +3 -0
  230. data/spec/example_app/app/models/character.js +23 -0
  231. data/spec/example_app/app/models/door.js +10 -0
  232. data/spec/example_app/app/models/scene.js +19 -0
  233. data/spec/example_app/app/resources/characters/judge.yml +3 -0
  234. data/spec/example_app/app/resources/doors/courthouse_door.yml +5 -0
  235. data/spec/example_app/app/resources/light_sources/directional_light.yml +13 -0
  236. data/spec/example_app/app/resources/light_sources/point_light.yml +31 -0
  237. data/spec/example_app/app/resources/light_sources/spot_light.yml +15 -0
  238. data/spec/example_app/app/resources/light_sources/sun.yml +7 -0
  239. data/spec/example_app/app/resources/light_sources/textures_point.yml +34 -0
  240. data/spec/example_app/app/resources/materials/bricks.yml +36 -0
  241. data/spec/example_app/app/resources/materials/lighting_with_shadows.yml +27 -0
  242. data/spec/example_app/app/resources/scenes/courthouse.yml +4 -0
  243. data/spec/example_app/app/views/courthouse/index.js +4 -0
  244. data/spec/example_app/app/views/lighting/index.js +4 -0
  245. data/spec/example_app/app/views/shadows/index.js +6 -0
  246. data/spec/example_app/app/views/textures/index.js +4 -0
  247. data/spec/example_app/config/application.rb +6 -0
  248. data/spec/example_app/config/boot.rb +13 -0
  249. data/spec/example_app/config/routes.rb +6 -0
  250. data/spec/example_app/public/images/185__normalmap.png +0 -0
  251. data/spec/example_app/public/images/face_norm.jpg +0 -0
  252. data/spec/example_app/public/images/rock.png +0 -0
  253. data/spec/example_app/public/images/rockNormal.png +0 -0
  254. data/spec/example_app/public/images/rss.png +0 -0
  255. data/spec/example_app/public/webgl_not_supported.html +26 -0
  256. data/spec/example_app/script/jax +7 -0
  257. data/spec/example_app/spec/javascripts/controllers/textures_controller_spec.js +11 -0
  258. data/spec/example_app/spec/javascripts/helpers/application_helper_spec.js +12 -0
  259. data/spec/example_app/spec/javascripts/resources/directional_light_spec.js +16 -0
  260. data/spec/example_app/spec/javascripts/resources/point_light_spec.js +17 -0
  261. data/spec/example_app/spec/javascripts/resources/spot_light_spec.js +18 -0
  262. data/spec/example_app/spec/javascripts/support/jasmine.yml +89 -0
  263. data/spec/example_app/spec/javascripts/support/jasmine_runner.rb +32 -0
  264. data/spec/example_app/spec/javascripts/support/spec_helpers/jax_spec_helper.js +93 -0
  265. data/spec/example_app/spec/javascripts/support/spec_layout.html.erb +84 -0
  266. data/spec/generators/app_generator_spec.rb +46 -0
  267. data/spec/generators/controller_generator_spec.rb +68 -0
  268. data/spec/generators/light_generator_spec.rb +51 -0
  269. data/spec/generators/material_generator_spec.rb +35 -0
  270. data/spec/generators/model_generator_spec.rb +43 -0
  271. data/spec/javascripts/Player.js +58 -0
  272. data/spec/javascripts/helpers/SpecHelper.js +216 -0
  273. data/spec/javascripts/jax/builtin/materials/core_materials_spec.js +41 -0
  274. data/spec/javascripts/jax/builtin/materials/dual_paraboloid_spec.js +37 -0
  275. data/spec/javascripts/jax/builtin/materials/fog_spec.js +19 -0
  276. data/spec/javascripts/jax/builtin/materials/lighting_spec.js +19 -0
  277. data/spec/javascripts/jax/builtin/materials/normal_map_spec.js +19 -0
  278. data/spec/javascripts/jax/builtin/materials/shadow_map_spec.js +19 -0
  279. data/spec/javascripts/jax/builtin/materials/texture_spec.js +19 -0
  280. data/spec/javascripts/jax/builtin/meshes/cube_spec.js +10 -0
  281. data/spec/javascripts/jax/builtin/meshes/plane_spec.js +8 -0
  282. data/spec/javascripts/jax/builtin/meshes/quad_spec.js +8 -0
  283. data/spec/javascripts/jax/builtin/meshes/sphere_spec.js +8 -0
  284. data/spec/javascripts/jax/builtin/meshes/teapot_spec.js +8 -0
  285. data/spec/javascripts/jax/builtin/meshes/torus_spec.js +8 -0
  286. data/spec/javascripts/jax/compatibility_spec.js +50 -0
  287. data/spec/javascripts/jax/context_spec.js +82 -0
  288. data/spec/javascripts/jax/controller_spec.js +145 -0
  289. data/spec/javascripts/jax/core/delegation_spec.js +48 -0
  290. data/spec/javascripts/jax/core/events_spec.js +17 -0
  291. data/spec/javascripts/jax/core/matrix_stack_spec.js +28 -0
  292. data/spec/javascripts/jax/core/utils_spec.js +256 -0
  293. data/spec/javascripts/jax/helper_spec.js +33 -0
  294. data/spec/javascripts/jax/model_spec.js +87 -0
  295. data/spec/javascripts/jax/optimizations/material_limitations_spec.js +87 -0
  296. data/spec/javascripts/jax/optimizations/shaders/basic_spec.js +68 -0
  297. data/spec/javascripts/jax/prototype/extensions_spec.js +34 -0
  298. data/spec/javascripts/jax/route_set_spec.js +67 -0
  299. data/spec/javascripts/jax/view_manager_spec.js +17 -0
  300. data/spec/javascripts/jax/webgl/camera_spec.js +159 -0
  301. data/spec/javascripts/jax/webgl/framebuffer_spec.js +46 -0
  302. data/spec/javascripts/jax/webgl/lighting_spec.js +61 -0
  303. data/spec/javascripts/jax/webgl/material_spec.js +118 -0
  304. data/spec/javascripts/jax/webgl/mesh_spec.js +86 -0
  305. data/spec/javascripts/jax/webgl/shader/manifest_spec.js +60 -0
  306. data/spec/javascripts/jax/webgl/shader_chain_spec.js +192 -0
  307. data/spec/javascripts/jax/webgl/shader_spec.js +276 -0
  308. data/spec/javascripts/jax/webgl/tangent_space_spec.js +142 -0
  309. data/spec/javascripts/jax/webgl/texture_spec.js +162 -0
  310. data/spec/javascripts/jax/webgl_spec.js +5 -0
  311. data/spec/javascripts/jax/world_spec.js +88 -0
  312. data/spec/javascripts/jax_spec.js +27 -0
  313. data/spec/javascripts/support/jasmine.yml +85 -0
  314. data/spec/javascripts/support/jasmine_runner.rb +32 -0
  315. data/spec/lib/jax/routes_spec.rb +24 -0
  316. data/spec/lib/jax/shader_spec.rb +57 -0
  317. data/spec/lib/jax/tasks/jax_rake_spec.rb +79 -0
  318. data/spec/spec_helper.rb +11 -0
  319. data/spec/support/file_exist_matcher.rb +23 -0
  320. data/spec/support/spec_shell.rb +97 -0
  321. data/src/jax.js +84 -0
  322. data/src/jax/anim_frame.js +47 -0
  323. data/src/jax/builtin/all.js +7 -0
  324. data/src/jax/builtin/meshes/cube.js +62 -0
  325. data/src/jax/builtin/meshes/plane.js +36 -0
  326. data/src/jax/builtin/meshes/quad.js +80 -0
  327. data/src/jax/builtin/meshes/sphere.js +46 -0
  328. data/src/jax/builtin/meshes/teapot.js +38 -0
  329. data/src/jax/builtin/meshes/torus.js +46 -0
  330. data/src/jax/compatibility.js +140 -0
  331. data/src/jax/context.js +253 -0
  332. data/src/jax/controller.js +157 -0
  333. data/src/jax/core.js +39 -0
  334. data/src/jax/core/math.js +40 -0
  335. data/src/jax/core/matrix_stack.js +306 -0
  336. data/src/jax/core/util.js +226 -0
  337. data/src/jax/events.js +179 -0
  338. data/src/jax/geometry.js +3 -0
  339. data/src/jax/geometry/plane.js +59 -0
  340. data/src/jax/helper.js +8 -0
  341. data/src/jax/model.js +163 -0
  342. data/src/jax/prototype/class.js +78 -0
  343. data/src/jax/prototype/core.js +112 -0
  344. data/src/jax/prototype/extensions.js +124 -0
  345. data/src/jax/route_set.js +125 -0
  346. data/src/jax/vendor/ejs.js +4 -0
  347. data/src/jax/vendor/glMatrix.js +3 -0
  348. data/src/jax/view.js +37 -0
  349. data/src/jax/view_manager.js +46 -0
  350. data/src/jax/webgl.js +98 -0
  351. data/src/jax/webgl/camera.js +526 -0
  352. data/src/jax/webgl/core.js +6 -0
  353. data/src/jax/webgl/core/buffer.js +161 -0
  354. data/src/jax/webgl/core/edge.js +6 -0
  355. data/src/jax/webgl/core/events.js +25 -0
  356. data/src/jax/webgl/core/face.js +8 -0
  357. data/src/jax/webgl/core/framebuffer.js +206 -0
  358. data/src/jax/webgl/material.js +375 -0
  359. data/src/jax/webgl/mesh.js +412 -0
  360. data/src/jax/webgl/scene.js +11 -0
  361. data/src/jax/webgl/scene/frustum.js +260 -0
  362. data/src/jax/webgl/scene/light_manager.js +112 -0
  363. data/src/jax/webgl/scene/light_source.js +248 -0
  364. data/src/jax/webgl/shader.js +282 -0
  365. data/src/jax/webgl/shader/delegator.js +13 -0
  366. data/src/jax/webgl/shader/delegator/attribute.js +53 -0
  367. data/src/jax/webgl/shader/delegator/uniform.js +71 -0
  368. data/src/jax/webgl/shader/manifest.js +64 -0
  369. data/src/jax/webgl/shader/program.js +140 -0
  370. data/src/jax/webgl/shader_chain.js +256 -0
  371. data/src/jax/webgl/texture.js +312 -0
  372. data/src/jax/webgl/world.js +119 -0
  373. data/vendor/ejs/.svn/all-wcprops +17 -0
  374. data/vendor/ejs/.svn/entries +114 -0
  375. data/vendor/ejs/.svn/text-base/Eratta.txt.svn-base +3 -0
  376. data/vendor/ejs/.svn/text-base/license.txt.svn-base +21 -0
  377. data/vendor/ejs/Eratta.txt +3 -0
  378. data/vendor/ejs/example/.svn/all-wcprops +29 -0
  379. data/vendor/ejs/example/.svn/entries +164 -0
  380. data/vendor/ejs/example/.svn/prop-base/ejs.gif.svn-base +5 -0
  381. data/vendor/ejs/example/.svn/text-base/demo.html.svn-base +54 -0
  382. data/vendor/ejs/example/.svn/text-base/ejs.gif.svn-base +0 -0
  383. data/vendor/ejs/example/.svn/text-base/example.css.svn-base +31 -0
  384. data/vendor/ejs/example/.svn/text-base/example.js.svn-base +88 -0
  385. data/vendor/ejs/example/demo.html +54 -0
  386. data/vendor/ejs/example/ejs.gif +0 -0
  387. data/vendor/ejs/example/example.css +31 -0
  388. data/vendor/ejs/example/example.js +88 -0
  389. data/vendor/ejs/lib/.svn/all-wcprops +11 -0
  390. data/vendor/ejs/lib/.svn/entries +62 -0
  391. data/vendor/ejs/lib/.svn/text-base/ejs_fulljslint.js.svn-base +3774 -0
  392. data/vendor/ejs/lib/ejs_fulljslint.js +3774 -0
  393. data/vendor/ejs/license.txt +21 -0
  394. data/vendor/ejs/script/.svn/all-wcprops +17 -0
  395. data/vendor/ejs/script/.svn/entries +96 -0
  396. data/vendor/ejs/script/.svn/prop-base/yuicompressor-2.2.4.jar.svn-base +5 -0
  397. data/vendor/ejs/script/.svn/text-base/production.bat.svn-base +4 -0
  398. data/vendor/ejs/script/.svn/text-base/yuicompressor-2.2.4.jar.svn-base +0 -0
  399. data/vendor/ejs/script/production.bat +4 -0
  400. data/vendor/ejs/script/yuicompressor-2.2.4.jar +0 -0
  401. data/vendor/ejs/src/.svn/all-wcprops +17 -0
  402. data/vendor/ejs/src/.svn/entries +96 -0
  403. data/vendor/ejs/src/.svn/text-base/ejs.js.svn-base +505 -0
  404. data/vendor/ejs/src/.svn/text-base/view.js.svn-base +200 -0
  405. data/vendor/ejs/src/ejs.js +505 -0
  406. data/vendor/ejs/src/view.js +200 -0
  407. data/vendor/ejs/test/.svn/all-wcprops +23 -0
  408. data/vendor/ejs/test/.svn/entries +139 -0
  409. data/vendor/ejs/test/.svn/text-base/index.html.svn-base +18 -0
  410. data/vendor/ejs/test/.svn/text-base/setup_test.html.svn-base +44 -0
  411. data/vendor/ejs/test/.svn/text-base/sidebar.html.svn-base +28 -0
  412. data/vendor/ejs/test/included/.svn/all-wcprops +23 -0
  413. data/vendor/ejs/test/included/.svn/entries +130 -0
  414. data/vendor/ejs/test/included/.svn/text-base/prototype.js.svn-base +4184 -0
  415. data/vendor/ejs/test/included/.svn/text-base/test.css.svn-base +44 -0
  416. data/vendor/ejs/test/included/.svn/text-base/unittest.js.svn-base +564 -0
  417. data/vendor/ejs/test/included/prototype.js +4184 -0
  418. data/vendor/ejs/test/included/test.css +44 -0
  419. data/vendor/ejs/test/included/unittest.js +564 -0
  420. data/vendor/ejs/test/index.html +18 -0
  421. data/vendor/ejs/test/setup_test.html +44 -0
  422. data/vendor/ejs/test/sidebar.html +28 -0
  423. data/vendor/ejs/test/templates/.svn/all-wcprops +11 -0
  424. data/vendor/ejs/test/templates/.svn/entries +62 -0
  425. data/vendor/ejs/test/templates/.svn/text-base/test.ejs.svn-base +3 -0
  426. data/vendor/ejs/test/templates/test.ejs +3 -0
  427. data/vendor/ejs/test/tests/.svn/all-wcprops +23 -0
  428. data/vendor/ejs/test/tests/.svn/entries +130 -0
  429. data/vendor/ejs/test/tests/.svn/text-base/rendering.js.svn-base +94 -0
  430. data/vendor/ejs/test/tests/.svn/text-base/templating.js.svn-base +43 -0
  431. data/vendor/ejs/test/tests/.svn/text-base/views.js.svn-base +100 -0
  432. data/vendor/ejs/test/tests/rendering.js +94 -0
  433. data/vendor/ejs/test/tests/templating.js +43 -0
  434. data/vendor/ejs/test/tests/views.js +100 -0
  435. data/vendor/glmatrix/benchmark/js/CanvasMatrix.js +722 -0
  436. data/vendor/glmatrix/benchmark/js/EWGL_math.js +742 -0
  437. data/vendor/glmatrix/benchmark/js/mjs.js +1230 -0
  438. data/vendor/glmatrix/benchmark/matrix_benchmark.html +419 -0
  439. data/vendor/glmatrix/glMatrix-min.js +32 -0
  440. data/vendor/glmatrix/glMatrix.js +1815 -0
  441. data/vendor/glmatrix/unit tests/glMatrix-test.js +74 -0
  442. data/vendor/glmatrix/unit tests/qunit.css +119 -0
  443. data/vendor/glmatrix/unit tests/qunit.js +1069 -0
  444. data/vendor/glmatrix/unit tests/test_glMatrix.html +21 -0
  445. data/vendor/yuicompressor-2.4.2.jar +0 -0
  446. metadata +748 -0
@@ -0,0 +1,34 @@
1
+ require 'rake'
2
+ require 'jasmine'
3
+ require File.expand_path('../monkeypatch/jasmine', File.dirname(__FILE__))
4
+
5
+ include FileUtils
6
+
7
+ namespace :jax do
8
+ desc "Generate a standalone Web app"
9
+ task :package do
10
+ Jax::Packager.invoke
11
+ end
12
+
13
+ desc "Upgrade the Jax javascript libraries to the latest version"
14
+ task :update do
15
+ FileUtils.cp File.join(File.dirname(__FILE__), "../../../lib/jax/generators/app/templates/public/javascripts/jax.js"),
16
+ File.join(Jax.root, 'public/javascripts/jax.js')
17
+ puts "Jax updated at public/javascripts/jax.js !"
18
+ end
19
+
20
+ task :generate_files do
21
+ # resources
22
+ Jax::ResourceCompiler.new.save(Jax.root.join 'tmp/resources.js')
23
+
24
+ # routes
25
+ File.open("tmp/shaders.js", "w") { |file| Jax.application.shaders.each { |shader| shader.save_to file } }
26
+ Jax.application.config.routes.reload!
27
+ File.open(Jax.root.join("tmp/routes.js"), 'w') do |f|
28
+ Jax.application.config.routes.compile(f)
29
+ end
30
+ end
31
+ end
32
+
33
+ # make jasmine call gather_resources first, so that resources can be tested
34
+ task :jasmine => 'jax:generate_files'
@@ -0,0 +1,12 @@
1
+ module Jax
2
+ module Version
3
+ MAJOR = 0
4
+ MINOR = 0
5
+ TINY = 0
6
+ PATCH = 1
7
+
8
+ STRING = PATCH == 0 ? "#{MAJOR}.#{MINOR}.#{TINY}" : "#{MAJOR}.#{MINOR}.#{TINY}.#{PATCH}"
9
+ end
10
+
11
+ VERSION = Version::STRING
12
+ end
Binary file
Binary file
Binary file
@@ -0,0 +1,26 @@
1
+ <html>
2
+ <head>
3
+ <title>WebGL is not supported!</title>
4
+ </head>
5
+ <body>
6
+ <h1>Uh-oh!</h1>
7
+
8
+ <p>
9
+ Unfortunately, WebGL appears to be unavailable! Please verify that you have the latest release of a WebGL-compatible
10
+ browser such as <a href="http://www.firefox.com">FireFox 4.0</a> or <a href="http://chrome.google.com">Chrome 11</a>.
11
+ </p>
12
+
13
+ <p>
14
+ If you are certain you already have a WebGL-compatible browser, please verify that WebGL is enabled and supported
15
+ by your system. You could also try upgrading to your graphics drivers to the latest version.
16
+ </p>
17
+
18
+ <h2>Your Browser Information</h2>
19
+
20
+ <script type="text/javascript">
21
+ var fields = ['appCodeName', 'appName', 'appVersion', 'cookieEnabled', 'platform', 'userAgent'];
22
+ for (var i = 0; i < fields.length; i++)
23
+ document.writeln("<p>"+fields[i]+": "+navigator[fields[i]]+"</p>");
24
+ </script>
25
+ </body>
26
+ </html>
@@ -0,0 +1 @@
1
+ gem 'jax', :path => File.expand_path("../../../", __FILE__)
@@ -0,0 +1,15 @@
1
+ require File.expand_path('../config/application', __FILE__)
2
+ require 'jax/tasks/rake'
3
+
4
+ require 'jasmine'
5
+
6
+ module Jasmine
7
+ class Config
8
+ alias _start_server start_server
9
+ def start_server(port = 8889)
10
+ _start_server(8889)
11
+ end
12
+ end
13
+ end
14
+
15
+ load 'jasmine/tasks/jasmine.rake'
@@ -0,0 +1,5 @@
1
+ var ApplicationController = (function() {
2
+ return Jax.Controller.create("application", Jax.Controller, {
3
+
4
+ });
5
+ })();
@@ -0,0 +1,24 @@
1
+ //= require "application_controller"
2
+
3
+ var CourthouseController = (function() {
4
+ return Jax.Controller.create("courthouse", ApplicationController, {
5
+ /* 'index' action. Sets up the scene. 'index' is called by default when first
6
+ switching to this controller, unless another action name is given.
7
+ */
8
+ index: function() {
9
+ this.world.addLightSource(LightSource.find('sun'));
10
+ this.world.addObject(Scene.find('courthouse'));
11
+ this.world.addObject(Character.find('judge'));
12
+ },
13
+
14
+ /* Some special actions are fired whenever the corresponding input is
15
+ received from the user.
16
+ */
17
+ mouse_clicked: function(event) {
18
+ if (event.target.isKindOf(Door)) {
19
+ /* user clicks on the door, so they need to go to the next scene */
20
+ this.redirectTo(event.target.destination);
21
+ }
22
+ }
23
+ });
24
+ })();
@@ -0,0 +1,69 @@
1
+ //= require "application_controller"
2
+
3
+ /*
4
+ Example of blinn-phong shading with arbitrary light sources. Renders a teapot with 3 light sources:
5
+ red, blue and white. The white light source is a spotlight and will pivot back and forth over a 90-degree angle
6
+ with the teapot in the center. The mouse can be moved to move the camera, or dragged to move the teapot.
7
+ */
8
+
9
+ var LightingController = (function() {
10
+ return Jax.Controller.create("lighting", ApplicationController, {
11
+ index: function() {
12
+ // build a new material, since the default one isn't quite to our liking for this demo
13
+ // all unspecified options will simply inherit the default ones.
14
+ var custom_material = Jax.Material.find("lighting_with_shadows");
15
+ // var custom_material = new Jax.Material({shininess:128,ambient:[0.05,0.05,0.05,1]});
16
+ // custom_material.addLayer(new Jax.Material.ShadowMap());
17
+
18
+ // add a Teapot
19
+ this.world.addObject(new Jax.Model({ mesh: new Jax.Mesh.Teapot({size:10, material:custom_material}),position:[0,0,-25] }));
20
+ this.world.addObject(new Jax.Model({ mesh: new Jax.Mesh.Plane({size:75, material:custom_material}), position:[0,-15,-50],direction:[0,1,0]}));
21
+
22
+ // add a spotlight, like a flashlight -- we'll animate this later
23
+ this.world.addLightSource(Jax.Scene.LightSource.find("spot_light"));
24
+ this.world.addObject(new Jax.Model({mesh:new Jax.Mesh.Sphere({color:[0.5,0.5,0.5,1]}), shadow_caster: false, lit:false, position:[0,0,30]}));
25
+
26
+ // add a point light, like a candle
27
+ var point_light = Jax.Scene.LightSource.find("point_light");
28
+ this.world.addLightSource(point_light);
29
+ this.world.addObject(new Jax.Model({mesh:new Jax.Mesh.Sphere({color:[0.5,0,0,1]}), shadow_caster: false, lit:false, position:point_light.getPosition()}));
30
+
31
+ // add a directional light, like the sun
32
+ this.world.addLightSource(Jax.Scene.LightSource.find("directional_light"));
33
+
34
+ // position the player backwards 20 units, to [0,0,20].
35
+ this.player.camera.setPosition(0,15,50);
36
+ this.player.camera.lookAt([0,0,0],[0,1,0]);
37
+ },
38
+
39
+ /* this updater will take care of pivoting the spotlight horizontally over time. */
40
+ update: function(timechange) {
41
+ var spotlight = this.context.world.lighting.getLight(0);
42
+ var speed = Math.PI/4; // pivot at a speed of 45 degrees per second
43
+ var rotation_direction = this.rotation_per_second || speed;
44
+
45
+ // see if it's time to reverse direction. A camera's view vector has magnitude 1. Remember your
46
+ // unit circles? When magnitude is 1, X is cos. The cos of 45 degrees is sqrt(2)/2. So to pivot every
47
+ // 45 degrees off from the focal point (for a total of 90 degrees difference), we'll check X <=> sqrt(2)/2.
48
+ var view = spotlight.camera.getViewVector();
49
+ if (view[0] > Math.sqrt(2)/2) this.rotation_per_second = speed;
50
+ else if (view[0] < -Math.sqrt(2)/2) this.rotation_per_second = -speed;
51
+
52
+ // rotate the spotlight. Just like any other object, a light has its own camera, so it's trivial to orient
53
+ // it within the scene. Rotating about the Y axis causes a horizontal movement.
54
+ spotlight.camera.rotate(rotation_direction*timechange, 0, 1, 0);
55
+ },
56
+
57
+ /* moving the mouse will pan the camera */
58
+ mouse_moved: function(event) {
59
+ var camera = this.context.player.camera;
60
+ camera.move(0.175, [this.context.mouse.diffx, 0, -this.context.mouse.diffy]);
61
+ },
62
+
63
+ /* dragging the mouse will pan the object */
64
+ mouse_dragged: function(event) {
65
+ var camera = this.world.getObject(0).camera;
66
+ camera.move(0.175, [this.context.mouse.diffx, 0, -this.context.mouse.diffy]);
67
+ }
68
+ });
69
+ })();
@@ -0,0 +1,130 @@
1
+ //= require "application_controller"
2
+
3
+ /*
4
+ Example of shadows cast using phong shading and point, directional and spot lights.
5
+ A single light exists and its type can be toggled by clicking on the canvas. The light
6
+ will constantly be changing direction, though this should be unnoticeable for the
7
+ point light, which always emits in all directions.
8
+
9
+ WORK IN PROGRESS
10
+ */
11
+
12
+ var ShadowsController = (function() {
13
+ return Jax.Controller.create("shadows", ApplicationController, {
14
+ index: function() {
15
+ /* light sources */
16
+ var light01 = new Jax.Scene.LightSource({
17
+ enabled:true,
18
+ type: Jax.POINT_LIGHT,
19
+ angle: 20.0,
20
+ position: [0,150,150],
21
+ direction: [-1,-1,-1],
22
+ color: {
23
+ ambient: [0,0,0,1],
24
+ diffuse: [1,1,1,1],
25
+ specular: [1,1,1,1]
26
+ },
27
+ attenuation: {
28
+ constant: 0,
29
+ linear: 0.01,
30
+ quadratic: 0.00001
31
+ }
32
+ });
33
+
34
+ this.world.addLightSource(light01);
35
+
36
+ /* materials */
37
+ var floor_mat = new Jax.Material({
38
+ shaderType: "blinn-phong",
39
+ shininess: 60,
40
+ ambient: [0.1,0.1,0.1,1],
41
+ diffuse: [0.4,0.9,0.4,1],
42
+ specular: [0.4,0.4,0.4,1]
43
+ });
44
+ floor_mat.addLayer(new Jax.Material.Lighting());
45
+ floor_mat.addLayer(new Jax.Material.ShadowMap());
46
+
47
+ var torus_mat = new Jax.Material({
48
+ shaderType: "blinn-phong",
49
+ shininess: 60,
50
+ ambient: [0.1,0.1,0.1,1],
51
+ diffuse: [0.9,0.3,0.3,1],
52
+ specular:[0.6,0.6,0.6,1]
53
+ });
54
+ torus_mat.addLayer(new Jax.Material.Lighting());
55
+ torus_mat.addLayer(new Jax.Material.ShadowMap());
56
+
57
+ var sphere_mat = new Jax.Material({
58
+ shaderType: "blinn-phong",
59
+ shininess: 60,
60
+ ambient: [0.1,0.1,0.1,1],
61
+ diffuse: [0.3,0.3,0.9,1],
62
+ specular:[0.4,0.4,0.4,1]
63
+ });
64
+ sphere_mat.addLayer(new Jax.Material.Lighting());
65
+ sphere_mat.addLayer(new Jax.Material.ShadowMap());
66
+
67
+ /* objects */
68
+ this.world.addObject(new Jax.Model({mesh: new Jax.Mesh.Plane({size:500,segments:20,material:floor_mat})}));
69
+
70
+ var torus = new Jax.Model({mesh:new Jax.Mesh.Torus({outer_radius:60,inner_radius:32,material:torus_mat})});
71
+ torus.camera.orient(0,-1,0, 0,0,1);
72
+ torus.camera.setPosition(-70,50,0);
73
+ this.world.addObject(torus);
74
+
75
+ var sphere = new Jax.Model({mesh: new Jax.Mesh.Sphere({radius:40,stacks:40,slices:40,material:sphere_mat})});
76
+ sphere.camera.setPosition(70, 40, 0);
77
+ this.world.addObject(sphere);
78
+
79
+ /* camera */
80
+ this.player.camera.setPosition(30, 500, 400);
81
+ this.player.camera.lookAt([0,0,0], [0,1,0]);
82
+ },
83
+
84
+ /*
85
+ TODO delegation
86
+ delegate getLight() into world.lighting
87
+ delegate model setPosition() and friends into model.camera
88
+ */
89
+
90
+ update: function(timechange) {
91
+ // let's rotate the light's camera
92
+ var light = this.world.lighting.getLight(0);
93
+ var rot = light.rotation || 0;
94
+ rot += Math.PI / 4 * timechange;
95
+ light.rotation = rot;
96
+ var length = vec3.length([0,75,75]);
97
+ light.camera.setPosition(Math.cos(rot)*length, 150, Math.sin(rot)*length);
98
+ light.camera.lookAt([0,0,0],[0,1,0]);
99
+ },
100
+
101
+ mouse_moved: function(event) {
102
+ var obj = this.context.world.lighting.getLight(0);
103
+ // obj.camera.setPosition(vec3.add(obj.camera.getPosition(), [this.context.mouse.diffx, 0, 0]));
104
+ // document.getElementById('jax_banner').innerHTML = (this.context.mouse.diffx+" "+this.context.mouse.diffy);
105
+ this.context.player.camera.rotate( this.context.mouse.diffy/50, 1, 0, 0);
106
+ this.context.player.camera.rotate(-this.context.mouse.diffx/50, 0, 1, 0);
107
+ },
108
+
109
+ mouse_clicked: function(event) {
110
+ // var lt = this.context.world.lighting.getLight(0);
111
+ // switch(lt.type) {
112
+ // case Jax.POINT_LIGHT:
113
+ // lt.type = Jax.SPOT_LIGHT;
114
+ // break;
115
+ // case Jax.SPOT_LIGHT:
116
+ // lt.type = Jax.DIRECTIONAL_LIGHT;
117
+ // break;
118
+ // case Jax.DIRECTIONAL_LIGHT:
119
+ // lt.type = Jax.POINT_LIGHT;
120
+ // break;
121
+ // default:
122
+ // alert("unexpected light type: "+lt.type);
123
+ // }
124
+ },
125
+
126
+ mouse_dragged: function(event) {
127
+ this.context.player.camera.move(0.25, [this.context.mouse.diffx, 0, -this.context.mouse.diffy]);
128
+ }
129
+ });
130
+ })();
@@ -0,0 +1,52 @@
1
+ //= require "application_controller"
2
+
3
+ var TexturesController = (function() {
4
+ var movement = { forward: 0, backward: 0, left: 0, right: 0 };
5
+
6
+ return Jax.Controller.create("textures", ApplicationController, {
7
+ index: function() {
8
+ var tex_mat = Jax.Material.find("bricks");
9
+
10
+ this.world.addLightSource(Jax.Scene.LightSource.find("textures_point"));
11
+ this.world.addObject(new Jax.Model({position:[0,0,-7.5],mesh: new Jax.Mesh.Quad({size:7.5,material:tex_mat})}));
12
+ },
13
+
14
+ key_pressed: function(event) {
15
+ switch(event.keyCode) {
16
+ case KeyEvent.DOM_VK_W: movement.forward = 1; break;
17
+ case KeyEvent.DOM_VK_S: movement.backward = -1; break;
18
+ case KeyEvent.DOM_VK_A: movement.left = -1; break;
19
+ case KeyEvent.DOM_VK_D: movement.right = 1; break;
20
+ }
21
+ },
22
+
23
+ key_released: function(event) {
24
+ switch(event.keyCode) {
25
+ case KeyEvent.DOM_VK_W: movement.forward = 0; break;
26
+ case KeyEvent.DOM_VK_S: movement.backward = 0; break;
27
+ case KeyEvent.DOM_VK_A: movement.left = 0; break;
28
+ case KeyEvent.DOM_VK_D: movement.right = 0; break;
29
+ }
30
+ },
31
+
32
+ mouse_moved: function(event) {
33
+ this.player.camera.rotate(0.01, [event.diffy, -event.diffx, 0]);
34
+ this.player.camera.orient(this.player.camera.getViewVector(), [0,1,0]);
35
+ },
36
+
37
+ mouse_dragged: function(event) {
38
+ var camera = this.world.getObject(0).camera;
39
+ camera.rotate(0.0375, [this.context.mouse.diffy, 0, -this.context.mouse.diffx]);
40
+ },
41
+
42
+ update: function(tc) {
43
+ var speed = 1.5 * tc;
44
+ this.player.camera.move((movement.forward + movement.backward) * speed);
45
+ this.player.camera.strafe((movement.left + movement.right) * speed);
46
+
47
+ var light = this.world.lighting.getLight(0).camera;
48
+ light.p = (light.p || 0) + tc;
49
+ light.setPosition(Math.cos(light.p)*2.5, Math.sin(light.p)*2.5, -6.0);
50
+ }
51
+ });
52
+ })();
@@ -0,0 +1,3 @@
1
+ var ApplicationHelper = Jax.Helper.create({
2
+
3
+ });
@@ -0,0 +1,3 @@
1
+ var TexturesHelper = Jax.Helper.create({
2
+
3
+ });
@@ -0,0 +1,23 @@
1
+ /**
2
+ * class Character < Jax.Model
3
+ *
4
+ */
5
+ var Character = (function() {
6
+ return Jax.Model.create({
7
+ after_initialize: function() {
8
+ this.setPosition(0, 0, 0);
9
+ },
10
+
11
+ /* other Character-specific logic */
12
+ attack: function(target) {
13
+ target.takeDamage(this.damage);
14
+ },
15
+
16
+ takeDamage: function(amount) {
17
+ this.hit_points -= amount;
18
+ if (this.hit_points <= 0) {
19
+ throw new Error("Character "+this.name+" died!");
20
+ }
21
+ }
22
+ });
23
+ })();
@@ -0,0 +1,10 @@
1
+ /**
2
+ * class Door < Jax.Model
3
+ *
4
+ */
5
+ var Door = (function() {
6
+ return Jax.Model.create({
7
+ after_initialize: function() { }
8
+ });
9
+ })();
10
+
@@ -0,0 +1,19 @@
1
+ /**
2
+ * class Scene < Jax.Model
3
+ *
4
+ */
5
+ var Scene = (function() {
6
+ return Jax.Model.create({
7
+ after_initialize: function() {
8
+ /* if this.door exists, it's currently the ID of an actual Door instance. We want the instance itself. */
9
+ /* TODO add some belongs_to/has_many/has_one/etc relationships to handle finding instances automatically */
10
+ if (this.door)
11
+ this.door = Door.find(this.door);
12
+ },
13
+
14
+ after_added_to_world: function(world) {
15
+ if (this.door)
16
+ world.addObject(this.door);
17
+ }
18
+ });
19
+ })();