ogre.rb 0.1-i386-mswin32

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 (94) hide show
  1. data/README +79 -0
  2. data/Rakefile +291 -0
  3. data/doc_src/ogre.rb +246 -0
  4. data/doc_src/ois.rb +67 -0
  5. data/lib/application.rb +146 -0
  6. data/lib/application_frame_listener.rb +302 -0
  7. data/lib/application_loading_bar.rb +115 -0
  8. data/lib/constants.rb +51 -0
  9. data/lib/method_fixes.rb +42 -0
  10. data/lib/ogre.dll +0 -0
  11. data/lib/ruby_ois.dll +0 -0
  12. data/ogre.rb +25 -0
  13. data/platform.rb +23 -0
  14. data/samples/Ogre.log +279 -0
  15. data/samples/bsp.rb +76 -0
  16. data/samples/cg.dll +0 -0
  17. data/samples/grass.rb +325 -0
  18. data/samples/js3250.dll +0 -0
  19. data/samples/lighting.rb +138 -0
  20. data/samples/media/materials/programs/Grass.cg +30 -0
  21. data/samples/media/materials/programs/OffsetMapping.cg +97 -0
  22. data/samples/media/materials/programs/OffsetMapping.hlsl +135 -0
  23. data/samples/media/materials/programs/OffsetMappingFp.glsl +69 -0
  24. data/samples/media/materials/programs/OffsetMappingVp.glsl +54 -0
  25. data/samples/media/materials/programs/OffsetMapping_specular.asm +44 -0
  26. data/samples/media/materials/scripts/CloudySky.material +17 -0
  27. data/samples/media/materials/scripts/CubeMapping.material +34 -0
  28. data/samples/media/materials/scripts/Flare.material +17 -0
  29. data/samples/media/materials/scripts/Grass.material +63 -0
  30. data/samples/media/materials/scripts/Knot.material +14 -0
  31. data/samples/media/materials/scripts/MorningSkyBox.material +17 -0
  32. data/samples/media/materials/scripts/Offset.material +124 -0
  33. data/samples/media/materials/scripts/Ogre.material +119 -0
  34. data/samples/media/materials/scripts/RZR-002.material +15 -0
  35. data/samples/media/materials/scripts/Razor.material +14 -0
  36. data/samples/media/materials/scripts/Ribbon.material +19 -0
  37. data/samples/media/materials/scripts/RustySteel.material +14 -0
  38. data/samples/media/materials/scripts/SpaceSkyBox.material +17 -0
  39. data/samples/media/materials/scripts/SpaceSkyPlane.material +17 -0
  40. data/samples/media/materials/scripts/TextureEffects.material +15 -0
  41. data/samples/media/materials/scripts/dragon.material +42 -0
  42. data/samples/media/materials/scripts/smoke.material +18 -0
  43. data/samples/media/materials/textures/GreenSkin.jpg +0 -0
  44. data/samples/media/materials/textures/MtlPlat2.jpg +0 -0
  45. data/samples/media/materials/textures/RZR-002.png +0 -0
  46. data/samples/media/materials/textures/RustedMetal.jpg +0 -0
  47. data/samples/media/materials/textures/RustySteel.jpg +0 -0
  48. data/samples/media/materials/textures/Thumbs.db +0 -0
  49. data/samples/media/materials/textures/Water02.jpg +0 -0
  50. data/samples/media/materials/textures/WeirdEye.png +0 -0
  51. data/samples/media/materials/textures/clouds.jpg +0 -0
  52. data/samples/media/materials/textures/cursor.png +0 -0
  53. data/samples/media/materials/textures/dirt01.jpg +0 -0
  54. data/samples/media/materials/textures/flare.png +0 -0
  55. data/samples/media/materials/textures/gras_02.png +0 -0
  56. data/samples/media/materials/textures/grass_1024.jpg +0 -0
  57. data/samples/media/materials/textures/ogreborder.png +0 -0
  58. data/samples/media/materials/textures/ogreborderUp.png +0 -0
  59. data/samples/media/materials/textures/ribbonband.png +0 -0
  60. data/samples/media/materials/textures/rockwall.tga +0 -0
  61. data/samples/media/materials/textures/rockwall_NH.tga +0 -0
  62. data/samples/media/materials/textures/smoke.png +0 -0
  63. data/samples/media/materials/textures/smokecolors.png +0 -0
  64. data/samples/media/materials/textures/spacesky.jpg +0 -0
  65. data/samples/media/materials/textures/spheremap.png +0 -0
  66. data/samples/media/materials/textures/texmap2.jpg +0 -0
  67. data/samples/media/models/RZR-002.mesh +0 -0
  68. data/samples/media/models/geosphere4500.mesh +0 -0
  69. data/samples/media/models/geosphere8000.mesh +0 -0
  70. data/samples/media/models/knot.mesh +0 -0
  71. data/samples/media/models/ogrehead.mesh +0 -0
  72. data/samples/media/models/razor.mesh +0 -0
  73. data/samples/media/models/sphere.mesh +0 -0
  74. data/samples/media/overlays/CubeMapping.overlay +139 -0
  75. data/samples/media/packs/OgreCore.zip +0 -0
  76. data/samples/media/packs/chiropteraDM.pk3 +0 -0
  77. data/samples/media/packs/chiropteraDM.txt +99 -0
  78. data/samples/media/packs/cubemap.zip +0 -0
  79. data/samples/media/packs/cubemapsJS.zip +0 -0
  80. data/samples/media/packs/dragon.zip +0 -0
  81. data/samples/media/packs/skybox.zip +0 -0
  82. data/samples/media/particles/smoke.particle +43 -0
  83. data/samples/media.cfg +22 -0
  84. data/samples/ogre.cfg +19 -0
  85. data/samples/plugins.cfg +12 -0
  86. data/samples/quake3settings.cfg +2 -0
  87. data/samples/render_to_texture.rb +161 -0
  88. data/samples/resources.cfg +16 -0
  89. data/samples/sky_box.rb +107 -0
  90. data/samples/sky_dome.rb +86 -0
  91. data/samples/sky_plane.rb +27 -0
  92. data/samples/smoke.rb +23 -0
  93. data/samples/work/cube_mapping.rb +686 -0
  94. metadata +149 -0
@@ -0,0 +1,146 @@
1
+ $:.push('..')
2
+
3
+ require 'ogre'
4
+ require 'application_frame_listener'
5
+
6
+ module Ogre
7
+
8
+ # Application is a Ruby port of ExampleApplication. It is written so that there's nothing new
9
+ # to learn here, but you do have to watch out for Ruby version of names
10
+ # (createScene vs create_scene).
11
+ #
12
+ # All you need to do is define your own createScene. An example Application subclass (sky_plane.rb):
13
+ #
14
+ # require 'ogre'
15
+ # include Ogre
16
+ #
17
+ # class SkyPlaneApplication < Application
18
+ #
19
+ # def create_scene
20
+ # scene_manager.set_ambient_light(ColourValue.new(0.5, 0.5, 0.5))
21
+ #
22
+ # plane = Plane.new
23
+ # plane.d = 5000
24
+ # plane.normal = -Vector3.UNIT_Y
25
+ # scene_manager.set_sky_plane(true, plane, "SpaceSkyPlane", 10000, 3)
26
+ #
27
+ # light = scene_manager.create_light("MainLight")
28
+ # light.set_position(20, 80, 50)
29
+ #
30
+ # dragon = scene_manager.create_entity("dragon", "dragon.mesh")
31
+ # scene_manager.root_scene_node.attach_object(dragon)
32
+ # end
33
+ # end
34
+ #
35
+ # app = SkyPlaneApplication.new
36
+ # app.go
37
+ #
38
+ # Any of the protected methods in this class are free for overriding.
39
+ class Application
40
+
41
+ attr_accessor :root, :frame_listener, :window, :scene_manager, :camera
42
+
43
+ def initialize
44
+ @frame_listener = nil
45
+ @root = nil
46
+ end
47
+
48
+ # This starts off everything.
49
+ def go
50
+ return unless setup
51
+
52
+ @root.start_rendering
53
+
54
+ destroy_scene
55
+
56
+ @frame_listener.shutdown
57
+ end
58
+
59
+ protected
60
+
61
+ def setup
62
+ @root = Root.new("plugins.cfg", "ogre.cfg", "Ogre.log")
63
+
64
+ setup_resources
65
+
66
+ return unless configure
67
+
68
+ choose_scene_manager
69
+ create_camera
70
+ create_viewports
71
+
72
+ TextureManager.instance.set_default_num_mipmaps 5
73
+
74
+ create_resource_listener
75
+ load_resources
76
+ create_scene
77
+ create_frame_listener
78
+ true
79
+ end
80
+
81
+ # Shows the configuration dialog and initializes our
82
+ # render window
83
+ def configure
84
+ return false unless @root.show_config_dialog
85
+ @window = @root.initialise(true)
86
+ true
87
+ end
88
+
89
+ def choose_scene_manager
90
+ @scene_manager = @root.create_scene_manager(ST_GENERIC, "ExampleSMInstance")
91
+ end
92
+
93
+ def create_camera
94
+ @camera = @scene_manager.create_camera("PlayerCam")
95
+
96
+ @camera.set_position(0, 0, 500)
97
+ # Look along the -Z axis
98
+ @camera.look_at(Vector3.new(0, 0, -300))
99
+ @camera.set_near_clip_distance 5
100
+ end
101
+
102
+ def create_frame_listener
103
+ @frame_listener = ApplicationFrameListener.new(@root, @window, @camera)
104
+ @frame_listener.show_debug_overlay(true)
105
+ end
106
+
107
+ def create_scene
108
+ raise "Please redefine #create_scene in your application"
109
+ end
110
+
111
+ def destroy_scene
112
+ end
113
+
114
+ def create_viewports
115
+ vp = @window.add_viewport(@camera)
116
+ vp.set_background_colour ColourValue.new(0,0,0)
117
+
118
+ @camera.set_aspect_ratio( (vp.get_actual_width * 1.0) / (vp.get_actual_height * 1.0) )
119
+ end
120
+
121
+ def setup_resources
122
+ section = "General"
123
+ File.open("resources.cfg", "r") do |config_file|
124
+ config_file.each do |line|
125
+ line.chomp!
126
+ next if line =~ /^#/ || line.empty?
127
+ if line =~ /^\[(.+?)\]/
128
+ section = $1
129
+ next
130
+ end
131
+
132
+ key, value = line.split("=")
133
+ ResourceGroupManager.instance.add_resource_location(value, key, section)
134
+ end
135
+ end
136
+ end
137
+
138
+ def create_resource_listener
139
+ end
140
+
141
+ def load_resources
142
+ ResourceGroupManager.instance.initialise_all_resource_groups
143
+ end
144
+
145
+ end
146
+ end
@@ -0,0 +1,302 @@
1
+ module Ogre
2
+ # Define a listener for certain window events, such as resizing, closing,
3
+ # and changes of focus
4
+ #
5
+ # Currently not used
6
+ #
7
+ class ApplicationWindowListener < WindowEventListenerProxy #:nodoc:
8
+ def initialize(input_manager, window, keyboard, mouse, joy_stick)
9
+ super(window)
10
+ @input_manager = input_manager
11
+ @keyboard = keyboard
12
+ @mouse = mouse
13
+ @window = window
14
+ @joy_stick = joy_stick
15
+ end
16
+
17
+ # Adjust the mouse clipping area when the window has been resized
18
+ def windowResized(window)
19
+ width = height = depth = left = top = 0
20
+ window.getMetrics(width, height, depth, left, top)
21
+
22
+ mouse_state = @mouse.getMouseState
23
+ mouse_state.width = width
24
+ mouse_state.height = height
25
+ end
26
+
27
+ # Shut everything down nicely when we're done
28
+ def windowClosed(window)
29
+ if @window == window
30
+ if @input_manager
31
+ @input_manager.destroy_input_object(@mouse)
32
+ @input_manager.destroy_input_object(@keyboard)
33
+ @input_manager.destroy_input_object(@joy_stick)
34
+
35
+ OIS::InputManager.destroyInputSystem(@input_manager)
36
+ @input_manager = nil
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+ # In the same way Application is the port of ExampleApplication, ApplicationFrameListener
43
+ # is the Ruby port of ExampleFrameListener. This class gives us a very helpful starting
44
+ # point for input management and a few Overlays for information. The default ApplicationFrameListener
45
+ # gives the WASD movement (through OIS), as well as the well-known Ogre overlay showing triangle count, FPS, etc.
46
+ #
47
+ # Usage is just as easy as can be expected:
48
+ #
49
+ # require 'application'
50
+ # include Ogre
51
+ #
52
+ # class AppListener < ApplicationFrameListener
53
+ #
54
+ # def frame_started(event)
55
+ # return false unless super(event)
56
+ #
57
+ # ... frame event / input handling ...
58
+ #
59
+ # true
60
+ # end
61
+ # end
62
+ #
63
+ # class MyApplication < Application
64
+ #
65
+ # def create_scene
66
+ # ...
67
+ # end
68
+ #
69
+ # def create_frame_listener
70
+ # frame_listener = AppListener.new(root, window, camera)
71
+ # end
72
+ # end
73
+ #
74
+ # app = MyApplication.new
75
+ # app.go
76
+ #
77
+ # Do take note of create_frame_listener in the example above. The FrameListener actually takes in
78
+ # the Root object, instead of the application calling root.addFrameListener. We do this because the process
79
+ # of using Ruby C++ subclasses in C++ functions doesn't really work, and may not even be possible.
80
+ # The fix for this is to build a Proxy class in C++ that is given the Root on construction. It then
81
+ # registers itself with the passed in Root. See OgreProxys for this definition
82
+ #
83
+ class ApplicationFrameListener < FrameListenerProxy
84
+
85
+ attr_accessor :keyboard, :mouse, :joy_stick, :input_manager, :camera, :window
86
+
87
+ def initialize(root, render_window, camera, buffered_keys = false,
88
+ buffered_mouse = false, buffered_joy = false)
89
+ super(root)
90
+ @camera = camera
91
+ @window = render_window
92
+ @move_speed = 100
93
+ @rotate_speed = 36
94
+ @move_scale = 0.0
95
+ @rot_scale = 0.0
96
+ @translate_vector = Vector3.ZERO
97
+ @rot_x = Degree.new(0)
98
+ @rot_y = Degree.new(0)
99
+ @debug_text = ""
100
+
101
+ @debug_overlay = OverlayManager.instance.get_by_name("Core/DebugOverlay")
102
+
103
+ LogManager.instance.log_message("*** Initializing OIS ***")
104
+
105
+ windowHnd = @window.get_custom_attribute_unsigned_long("WINDOW")
106
+
107
+ @input_manager = OIS::InputManager.create_input_system({"WINDOW" => "#{windowHnd}"})
108
+ @keyboard = @input_manager.create_input_object( OIS::OISKeyboard, buffered_keys)
109
+ @mouse = @input_manager.create_input_object( OIS::OISMouse, buffered_mouse)
110
+
111
+ # Most likely won't have a joystick here, so just throw away any exceptions
112
+ @joy_stick = nil
113
+ begin
114
+ @joy_stick = @input_manager.create_input_object( OIS::OISJoyStick, buffered_joy)
115
+ rescue
116
+ end
117
+
118
+ show_debug_overlay(true)
119
+
120
+ # Currently doesn't work, it's the Ruby subclass back into C++ problem
121
+ #puts "Setting window listener"
122
+ #@window_event_listener = ApplicationWindowListener.new(@input_manager, @window,
123
+ #@keyboard, @mouse,
124
+ #@joy_stick)
125
+
126
+ # Done in proxy constructor
127
+ # WindowEventUtilities.addWindowEventListener(@window, @window_event_listener)
128
+ end
129
+
130
+ # Ruby doesn't have destructors, just manually call shutdown to clean this up
131
+ def shutdown
132
+ #WindowEventUtilities::removeWindowEventListener(@window, @window_event_listener)
133
+ #@window_event_listener.windowClosed(@window)
134
+
135
+ # Clean up our input objects
136
+ @input_manager.destroy_input_object(@mouse)
137
+ @input_manager.destroy_input_object(@keyboard)
138
+ @input_manager.destroy_input_object(@joy_stick)
139
+
140
+ OIS::InputManager.destroy_input_system(@input_manager)
141
+ @input_manager = nil
142
+ end
143
+
144
+ # Keyboard processing
145
+ def process_unbuffered_key_input(event)
146
+ # Start with basic movement, add overlay stuff later
147
+
148
+ # Left
149
+ if @keyboard.key_down?(OIS::KC_A)
150
+ @translate_vector.x = -@move_scale
151
+ end
152
+
153
+ # Right
154
+ if @keyboard.key_down?(OIS::KC_D)
155
+ @translate_vector.x = @move_scale
156
+ end
157
+
158
+ # Forward
159
+ if @keyboard.key_down?(OIS::KC_UP) || @keyboard.key_down?(OIS::KC_W)
160
+ @translate_vector.z = -@move_scale
161
+ end
162
+
163
+ # Back
164
+ if @keyboard.key_down?(OIS::KC_DOWN) || @keyboard.key_down?(OIS::KC_S)
165
+ @translate_vector.z = @move_scale
166
+ end
167
+
168
+ # Up
169
+ if @keyboard.key_down?(OIS::KC_PGUP)
170
+ @translate_vector.y = @move_scale
171
+ end
172
+
173
+ # Down
174
+ if @keyboard.key_down?(OIS::KC_PGDOWN)
175
+ @translate_vector.y = -@move_scale
176
+ end
177
+
178
+ # Turn Right
179
+ if @keyboard.key_down?(OIS::KC_RIGHT)
180
+ @camera.yaw(-@rot_scale)
181
+ end
182
+
183
+ # Turn Left
184
+ if @keyboard.key_down?(OIS::KC_LEFT)
185
+ @camera.yaw(@rot_scale)
186
+ end
187
+
188
+ # Quit
189
+ if @keyboard.key_down?(OIS::KC_ESCAPE) || @keyboard.key_down?(OIS::KC_Q)
190
+ return false;
191
+ end
192
+
193
+ # Keep rendering
194
+ true
195
+ end
196
+
197
+ def process_unbuffered_mouse_input(event)
198
+ state = @mouse.mouse_state
199
+
200
+ if state.button_down?(OIS::MB_Right)
201
+ @translate_vector.x += state.X.rel * 0.13
202
+ @translate_vector.y -= state.Y.rel * 0.13
203
+ else
204
+ @rot_x = Degree.new(-state.X.rel * 0.13)
205
+ @rot_y = Degree.new(-state.Y.rel * 0.13)
206
+ end
207
+
208
+ true
209
+ end
210
+
211
+ # Process the movement we've calculated this frame
212
+ def move_camera
213
+ @camera.yaw(@rot_x)
214
+ @camera.pitch(@rot_y)
215
+ @camera.move_relative(@translate_vector)
216
+ end
217
+
218
+ # Toggle debug overlay if one exists
219
+ def show_debug_overlay(show)
220
+ if @debug_overlay
221
+ if show
222
+ @debug_overlay.show
223
+ else
224
+ @debug_overlay.hide
225
+ end
226
+ end
227
+ end
228
+
229
+ # Ogre callback, called at the beginning of every frame
230
+ def frame_started(event)
231
+ return false if @window.closed?
232
+
233
+ # Need to capture input from each device
234
+ @keyboard.capture
235
+ @mouse.capture
236
+ @joy_stick.capture if @joy_stick
237
+
238
+ buffered_joy = @joy_stick.nil? ? true : @joy_stick.buffered
239
+
240
+ if !@mouse.buffered || !@keyboard.buffered || !buffered_joy
241
+ # If this is the first frame, pick a speed
242
+ if event.time_since_last_frame == 0
243
+ @move_scale = 1
244
+ @rot_scale = 0.1
245
+ else
246
+ # ~100 units / second
247
+ @move_scale = @move_speed * event.time_since_last_frame
248
+ # ~10 seconds for full rotation
249
+ @rot_scale = @rotate_speed * event.time_since_last_frame
250
+ end
251
+
252
+ @rot_x = Degree.new 0
253
+ @rot_y = Degree.new 0
254
+
255
+ @translate_vector = Vector3.ZERO
256
+ end
257
+
258
+ if !@keyboard.buffered
259
+ return false unless process_unbuffered_key_input(event)
260
+ end
261
+
262
+ if !@mouse.buffered
263
+ return false unless process_unbuffered_mouse_input(event)
264
+ end
265
+
266
+ if !@mouse.buffered || !@keyboard.buffered || !buffered_joy
267
+ move_camera
268
+ end
269
+
270
+ # Keep rendering!
271
+ true
272
+ end
273
+
274
+ def frame_ended(event)
275
+ update_stats
276
+ true
277
+ end
278
+
279
+ protected
280
+
281
+ def update_stats
282
+ gui_avg = OverlayManager.instance.get_overlay_element("Core/AverageFps")
283
+ gui_curr = OverlayManager.instance.get_overlay_element("Core/CurrFps")
284
+ gui_best = OverlayManager.instance.get_overlay_element("Core/BestFps")
285
+ gui_worst = OverlayManager.instance.get_overlay_element("Core/WorstFps")
286
+ gui_tris = OverlayManager.instance.get_overlay_element("Core/NumTris")
287
+ gui_batches = OverlayManager.instance.get_overlay_element("Core/NumBatches")
288
+ gui_debug = OverlayManager.instance.get_overlay_element("Core/DebugText")
289
+
290
+ stats = @window.get_statistics
291
+
292
+ gui_curr.set_caption("Current FPS: #{"%.3f" % stats.last_fps}")
293
+ gui_avg.set_caption("Average FPS: #{"%.3f" % stats.avg_fps}")
294
+ gui_best.set_caption("Best FPS: #{"%.3f" % stats.best_fps}")
295
+ gui_worst.set_caption("Worst FPS: #{"%.3f" % stats.worst_fps}")
296
+ gui_tris.set_caption("Triangle Count: #{stats.triangle_count}")
297
+ gui_batches.set_caption("Batch Count: #{stats.batch_count}")
298
+
299
+ gui_debug.set_caption("#{@debug_text}")
300
+ end
301
+ end
302
+ end
@@ -0,0 +1,115 @@
1
+ module Ogre
2
+
3
+ # From Ogre's ExampleLoadingBar:
4
+ #
5
+ # Defines an example loading progress bar which you can use during
6
+ # startup, level changes etc to display loading progress.
7
+ #
8
+ # Basically you just need to create an instance of this class, call start()
9
+ # before loading and finish() afterwards. You may also need to stop areas of
10
+ # your scene rendering in between since this method will call
11
+ # RenderWindow::update() to update the display of the bar - we advise using
12
+ # SceneManager's 'special case render queues' for this, see
13
+ # SceneManager::addSpecialCaseRenderQueue for details.
14
+ #
15
+ # This progress bar relies on you having the OgreCore.zip package already
16
+ # added to a resource group called 'Bootstrap' - this provides the basic
17
+ # resources required for the progress bar and will be loaded automatically.
18
+ class ApplicationLoadingBar < ResourceGroupListenerProxy
19
+
20
+ def start(window, num_groups_init = 1, num_groups_load = 1, initial_proportion = 0.7)
21
+ @window = window
22
+ @num_groups_init = num_groups_init
23
+ @num_groups_load = num_groups_load
24
+ @initial_proportion = initial_proportion
25
+
26
+ ResourceGroupManager.instance.initialise_resource_group("Bootstrap")
27
+
28
+ overlay_mgr = OverlayManager.instance
29
+ @load_overlay = overlay_mgr.get_by_name("Core/LoadOverlay")
30
+
31
+ unless @load_overlay
32
+ raise "Cannot find loading overlay"
33
+ end
34
+
35
+ @load_overlay.show
36
+
37
+ # Save links the loading text elements
38
+ @loading_bar_element = overlay_mgr.get_overlay_element("Core/LoadPanel/Bar/Progress")
39
+ @loading_comment_element = overlay_mgr.get_overlay_element("Core/LoadPanel/Comment")
40
+ @loading_description_element = overlay_mgr.get_overlay_element("Core/LoadPanel/Description")
41
+
42
+ bar = overlay_mgr.get_overlay_element("Core/LoadPanel/Bar")
43
+ @progress_bar_max_size = bar.get_width
44
+ @loading_bar_element.set_width(0)
45
+
46
+ # See superclass
47
+ register_as_listener
48
+ end
49
+
50
+ def finish
51
+ @load_overlay.hide
52
+
53
+ # See superclass
54
+ unregister_as_listener
55
+ end
56
+
57
+ def resource_group_scripting_started(group_name, count)
58
+ unless @num_groups_init > 0
59
+ raise "You are initializing groups when you said you would not, failing before causing x / 0 error"
60
+ end
61
+
62
+ @progress_bar_inc = @progress_bar_max_size * @initial_proportion / (count * 1.0)
63
+ @progress_bar_inc /= @num_groups_init
64
+
65
+ @loading_description_element.set_caption("Parsing scripts...")
66
+ @window.update
67
+ end
68
+
69
+ def script_parse_started(script_name)
70
+ @loading_comment_element.set_caption(script_name)
71
+ @window.update
72
+ end
73
+
74
+ def script_parse_ended(script_name)
75
+ @loading_bar_element.set_width(@loading_bar_element.get_width + @progress_bar_inc)
76
+ @window.update
77
+ end
78
+
79
+ def resource_group_scripting_ended(group_name)
80
+ end
81
+
82
+ def resource_group_load_started(group_name, count)
83
+ puts "", "", "Resource group started #{group_name}", "", ""
84
+ unless @num_groups_load > 0
85
+ raise "You are initializing groups when you said you would not, failing before causing x / 0 error"
86
+ end
87
+
88
+ @progress_bar_inc = @progress_bar_max_size * (1 - @initial_proportion) / (count * 1.0)
89
+ @progress_bar_inc /= @num_groups_load
90
+ @loading_description_element.set_caption("Loading resources...")
91
+ @window.update
92
+ end
93
+
94
+ def resource_load_started(resource)
95
+ @loading_comment_element.set_caption(resource.get_name)
96
+ @window.update
97
+ end
98
+
99
+ def resource_load_ended()
100
+ end
101
+
102
+ def world_geometry_stage_started(description)
103
+ @loading_comment_element.set_caption(description)
104
+ @window.update
105
+ end
106
+
107
+ def world_geometry_stage_ended
108
+ @loading_bar_element.set_width(@loading_bar_element.get_width + @progress_bar_inc)
109
+ @window.update
110
+ end
111
+
112
+ def resource_group_load_ended(name)
113
+ end
114
+ end
115
+ end
data/lib/constants.rb ADDED
@@ -0,0 +1,51 @@
1
+ module Ogre
2
+ class Vector3
3
+ def self.ZERO
4
+ Vector3.new(0, 0, 0)
5
+ end
6
+
7
+ def self.UNIT_X
8
+ Vector3.new(1, 0, 0)
9
+ end
10
+
11
+ def self.UNIT_Y
12
+ Vector3.new(0, 1, 0)
13
+ end
14
+
15
+ def self.UNIT_Z
16
+ Vector3.new(0, 0, 1)
17
+ end
18
+
19
+ def self.NEGATIVE_UNIT_X
20
+ Vector3.new(-1, 0, 0)
21
+ end
22
+
23
+ def self.NEGATIVE_UNIT_Y
24
+ Vector3.new(0, -1, 0)
25
+ end
26
+
27
+ def self.NEGATIVE_UNIT_Z
28
+ Vector3.new(0, 0, -1)
29
+ end
30
+
31
+ def self.UNIT_SCALE
32
+ Vector3.new(1, 1, 1)
33
+ end
34
+ end
35
+
36
+ class Vector4
37
+ def self.ZERO
38
+ Vector4.new(0,0,0,0)
39
+ end
40
+ end
41
+
42
+ class Quaternion
43
+ def self.ZERO
44
+ Quaternion.new(0.0,0.0,0.0,0.0)
45
+ end
46
+
47
+ def self.IDENTITY
48
+ Quaternion.new(1.0,0.0,0.0,0.0)
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,42 @@
1
+ module Ogre
2
+
3
+ class SubMesh
4
+ alias_method :use_shared_vertices?, :useSharedVertices
5
+ alias_method :use_shared_vertices=, :useSharedVertices=
6
+
7
+ alias_method :vertex_data, :vertexData
8
+ alias_method :vertex_data=, :vertexData=
9
+
10
+ alias_method :index_data, :indexData
11
+ alias_method :index_data=, :indexData=
12
+
13
+ # SubMesh is a friend of Mesh, not a subclass...
14
+ #alias_method :shared_vertex_data, :sharedVertexData
15
+ #alias_method :shared_vertex_data=, :sharedVertexData=
16
+ end
17
+
18
+ class VertexData
19
+ alias_method :vertex_declaration, :vertexDeclaration
20
+ alias_method :vertex_declaration=, :vertexDeclaration=
21
+
22
+ alias_method :vertex_buffer_binding, :vertexBufferBinding
23
+ alias_method :vertex_buffer_binding=, :vertexBufferBinding=
24
+
25
+ alias_method :vertex_start, :vertexStart
26
+ alias_method :vertex_start=, :vertexStart=
27
+
28
+ alias_method :vertex_count, :vertexCount
29
+ alias_method :vertex_count=, :vertexCount=
30
+ end
31
+
32
+ class IndexData
33
+ alias_method :index_buffer, :indexBuffer
34
+ alias_method :index_buffer=, :indexBuffer=
35
+
36
+ alias_method :index_start, :indexStart
37
+ alias_method :index_start=, :indexStart=
38
+
39
+ alias_method :index_count, :indexCount
40
+ alias_method :index_count=, :indexCount=
41
+ end
42
+ end
data/lib/ogre.dll ADDED
Binary file
data/lib/ruby_ois.dll ADDED
Binary file
data/ogre.rb ADDED
@@ -0,0 +1,25 @@
1
+ require File.dirname(__FILE__)+'/platform'
2
+
3
+ $LOAD_PATH << File.expand_path(File.dirname(__FILE__))
4
+ $LOAD_PATH << File.expand_path(File.dirname(__FILE__) + "/lib")
5
+
6
+ # Ruby always looks for .so first, instead of .dll if on windows.
7
+ # So, force .dll on windows environments
8
+ if Platform.windows?
9
+ require 'lib/ogre.dll'
10
+ require 'lib/ruby_ois.dll'
11
+ # require 'lib/navi.dll'
12
+
13
+ else
14
+ require 'lib/ogre'
15
+ require 'lib/ruby_ois'
16
+ end
17
+
18
+ # Ick, fix this? Doing this because the native OIS binary is infact
19
+ # named OIS.dll, and was causing conflicts on my system.
20
+ module OIS
21
+ include Ruby_ois
22
+ end
23
+
24
+ require 'constants'
25
+ require 'method_fixes'
data/platform.rb ADDED
@@ -0,0 +1,23 @@
1
+ # Helper functions for determining platform
2
+
3
+ class Platform
4
+ def self.mac?
5
+ return PLATFORM =~ /darwin/
6
+ end
7
+
8
+ def self.windows?
9
+ return PLATFORM =~ /mswin/
10
+ end
11
+
12
+ def self.linux?
13
+ PLATFORM =~ /linux/
14
+ end
15
+ end
16
+
17
+ # Used to get around stupid windows STL issues when ruby.h is included first.
18
+ # NOTE: It would better to do this with SWIG, but I could not figure out how.
19
+ def insert_headers(file)
20
+ contents = File.open(file).read
21
+ header = yield+"\n"
22
+ File.open(file, "w").write(header+contents)
23
+ end