shattered 0.5.0.1 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (223) hide show
  1. data/History.txt +6 -0
  2. data/INSTALL.txt +5 -0
  3. data/License.txt +18 -0
  4. data/Manifest.txt +175 -0
  5. data/README.txt +39 -0
  6. data/Rakefile +6 -0
  7. data/app_generators/actor/USAGE +6 -0
  8. data/app_generators/actor/actor_generator.rb +51 -0
  9. data/app_generators/actor/templates/actor.rb +4 -0
  10. data/app_generators/actor/templates/spec.rb +11 -0
  11. data/app_generators/actor/templates/unit_test.rb +9 -0
  12. data/app_generators/commands/console.rb +6 -0
  13. data/{lib/rails_generator/generators/applications/shattered_app → app_generators/shattered}/USAGE +1 -1
  14. data/app_generators/shattered/shattered_generator.rb +67 -0
  15. data/{lib → app_generators/shattered}/templates/Rakefile +4 -4
  16. data/app_generators/shattered/templates/configs/game.controls +16 -0
  17. data/app_generators/shattered/templates/configs/ogre_plugins.linux.cfg +12 -0
  18. data/app_generators/shattered/templates/configs/ogre_plugins.osx.cfg +12 -0
  19. data/{lib → app_generators/shattered}/templates/configs/ogre_plugins.windows.cfg +2 -2
  20. data/app_generators/shattered/templates/game.rb +50 -0
  21. data/{lib → app_generators/shattered}/templates/media/basic.rmaterial +0 -0
  22. data/app_generators/shattered/templates/spec/game_spec.rb +5 -0
  23. data/app_generators/shattered/templates/spec/spec_helper.rb +12 -0
  24. data/bin/shattered +39 -0
  25. data/config/hoe.rb +77 -0
  26. data/config/requirements.rb +15 -0
  27. data/lib/shattered.rb +40 -0
  28. data/lib/shattered_game/actor.rb +6 -0
  29. data/lib/shattered_game/game.rb +285 -0
  30. data/lib/{tasks → shattered_game/rake_tasks}/framework.rake +19 -24
  31. data/lib/{tasks → shattered_game/rake_tasks}/log.rake +0 -0
  32. data/lib/{tasks → shattered_game/rake_tasks}/misc.rake +1 -2
  33. data/lib/{tasks → shattered_game/rake_tasks}/pre_namespace_aliases.rake +0 -0
  34. data/lib/{tasks → shattered_game/rake_tasks}/shattered.rb +0 -0
  35. data/lib/shattered_game/rake_tasks/spec.rake +9 -0
  36. data/lib/{tasks → shattered_game/rake_tasks}/statistics.rake +0 -0
  37. data/lib/shattered_game/required.rb +2 -0
  38. data/lib/shattered_game/version.rb +9 -0
  39. data/lib/shattered_model/controls.rb +67 -0
  40. data/lib/shattered_model/input.rb +171 -0
  41. data/lib/shattered_model/key_converter.rb +44 -0
  42. data/lib/shattered_model/required.rb +4 -0
  43. data/lib/shattered_model/shattered_model.rb +28 -0
  44. data/lib/shattered_model/timed_event.rb +120 -0
  45. data/lib/shattered_model/timer.rb +78 -0
  46. data/lib/shattered_support/core_ext.rb +1 -0
  47. data/lib/shattered_support/core_ext/class.rb +3 -0
  48. data/lib/shattered_support/core_ext/class/attribute_accessors.rb +44 -0
  49. data/lib/shattered_support/core_ext/class/inheritable_attributes.rb +115 -0
  50. data/lib/shattered_support/core_ext/class/removal.rb +24 -0
  51. data/lib/shattered_support/core_ext/dir.rb +5 -0
  52. data/lib/shattered_support/core_ext/dir/search.rb +25 -0
  53. data/lib/shattered_support/core_ext/file.rb +5 -0
  54. data/lib/shattered_support/core_ext/file/search.rb +64 -0
  55. data/lib/shattered_support/core_ext/numeric.rb +5 -0
  56. data/lib/shattered_support/core_ext/numeric/time.rb +72 -0
  57. data/lib/shattered_support/core_ext/string.rb +13 -0
  58. data/lib/shattered_support/core_ext/string/access.rb +58 -0
  59. data/lib/shattered_support/core_ext/string/conversions.rb +19 -0
  60. data/lib/shattered_support/core_ext/string/inflections.rb +64 -0
  61. data/lib/shattered_support/core_ext/string/iterators.rb +17 -0
  62. data/lib/shattered_support/core_ext/string/starts_ends_with.rb +20 -0
  63. data/lib/shattered_support/error.rb +12 -0
  64. data/lib/shattered_support/inflections.rb +53 -0
  65. data/lib/shattered_support/inflector.rb +178 -0
  66. data/lib/shattered_support/pre_initialize.rb +153 -0
  67. data/lib/shattered_support/required.rb +9 -0
  68. data/lib/shattered_support/unload.rb +18 -0
  69. data/lib/shattered_view/camera.rb +7 -0
  70. data/lib/shattered_view/ogrerb/base.rb +28 -0
  71. data/lib/shattered_view/ogrerb/camera.rb +14 -0
  72. data/lib/shattered_view/ogrerb/key_manager.rb +54 -0
  73. data/lib/shattered_view/ogrerb/light.rb +25 -0
  74. data/lib/shattered_view/ogrerb/material.rb +5 -0
  75. data/lib/shattered_view/ogrerb/mesh_instance.rb +85 -0
  76. data/lib/shattered_view/ogrerb/mouse_manager.rb +109 -0
  77. data/lib/shattered_view/ogrerb/particle_system.rb +24 -0
  78. data/lib/shattered_view/ogrerb/rgb.rb +6 -0
  79. data/lib/shattered_view/ogrerb/rmaterial.rb +87 -0
  80. data/lib/shattered_view/ogrerb/scene_node.rb +76 -0
  81. data/lib/shattered_view/ogrerb/vector.rb +243 -0
  82. data/lib/shattered_view/ogrerb/window_event.rb +14 -0
  83. data/lib/shattered_view/resources.rb +64 -0
  84. data/lib/shattered_view/shattered_view.rb +248 -0
  85. data/script/destroy +14 -0
  86. data/script/generate +14 -0
  87. data/setup.rb +1585 -0
  88. data/tasks/deployment.rake +30 -0
  89. data/tasks/environment.rake +7 -0
  90. data/tasks/rcov.rake +7 -0
  91. data/tasks/testing.rake +46 -0
  92. data/tasks/website.rake +15 -0
  93. data/test/acceptance/Rakefile +10 -0
  94. data/test/acceptance/config/game.controls +17 -0
  95. data/test/acceptance/config/ogre_plugins.linux.cfg +12 -0
  96. data/test/acceptance/config/ogre_plugins.osx.cfg +12 -0
  97. data/test/acceptance/config/ogre_plugins.windows.cfg +14 -0
  98. data/test/acceptance/config/ogrerb_defaults.save +8 -0
  99. data/test/acceptance/game.rb +120 -0
  100. data/test/acceptance/lib/acceptance_test.rb +20 -0
  101. data/test/acceptance/lib/console.rb +54 -0
  102. data/test/acceptance/lib/input_test.rb +8 -0
  103. data/test/acceptance/lib/label.rb +30 -0
  104. data/test/acceptance/lib/light_test.rb +60 -0
  105. data/test/acceptance/lib/mesh_test.rb +69 -0
  106. data/test/acceptance/lib/particle_test.rb +9 -0
  107. data/test/acceptance/media/GreenSkin.jpg +0 -0
  108. data/test/acceptance/media/Ogre.material +86 -0
  109. data/test/acceptance/media/WeirdEye.png +0 -0
  110. data/test/acceptance/media/basic.rmaterial +18 -0
  111. data/test/acceptance/media/console.fontdef +7 -0
  112. data/test/acceptance/media/console.material +13 -0
  113. data/test/acceptance/media/console.png +0 -0
  114. data/test/acceptance/media/console.ttf +0 -0
  115. data/test/acceptance/media/dirt01.png +0 -0
  116. data/test/acceptance/media/fountain.material +19 -0
  117. data/test/acceptance/media/fountain.particle +40 -0
  118. data/test/acceptance/media/fountain.png +0 -0
  119. data/test/acceptance/media/fountaincolors.png +0 -0
  120. data/test/acceptance/media/ogre.mesh +0 -0
  121. data/test/acceptance/media/spheremap.png +0 -0
  122. data/test/acceptance/media/win.png +0 -0
  123. data/test/acceptance/spec/spec_helper.rb +7 -0
  124. data/test/integration/actor_generator_test.rb +43 -0
  125. data/test/integration/shattered_generator_test.rb +43 -0
  126. data/test/integration/test_helper.rb +20 -0
  127. data/test/ogre_test_defaults.save +8 -0
  128. data/test/ogre_test_plugins.linux.cfg +12 -0
  129. data/test/ogre_test_plugins.osx.cfg +12 -0
  130. data/test/ogre_test_plugins.windows.cfg +14 -0
  131. data/test/test_helper.rb +109 -0
  132. data/test/unit/shattered_game/actor_test.rb +9 -0
  133. data/test/unit/shattered_game/game_test.rb +49 -0
  134. data/test/unit/shattered_game/runner_test.rb +56 -0
  135. data/test/unit/shattered_model/controls/mouse.controls +4 -0
  136. data/test/unit/shattered_model/controls/player.controls +4 -0
  137. data/test/unit/shattered_model/controls/too_many_delims.controls +1 -0
  138. data/test/unit/shattered_model/key_controls_test.rb +89 -0
  139. data/test/unit/shattered_model/key_converter_test.rb +37 -0
  140. data/test/unit/shattered_model/keyboard_input_test.rb +32 -0
  141. data/test/unit/shattered_model/mouse_controls_test.rb +50 -0
  142. data/test/unit/shattered_model/mouse_input_test.rb +61 -0
  143. data/test/unit/shattered_model/shattered_model_test.rb +117 -0
  144. data/test/unit/shattered_model/timed_event_test.rb +79 -0
  145. data/test/unit/shattered_model/timer_test.rb +325 -0
  146. data/{lib/rails_generator/generators/components/actor/templates/actor.rb → test/unit/shattered_support/directory_test/file.test} +0 -0
  147. data/test/unit/shattered_support/numeric_ext_test.rb +38 -0
  148. data/test/unit/shattered_support/pre_initialize_test.rb +63 -0
  149. data/test/unit/shattered_support/shattered_support_test.rb +39 -0
  150. data/test/unit/shattered_support/unload_test.rb +17 -0
  151. data/test/unit/shattered_view/light_test.rb +38 -0
  152. data/test/unit/shattered_view/material_test.rb +41 -0
  153. data/test/unit/shattered_view/media_test/basic.rmaterial +18 -0
  154. data/{lib/templates/configs/empty.log → test/unit/shattered_view/media_test/beltch.ogg} +0 -0
  155. data/test/unit/shattered_view/media_test/test.mesh +0 -0
  156. data/test/unit/shattered_view/mesh_test.rb +59 -0
  157. data/test/unit/shattered_view/node_test.rb +11 -0
  158. data/test/unit/shattered_view/ogrerb/camera_test.rb +12 -0
  159. data/test/unit/shattered_view/ogrerb/key_manager_test.rb +42 -0
  160. data/test/unit/shattered_view/ogrerb/media/basic.rmaterial +18 -0
  161. data/test/unit/shattered_view/ogrerb/media/test.mesh +0 -0
  162. data/test/unit/shattered_view/ogrerb/media/test.rmaterial +1 -0
  163. data/test/unit/shattered_view/ogrerb/mesh_instance_test.rb +74 -0
  164. data/test/unit/shattered_view/ogrerb/mouse_manager_test.rb +104 -0
  165. data/test/unit/shattered_view/ogrerb/ogrerb.log +51 -0
  166. data/test/unit/shattered_view/ogrerb/resolve_ogrerb_test.rb +13 -0
  167. data/test/unit/shattered_view/ogrerb/rgb_test.rb +10 -0
  168. data/test/unit/shattered_view/ogrerb/rmaterial_test.rb +28 -0
  169. data/test/unit/shattered_view/ogrerb/scene_type_test.rb +12 -0
  170. data/test/unit/shattered_view/ogrerb/vector_test.rb +206 -0
  171. data/test/unit/shattered_view/particle_test.rb +23 -0
  172. data/test/unit/shattered_view/resources_test.rb +45 -0
  173. data/test/unit/shattered_view/test_helper.rb +1 -0
  174. data/test/unit/shattered_view/window_event_test.rb +19 -0
  175. data/test/unit/test_helper.rb +1 -0
  176. metadata +205 -121
  177. data/bin/console +0 -4
  178. data/bin/destroy +0 -9
  179. data/bin/generate +0 -7
  180. data/bin/runner +0 -9
  181. data/bin/shatter +0 -22
  182. data/lib/commands/console.rb +0 -23
  183. data/lib/game_loader.rb +0 -118
  184. data/lib/rails_generator.rb +0 -43
  185. data/lib/rails_generator/base.rb +0 -203
  186. data/lib/rails_generator/commands.rb +0 -519
  187. data/lib/rails_generator/generators/applications/shattered_app/shattered_app_generator.rb +0 -103
  188. data/lib/rails_generator/generators/components/actor/actor_generator.rb +0 -22
  189. data/lib/rails_generator/generators/components/model/USAGE +0 -17
  190. data/lib/rails_generator/generators/components/model/model_generator.rb +0 -22
  191. data/lib/rails_generator/generators/components/model/templates/fixtures.yml +0 -5
  192. data/lib/rails_generator/generators/components/model/templates/model.rb +0 -2
  193. data/lib/rails_generator/generators/components/model/templates/unit_test.rb +0 -11
  194. data/lib/rails_generator/generators/components/state/USAGE +0 -30
  195. data/lib/rails_generator/generators/components/state/state_generator.rb +0 -19
  196. data/lib/rails_generator/generators/components/state/templates/state.rb +0 -20
  197. data/lib/rails_generator/generators/components/view/USAGE +0 -30
  198. data/lib/rails_generator/generators/components/view/templates/material +0 -4
  199. data/lib/rails_generator/generators/components/view/templates/view.rb +0 -7
  200. data/lib/rails_generator/generators/components/view/view_generator.rb +0 -28
  201. data/lib/rails_generator/lookup.rb +0 -209
  202. data/lib/rails_generator/manifest.rb +0 -53
  203. data/lib/rails_generator/options.rb +0 -143
  204. data/lib/rails_generator/scripts.rb +0 -83
  205. data/lib/rails_generator/scripts/destroy.rb +0 -7
  206. data/lib/rails_generator/scripts/generate.rb +0 -7
  207. data/lib/rails_generator/scripts/update.rb +0 -12
  208. data/lib/rails_generator/simple_logger.rb +0 -46
  209. data/lib/rails_generator/spec.rb +0 -44
  210. data/lib/shatter.rb +0 -7
  211. data/lib/tasks/documentation.rake +0 -46
  212. data/lib/tasks/testing.rake +0 -102
  213. data/lib/templates/MIT-LICENSE +0 -20
  214. data/lib/templates/README +0 -35
  215. data/lib/templates/configs/boot.rb +0 -35
  216. data/lib/templates/configs/ogre.cfg +0 -4
  217. data/lib/templates/configs/runner.rb +0 -5
  218. data/lib/templates/doc/README_FOR_APP +0 -2
  219. data/lib/templates/environments/environment.rb +0 -10
  220. data/lib/templates/media/default.mesh +0 -0
  221. data/lib/templates/media/default.png +0 -0
  222. data/lib/templates/media/offset_map.rmaterial +0 -117
  223. data/lib/templates/test/test_helper.rb +0 -5
@@ -0,0 +1,9 @@
1
+ #require File.dirname(__FILE__) + '/inflector'
2
+ #require File.dirname(__FILE__) + '/inflections'
3
+ #require File.dirname(__FILE__) + '/core_ext'
4
+ require File.dirname(__FILE__) + '/pre_initialize'
5
+ require File.dirname(__FILE__) + '/unload'
6
+ #require 'rubygems'
7
+ #require 'activesupport' #TODO: Use activesupport, fix shatteredsupport or get rid of shatteredsupport
8
+ require File.dirname(__FILE__) + '/core_ext'
9
+ require File.dirname(__FILE__) + '/error'
@@ -0,0 +1,18 @@
1
+ module Shattered
2
+ module Unload #:nodoc:
3
+ # Add a block to call on unload.
4
+ def on_unload(&block)
5
+ @on_unload ||= []
6
+ @on_unload << block
7
+ end
8
+
9
+ # Unload the object by calling all the unload blocks.
10
+ def unload
11
+ if(@on_unload)
12
+ @on_unload.reverse.each do |onload_method|
13
+ onload_method.call
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,7 @@
1
+ #module ShatteredView
2
+ # class Camera < Node
3
+ # def initialize( scene )
4
+ # @scene_node = scene.getCamera
5
+ # end
6
+ # end
7
+ # end
@@ -0,0 +1,28 @@
1
+
2
+ class ShatteredOgre
3
+ def self.create_root(plugins="ogrerb_plugins.cfg", configs="ogrerb_defaults.save", log="ogrerb.log")
4
+ # Disable the default stdout. All ogre errors redirect to the ogre log.
5
+ @@log_manager = Ogre::LogManager.new
6
+ @@log_manager.create_log(log,true,false,false)
7
+
8
+ # Create our core and load platform managers
9
+ @@root = Ogre::Root.new(plugins, configs, log)
10
+ return @@root
11
+ end
12
+
13
+ # Translates from symbols to scene manager types. Valid options are:
14
+ # :general => ST_GENERIC
15
+ # :terrain => ST_EXTERIOR_CLOSE
16
+ # :nature => ST_EXTERIOR_FAR
17
+ # :indoor => ST_INTERIOR
18
+ # :nature_paging => ST_EXTERIOR_REAL_FAR
19
+ def self.translate_to_scene_type( symbol )
20
+ return Ogre::ST_GENERIC if(symbol == :general)
21
+ return Ogre::ST_EXTERIOR_CLOSE if(symbol == :terrain)
22
+ return Ogre::ST_EXTERIOR_FAR if(symbol == :nature)
23
+ return Ogre::ST_EXTERIOR_REAL_FAR if(symbol == :paging)
24
+ return Ogre::ST_INTERIOR if(symbol == :indoor)
25
+ raise StandardError, "#{symbol} is not a valid scene manager type"
26
+ end
27
+
28
+ end
@@ -0,0 +1,14 @@
1
+ module Ogre
2
+ class Camera
3
+
4
+ alias_method :raw_look_at, :look_at
5
+
6
+ # Look at an object
7
+ # You can send it a node, mesh, or anything with a position vector
8
+ # Or just a vector
9
+ def look_at(v)
10
+ v = v.position if v.class.respond_to? :position
11
+ raw_look_at v.to_v
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,54 @@
1
+ module OIS
2
+ # One centralized place for responding to keyboard input in shattered
3
+ # TODO: buffered input
4
+ # TODO: make this a singleton(the constructor takes arguments, which makes this difficult)
5
+ class KeyManager < KeyListenerProxy
6
+ def initialize(*args)
7
+ if(args.empty?)
8
+ puts "Warning: Do not initialize KeyManager via the default constructor unless you are running tests."
9
+ else
10
+ super(*args)
11
+ end
12
+ @pressed={}
13
+ @held={}
14
+ @released={}
15
+ end
16
+
17
+ # Is key new from the last flush event?
18
+ def key_pressed?(key)
19
+ return @pressed[key] || false
20
+ end
21
+
22
+ # Is key not pressed new from the last flush event?
23
+ def key_released?(key)
24
+ return @released[key] || false
25
+ end
26
+
27
+ # Is the key pressed or pressed from a previous frame
28
+ def key_held?(key)
29
+ return @held[key] || false
30
+ end
31
+
32
+ # Clear out the newly pressed/released events
33
+ def flush
34
+ @released={}
35
+ @pressed={}
36
+ end
37
+
38
+ # Called from the key listener
39
+ def key_pressed(e)
40
+ @pressed[e.key]=true
41
+ @held[e.key]=true
42
+ @released[e.key]=false
43
+ end
44
+
45
+ # Called from the key listener
46
+ def key_released(e)
47
+ @released[e.key]=true
48
+ @held[e.key]=false
49
+ @pressed[e.key]=false
50
+ end
51
+
52
+ end
53
+ end
54
+
@@ -0,0 +1,25 @@
1
+ module Ogre
2
+ class Light
3
+ attr_accessor :scene_manager
4
+ alias_method :diffuse=, :set_diffuse_colour
5
+ alias_method :diffuse, :get_diffuse_colour
6
+
7
+ alias_method :position=, :set_position
8
+ alias_method :position, :get_position
9
+
10
+ alias_method :specular=, :set_specular_colour
11
+ alias_method :specular, :get_specular_colour
12
+
13
+ alias_method :direction=, :set_direction
14
+ alias_method :direction, :get_direction
15
+ #Return the scene's total ambient color
16
+ def ambient
17
+ scene_manager.get_ambient_light
18
+ end
19
+
20
+ # Set the scene's total ambient color
21
+ def ambient=(*args)
22
+ scene_manager.set_ambient_light *args
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,5 @@
1
+ module Ogre
2
+ class MaterialPtr
3
+ attr_accessor :name
4
+ end
5
+ end
@@ -0,0 +1,85 @@
1
+ require 'delegate'
2
+
3
+ module Ogre
4
+ # A MeshInstance is a class representing an Ogre::Entity attached to an
5
+ # Ogre::Node. This allows for moving / rotation of a Mesh without having
6
+ # to worry about about this dichotomy.
7
+ #
8
+ # Delegation occurs in the node for rotation and translation.
9
+ # Delegation occurs to the entity for all other cases.
10
+ # The node and entity are accessible, for the fringe cases where specific methods
11
+ # are not delegated respectfully.
12
+ class MeshInstance < SimpleDelegator
13
+ attr_reader :node, :entity
14
+ def initialize(parent, scene_manager, mesh_name, options={})
15
+ @@entity_count ||= 0
16
+ @scene_manager = scene_manager
17
+ @parent = parent
18
+ @node = parent.create_child_scene_node("#{parent.to_s}.node(#{parent.num_children})")
19
+ # formats to '#<SceneManager:???>.entity(0)'
20
+ @entity = options[:entity] || scene_manager.create_entity("#{scene_manager.to_s}.entity(#{@@entity_count})", mesh_name)
21
+ @node.attach_object(@entity)
22
+ @@entity_count += 1
23
+ # delegate all unknown methods to the entity object
24
+ __setobj__(@entity)
25
+ end
26
+
27
+ # Unload the mesh entity and node.
28
+ def unload
29
+ @node.detach_object(@entity)
30
+ @scene_manager.destroy_entity(@entity)
31
+ @parent.remove_and_destroy_child(@node.get_name)
32
+ end
33
+
34
+ [
35
+ :position,
36
+ :position=,
37
+ :direction=,
38
+ :orientation=,
39
+ :orientation,
40
+ :translate!,
41
+ :rotate,
42
+ :scale=,
43
+ :look_at
44
+ ].each do |method|
45
+ define_method(method) do |*args|
46
+ node.send(method, *args)
47
+ end
48
+ end
49
+
50
+ def scale(*args)
51
+ node.scale *args
52
+ end
53
+
54
+ # Entity delegates that map differently
55
+ def visible=(v)
56
+ entity.set_visible v
57
+ end
58
+
59
+ # Is the entity visible?
60
+ def visible?
61
+ entity.is_visible
62
+ end
63
+
64
+ # Hide the mesh and it's children
65
+ def hide
66
+ self.visible = false
67
+ end
68
+
69
+ # Show the mesh and it's children
70
+ def show
71
+ self.visible = true
72
+ end
73
+
74
+ # Set a material on a mesh. You can set rmaterials or names of Ogre materials.
75
+ def material=(material)
76
+ if(material.is_a? String)
77
+ self.set_material_name(material)
78
+ else
79
+ self.set_material_name(material.get_name.to_s)
80
+ end
81
+ end
82
+
83
+ end
84
+
85
+ end
@@ -0,0 +1,109 @@
1
+ module OIS
2
+ # One centralized place for responding to mouse input in shattered
3
+ # TODO: buffered?
4
+ # TODO: make this a singleton(the constructor takes arguments, which makes this difficult)
5
+ class MouseManager
6
+ attr_reader :x, :y, :scrolled, :abs_x, :abs_y
7
+
8
+ #Constructor requires an OIS::Mouse object
9
+ def initialize(*args)
10
+ if(args.empty?)
11
+ puts "Warning: Do not initialize MouseManager via the default constructor unless you are running tests."
12
+ else
13
+ # @mouse_events = OIS::MouseEvents.new(*args)
14
+ # @mouse_events.on_press lambda {|e, val| respond_to_press(e, val) }
15
+ # @mouse_events.on_release lambda {|e, val| respond_to_release(e, val) }
16
+ # @mouse_events.on_move lambda {|e| respond_to_move(e) }
17
+ @ois_mouse = args[0]
18
+ end
19
+ @pressed=0
20
+ @held=0
21
+ @released=0
22
+ @scrolled=0
23
+ @x=0
24
+ @y=0
25
+ @abs_x=0
26
+ @abs_y=0
27
+ @buttons = 0
28
+ end
29
+
30
+ # Clear out the newly pressed/released events and relative position
31
+ def flush
32
+ @pressed=0
33
+ @released=0
34
+ @scrolled=0
35
+ @x=0
36
+ @y=0
37
+ end
38
+
39
+ #Unbuffered input processor
40
+ def process_events(state)
41
+ #TODO: What to do on buffered input
42
+ if @ois_mouse.nil? || !@ois_mouse.buffered
43
+ flush
44
+ respond_to_buttons(state)
45
+ respond_to_move(state)
46
+ end
47
+ end
48
+
49
+ #Determine press, release, and held states
50
+ def respond_to_buttons(state)
51
+ buttons = state.buttons
52
+ i = 0
53
+ # This code checks each bit, and does a press or release depending on the bit.
54
+ while i <= 7
55
+ bit = 1 << i
56
+ current = bit & buttons
57
+ prev = bit & @buttons
58
+ if current < prev
59
+ respond_to_release i
60
+ elsif prev < current
61
+ respond_to_press i
62
+ end
63
+ i+=1
64
+ end
65
+ @buttons = buttons
66
+ end
67
+
68
+ #Called when the OIS mouse moved event is fired
69
+ def respond_to_move(state)
70
+ @scrolled+=state.Z.rel
71
+ @x+=state.X.rel
72
+ @y+=state.Y.rel
73
+ @abs_x=state.X.abs
74
+ @abs_y=state.Y.abs
75
+ end
76
+
77
+ #Called when the OIS mouse pressed event is fired
78
+ def respond_to_press(val)
79
+ bit = (1 << val)
80
+ @pressed |= bit
81
+ @held |= bit
82
+ end
83
+
84
+ #Called when the OIS mouse released event is fired
85
+ def respond_to_release(val)
86
+ bit = (1 << val)
87
+ @released |= bit
88
+ @held &= ~bit
89
+ @pressed &= ~bit
90
+ end
91
+
92
+ #Returns true if the button is pressed
93
+ def pressed?(button)
94
+ return (@pressed & (1 << button) != 0)
95
+ end
96
+
97
+ #Returns true if the button is held(between pressed and released states)
98
+ def held?(button)
99
+ return (@held & (1 << button) != 0)
100
+ end
101
+
102
+ #Returns true if the button is released
103
+ def released?(button)
104
+ return (@released & (1 << button) != 0)
105
+ end
106
+
107
+ end
108
+ end
109
+
@@ -0,0 +1,24 @@
1
+ module Ogre
2
+ class ParticleSystem
3
+ def node=(node)
4
+ puts node
5
+ @node = node
6
+ node.attach_object self
7
+ end
8
+
9
+ def unload
10
+ unless @node.nil?
11
+ @node.detach_object self
12
+ @node.get_parent.remove_child @node
13
+ end
14
+ end
15
+
16
+ def position=(v)
17
+ @node.position=v
18
+ end
19
+
20
+ def position
21
+ @node.position
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,6 @@
1
+ class Object
2
+ # rgb(0,0,0) is a shorthand for creating colours in Ogre.
3
+ def rgb(r,g,b)
4
+ Ogre::ColourValue.new(r,g,b)
5
+ end
6
+ end
@@ -0,0 +1,87 @@
1
+ require 'erb'
2
+
3
+ module Ogre
4
+ # An rmaterial is a material template, sample rmaterials
5
+ # A basic RMaterial looks as follows:
6
+ #
7
+ # // This is an example rmaterial, a basic single textured, uniformly lit mesh.
8
+ # // The only argument is texture, which defaults to <material_name>.png
9
+ # <% @texture ||= "#{name}.png" %>
10
+ # material <%= name %>
11
+ # {
12
+ # technique
13
+ # {
14
+ # pass
15
+ # {
16
+ # lighting off
17
+ # texture_unit
18
+ # {
19
+ # texture <%= texture %>
20
+ # }
21
+ # }
22
+ # }
23
+ #
24
+ # Example:
25
+ # rmaterial = RMaterial.load("my.material") do |rm|
26
+ # rm.name = "Ogre"
27
+ # end
28
+ # result = rmaterial.load
29
+ #
30
+ #Materials are parsed through erb as .rmaterials and parsed when a material is created using the create :material function of View
31
+ class RMaterial
32
+ attr_reader :result, :name
33
+
34
+ # Used to create an rmaterial with a block.
35
+ # Returns an Ogre material
36
+ def self.load(file)
37
+ rmaterial = self.new(file)
38
+ yield rmaterial
39
+ rmaterial.parse
40
+ return rmaterial.create_ogre_material
41
+ end
42
+
43
+ def initialize(rmaterial)
44
+ @rmaterial = rmaterial
45
+ end
46
+
47
+ # Parses through ERB to create a ogre-compatible material
48
+ def parse
49
+ begin
50
+ evaluate(File.open(@rmaterial).readlines.join(''))
51
+ rescue Errno::ENOENT => bang
52
+ raise Errno::ENOENT, "RMaterial for '#{name}' not found: #{bang.message}"
53
+ end
54
+ end
55
+
56
+ # Loads the rmaterial from Ogre. Must call parse first.
57
+ def create_ogre_material
58
+ unless(MaterialManager.instance.resource_exists(name.to_s))
59
+ MaterialManager.instance.parse_script(result, "General")
60
+ end
61
+ return MaterialManager.instance.get_by_name(name.to_s)
62
+ end
63
+
64
+ def method_missing(name, *args)
65
+ # Check if the method is a setter
66
+ if name.to_s[-1].chr == "="
67
+ name = name.to_s[0...-1].to_sym
68
+ # Set the instance variable to the sent variable
69
+ ivar = "@#{ name }".to_sym
70
+ instance_variable_set(ivar, args[0])
71
+ else
72
+ begin
73
+ return eval("@#{name}")
74
+ rescue StandardError => bang
75
+ raise NoMethodError, "Rmaterial could not find the #{name} attribute: #{bang.message}"
76
+ end
77
+ end
78
+ end
79
+ def evaluate(template)
80
+ evaluator = ERB.new(template)
81
+ return @result ||= evaluator.result(binding)
82
+ end
83
+ def tangent_space
84
+ false
85
+ end
86
+ end
87
+ end