ruby-ogre 0.0.2-x86-linux → 0.0.3-x86-linux

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. data/README.md +80 -5
  2. data/Rakefile +26 -19
  3. data/bindings/ogre/interface/Rakefile +22 -0
  4. data/bindings/ogre/interface/ogre.i +3 -1
  5. data/bindings/ogre/interface/ogre_wrap.cpp +99671 -17485
  6. data/bindings/ogre/interface/ogre_wrap.o +0 -0
  7. data/bindings/ogrebites/interface/Rakefile +22 -0
  8. data/bindings/ogrebites/interface/ogrebites.i +1 -1
  9. data/bindings/ogrebites/interface/ogrebites_wrap.cpp +728 -728
  10. data/bindings/ogrebites/interface/ogrebites_wrap.h +2 -2
  11. data/bindings/ogrebites/interface/ogrebites_wrap.o +0 -0
  12. data/bindings/ois/interface/Rakefile +22 -0
  13. data/bindings/ois/interface/ois.i +1 -1
  14. data/bindings/ois/interface/ois_wrap.cpp +553 -553
  15. data/bindings/ois/interface/ois_wrap.h +2 -2
  16. data/bindings/ois/interface/ois_wrap.o +0 -0
  17. data/bindings/procedural/interface/Rakefile +22 -0
  18. data/bindings/procedural/interface/procedural.i +1 -1
  19. data/bindings/procedural/interface/procedural_wrap.cpp +1247 -1247
  20. data/bindings/procedural/interface/procedural_wrap.o +0 -0
  21. data/lib/{Ogre.so → ogre.so} +0 -0
  22. data/lib/ogre_config.rb +37 -0
  23. data/lib/ogrebites.so +0 -0
  24. data/lib/{OIS.so → ois.so} +0 -0
  25. data/lib/{Procedural.so → procedural.so} +0 -0
  26. data/lib/{Version.rb → version.rb} +1 -1
  27. data/sample/charactor/camera_mover.rb +184 -0
  28. data/sample/{Charactor → charactor}/plugins.cfg +0 -0
  29. data/sample/{Charactor → charactor}/resources.cfg +0 -0
  30. data/sample/{Charactor → charactor}/sinbad +1 -1
  31. data/sample/charactor/sinbad.rb +246 -0
  32. data/sample/{Charactor → charactor}/sinbad.win +1 -1
  33. data/sample/{Charactor/SinbadCharacter.rb → charactor/sinbad_character.rb} +125 -125
  34. data/sample/charactor/ui_listener.rb +65 -0
  35. metadata +22 -21
  36. data/bindings/ogre/interface/Makefile +0 -19
  37. data/bindings/ogrebites/interface/Makefile +0 -19
  38. data/bindings/ois/interface/Makefile +0 -19
  39. data/bindings/procedural/interface/Makefile +0 -19
  40. data/lib/OgreBites.so +0 -0
  41. data/lib/OgreConfig.rb +0 -37
  42. data/sample/Charactor/CameraMover.rb +0 -184
  43. data/sample/Charactor/Sinbad.rb +0 -246
  44. data/sample/Charactor/UiListener.rb +0 -65
Binary file
@@ -0,0 +1,37 @@
1
+ class OgreConfig
2
+ def self.get_top_dir
3
+ File.dirname(File.dirname(File.expand_path(__FILE__)))
4
+ end
5
+
6
+ def self.get_ld_library_path
7
+ "#{get_top_dir()}/deps/lib"
8
+ end
9
+
10
+ def self.get_deps_lib_path
11
+ "#{get_top_dir()}/deps/lib"
12
+ end
13
+
14
+ def self.get_deps_inc_path
15
+ "#{get_top_dir()}/deps/include"
16
+ end
17
+
18
+ def self.get_inc_flags
19
+ "-I#{get_top_dir()}/deps/include/OGRE/ " +
20
+ "-I#{get_top_dir()}/deps/include/OGRE/GLX/ " +
21
+ "-I#{get_top_dir()}/deps/include/OGRE/Paging/ " +
22
+ "-I#{get_top_dir()}/deps/include/OGRE/RTShaderSystem/ " +
23
+ "-I#{get_top_dir()}/deps/include/OGRE/Terrain "
24
+ end
25
+
26
+ def self.get_lib_path
27
+ File.dirname(File.expand_path(__FILE__))
28
+ end
29
+
30
+ def self.get_plugin_folder
31
+ "#{get_top_dir()}/deps/lib/OGRE"
32
+ end
33
+
34
+ def self.get_resource_folder
35
+ "#{get_top_dir()}/deps/share/OGRE/media/"
36
+ end
37
+ end
data/lib/ogrebites.so ADDED
Binary file
Binary file
Binary file
@@ -1,5 +1,5 @@
1
1
  module Ruby
2
2
  module Ogre
3
- VERSION = "0.0.2"
3
+ VERSION = "0.0.3"
4
4
  end
5
5
  end
@@ -0,0 +1,184 @@
1
+ class CameraMover
2
+ CS_FREELOOK = 0
3
+ CS_ORBIT = 1
4
+ CS_MANUAL = 2
5
+ CS_TPS = 3
6
+
7
+ CAM_HEIGHT = 5.0
8
+
9
+ attr_accessor :height
10
+ attr_accessor :cameraPivot
11
+ attr_accessor :camera
12
+
13
+ def initialize(cam)
14
+ @camera = cam
15
+ @camera.set_position(0, 0, 0)
16
+ @camera.set_near_clip_distance(0.1)
17
+
18
+ @style = CS_FREELOOK
19
+
20
+ # CS_FREELOOK, CS_ORBIT, CS_MANUAL
21
+ @sdkCameraMan = Ogrebites::SdkCameraMan.new(@camera)
22
+ @evtFrame = Ogre::FrameEvent.new
23
+
24
+ # CS_TPS
25
+ @height = CAM_HEIGHT
26
+ @cameraPivot = cam.get_scene_manager().get_root_scene_node().create_child_scene_node()
27
+ @cameraGoal = @cameraPivot.create_child_scene_node(Ogre::Vector3.new(0, 0, 5))
28
+
29
+ @cameraPivot.set_fixed_yaw_axis(true)
30
+ @cameraGoal.set_fixed_yaw_axis(true)
31
+
32
+ @pivotPitch = 0
33
+
34
+ end
35
+
36
+ def set_style(style)
37
+ @style = style
38
+ case @style
39
+ when CS_FREELOOK
40
+ @sdkCameraMan.set_style(Ogrebites::CS_FREELOOK)
41
+ when CS_ORBIT
42
+ @sdkCameraMan.set_style(Ogrebites::CS_ORBIT)
43
+ else # CS_MANUAL, CS_TPS
44
+ @sdkCameraMan.set_style(Ogrebites::CS_MANUAL)
45
+ end
46
+ end
47
+
48
+ def set_target(target)
49
+ @target = target
50
+ if @style == CS_TPS
51
+ @camera.set_auto_tracking(false)
52
+ @camera.move_relative(Ogre::Vector3.new(0, 0, 0))
53
+ update_camera(1.0)
54
+ else
55
+ @sdkCameraMan.set_target(target)
56
+ end
57
+ end
58
+
59
+ def set_position(pos)
60
+ @camera.set_position(pos) if @style == CS_FREELOOK
61
+ end
62
+
63
+ def look_at(pos)
64
+ @camera.look_at(pos) if @style == CS_FREELOOK
65
+ end
66
+
67
+ def set_yaw_pitch_dist(yaw, pitch, dist)
68
+ @sdkCameraMan.set_yaw_pitch_dist(yaw, pitch, dist) if @style == CS_ORBIT
69
+ end
70
+
71
+ def move_forward(bl)
72
+ evt = Ois::KeyEvent.new(nil, Ois::KC_W, 0)
73
+ if bl
74
+ @sdkCameraMan.inject_key_down(evt)
75
+ else
76
+ @sdkCameraMan.inject_key_up(evt)
77
+ end
78
+ end
79
+
80
+ def move_backward(bl)
81
+ evt = Ois::KeyEvent.new(nil, Ois::KC_S, 0)
82
+ if bl
83
+ @sdkCameraMan.inject_key_down(evt)
84
+ else
85
+ @sdkCameraMan.inject_key_up(evt)
86
+ end
87
+ end
88
+
89
+ def move_left(bl)
90
+ evt = Ois::KeyEvent.new(nil, Ois::KC_A, 0)
91
+ if bl
92
+ @sdkCameraMan.inject_key_down(evt)
93
+ else
94
+ @sdkCameraMan.inject_key_up(evt)
95
+ end
96
+ end
97
+
98
+ def move_right(bl)
99
+ evt = Ois::KeyEvent.new(nil, Ois::KC_D, 0)
100
+ if bl
101
+ @sdkCameraMan.inject_key_down(evt)
102
+ else
103
+ @sdkCameraMan.inject_key_up(evt)
104
+ end
105
+ end
106
+
107
+
108
+ def update(delta)
109
+ if (@style == CS_TPS)
110
+ update_camera(delta)
111
+ else
112
+ @evtFrame.timeSinceLastFrame = delta
113
+ @sdkCameraMan.frame_rendering_queued(@evtFrame)
114
+ end
115
+ end
116
+
117
+ #
118
+ # This method moves this camera position to the goal position smoothly.
119
+ # In general, should be called in the frameRenderingQueued handler.
120
+ #
121
+ def update_camera(deltaTime)
122
+ # place the camera pivot roughly at the character's shoulder
123
+ @cameraPivot.set_position(@target.get_position() + Ogre::Vector3.UNIT_Y * @height)
124
+ # move the camera smoothly to the goal
125
+ goalOffset = @cameraGoal._get_derived_position() - @camera.get_position()
126
+ @camera.move(goalOffset * deltaTime * 9.0)
127
+ # always look at the pivot
128
+ @camera.look_at(@cameraPivot._get_derived_position())
129
+ end
130
+
131
+ def mouse_moved(evt)
132
+ if @style == CS_TPS
133
+ update_camera_goal(-0.05 * evt.state.X.rel,
134
+ -0.05 * evt.state.Y.rel,
135
+ -0.0005 * evt.state.Z.rel)
136
+ else
137
+ @sdkCameraMan.inject_mouse_move(evt)
138
+ end
139
+ return true
140
+ end
141
+
142
+ #
143
+ # This method updates the goal position, which this camera should be placed finally.
144
+ # In general, should be called when the mouse is moved.
145
+ # *deltaYaw*::_float_, degree value.
146
+ # *deltaPitch*::_float_, degree value.
147
+ # *deltaZoom*::_float_, zoom
148
+ #
149
+ def update_camera_goal(deltaYaw, deltaPitch, deltaZoom)
150
+ @cameraPivot.yaw(Ogre::Radian.new(Ogre::Degree.new(deltaYaw)), Ogre::Node::TS_WORLD);
151
+ @cameraPivot.pitch(Ogre::Radian.new(Ogre::Degree.new(deltaPitch)), Ogre::Node::TS_LOCAL)
152
+ =begin
153
+ # bound the pitch
154
+ if (!(@pivotPitch + deltaPitch > 25 && deltaPitch > 0) &&
155
+ !(@pivotPitch + deltaPitch < -60 && deltaPitch < 0))
156
+
157
+ @cameraPivot.pitch(Ogre::Degree.new(deltaPitch).valueRadians, Ogre::Node::TS_LOCAL)
158
+ @pivotPitch += deltaPitch;
159
+ end
160
+ =end
161
+ dist = @cameraGoal._get_derived_position().distance(@cameraPivot._get_derived_position())
162
+ distChange = deltaZoom * dist;
163
+
164
+ # puts "dist: #{dist}:#{distChange}"
165
+
166
+ # bound the zoom
167
+ if (!(dist + distChange < 8 && distChange < 0) &&
168
+ !(dist + distChange > 25 && distChange > 0))
169
+
170
+ @cameraGoal.translate(Ogre::Vector3.new(0, 0, distChange), Ogre::Node::TS_LOCAL)
171
+ end
172
+ end
173
+
174
+ def mouse_pressed(mouseEvent, mouseButtonID)
175
+ @sdkCameraMan.inject_mouse_down(mouseEvent, mouseButtonID) if @style == CS_ORBIT
176
+ return true
177
+ end
178
+
179
+ def mouse_released(mouseEvent, mouseButtonID)
180
+ @sdkCameraMan.inject_mouse_up(mouseEvent, mouseButtonID) if @style == CS_ORBIT
181
+ return true
182
+ end
183
+
184
+ end
File without changes
File without changes
@@ -2,4 +2,4 @@
2
2
 
3
3
  FILE_PATH=`dirname "$0"`
4
4
 
5
- LD_LIBRARY_PATH=$FILE_PATH/../../deps/lib:$LD_LIBRARY_PATH ruby $FILE_PATH/Sinbad.rb
5
+ LD_LIBRARY_PATH=$FILE_PATH/../../deps/lib:$LD_LIBRARY_PATH ruby $FILE_PATH/sinbad.rb
@@ -0,0 +1,246 @@
1
+
2
+ $LOAD_PATH.push(File.dirname(File.expand_path(__FILE__)) + "/../../lib")
3
+
4
+ require "ogre"
5
+ require "ois"
6
+ require "ogrebites"
7
+ require "ogre_config"
8
+ require_relative "ui_listener"
9
+ require_relative "camera_mover"
10
+ require_relative "sinbad_character"
11
+
12
+ class Sinbad < Ogre::FrameListener
13
+ def initialize()
14
+ super # initialize Ogre::FrameListener.
15
+ @root = nil
16
+ @window = nil
17
+ @camera = nil
18
+ @sceneMgr = nil
19
+ @inputManager = nil
20
+ @mouse = nil
21
+ @keyboard = nil
22
+ @trayMgr = nil
23
+
24
+ @quit = false
25
+
26
+ @Info = {}
27
+ @Info["Help"] =
28
+ "Use the WASD keys to move Sinbad, and the space bar to jump. \n" +
29
+ " Use mouse to look around and mouse wheel to zoom.\n" +
30
+ " Press Q to take out or put back Sinbad's swords. With the swords equipped, " +
31
+ "you can left click to slice vertically or right click to slice horizontally.\n" +
32
+ " When the swords are not equipped, press E to start/stop a silly dance routine."
33
+
34
+ $filePath = File.dirname(File.expand_path(__FILE__))
35
+ end
36
+
37
+ def run
38
+ init_root()
39
+ init_resources()
40
+ init_managers()
41
+ init_listeners()
42
+ init_camera()
43
+
44
+ # load "General" group resources into ResourceGroupManager.
45
+ @trayMgr.show_loading_bar(1, 0)
46
+ Ogre::ResourceGroupManager::get_singleton().initialise_resource_group("General")
47
+ @trayMgr.hide_loading_bar()
48
+ Ogre::TextureManager::get_singleton().set_default_num_mipmaps(5)
49
+
50
+ @trayMgr.show_frame_stats(Ogrebites::TL_BOTTOMLEFT)
51
+ @trayMgr.show_logo(Ogrebites::TL_BOTTOMRIGHT)
52
+ @trayMgr.hide_cursor()
53
+
54
+ setup_content()
55
+
56
+ @root.start_rendering()
57
+ end
58
+
59
+ def init_root()
60
+ @root = Ogre::Root.new("")
61
+ load_plugins()
62
+
63
+ return false unless @root.show_config_dialog()
64
+ @window = @root.initialise(true, "Sinbad")
65
+ @root.add_frame_listener(self)
66
+ end
67
+
68
+ def load_plugins()
69
+ cfg = Ogre::ConfigFile.new
70
+ cfg.load("#{$filePath}/plugins.cfg")
71
+
72
+ pluginDir = cfg.get_setting("PluginFolder")
73
+ pluginDir += "/" if (pluginDir.length > 0) && (pluginDir[-1] != '/')
74
+
75
+ cfg.each_settings {|secName, keyName, valueName|
76
+ fullPath = pluginDir + valueName
77
+ fullPath.sub!("<SystemPluginFolder>", OgreConfig::get_plugin_folder)
78
+ @root.load_plugin(fullPath) if (keyName == "Plugin")
79
+ }
80
+ end
81
+
82
+ def init_resources()
83
+ # Load resource paths from config file
84
+ cfg = Ogre::ConfigFile.new
85
+ cfg.load("#{$filePath}/resources.cfg")
86
+
87
+ resourceDir = cfg.get_setting("ResourceFolder")
88
+ resourceDir += "/" if (resourceDir.length > 0) && (resourceDir[-1] != '/')
89
+
90
+ cfg.each_settings {|secName, keyName, valueName|
91
+ next if (keyName == "ResourceFolder")
92
+
93
+ fullPath = resourceDir + valueName
94
+ fullPath.sub!("<SystemResourceFolder>", OgreConfig::get_resource_folder)
95
+ Ogre::ResourceGroupManager::get_singleton().add_resource_location(fullPath,
96
+ keyName,
97
+ secName)
98
+ }
99
+ end
100
+
101
+ def init_managers()
102
+ # initialize InputManager
103
+ windowHnd = Ogre::Intp.new
104
+ @window.get_custom_attribute("WINDOW", windowHnd)
105
+ windowHndStr = sprintf("%d", windowHnd.value())
106
+ pl = Ois::ParamList.new
107
+ pl["WINDOW"] = windowHndStr
108
+ @inputManager = Ois::InputManager::create_input_system(pl)
109
+ @keyboard = @inputManager.create_input_object(Ois::OISKeyboard, true).to_keyboard()
110
+ @mouse = @inputManager.create_input_object(Ois::OISMouse, true).to_mouse()
111
+
112
+ # initialize trayManager
113
+ Ogre::ResourceGroupManager::get_singleton().initialise_resource_group("Essential")
114
+ @trayMgr = Ogrebites::SdkTrayManager.new("Base", @window, @mouse);
115
+ ms = @mouse.get_mouse_state()
116
+ ms.width = @window.get_width()
117
+ ms.height = @window.get_height()
118
+
119
+ # initialize sceneMgr
120
+ @sceneMgr = @root.create_scene_manager(Ogre::ST_GENERIC)
121
+ @sceneMgr.set_shadow_technique(Ogre::SHADOWTYPE_STENCIL_ADDITIVE)
122
+
123
+ end
124
+
125
+ def init_listeners()
126
+ @keyListener = KeyListener.new(self)
127
+ @keyboard.set_event_callback(@keyListener)
128
+
129
+ @mouseListener = MouseListener.new(self)
130
+ @mouse.set_event_callback(@mouseListener)
131
+
132
+ @trayListener = TrayListener.new(self)
133
+ @trayMgr.set_listener(@trayListener)
134
+ end
135
+
136
+ def init_camera()
137
+ # initialize camera
138
+ @camera = @sceneMgr.create_camera("FixCamera")
139
+
140
+ # Create one viewport, entire window
141
+ @vp = @window.add_viewport(@camera);
142
+ @vp.set_background_colour(Ogre::ColourValue.new(0, 0, 0))
143
+ # Alter the camera aspect ratio to match the viewport
144
+ @camera.set_aspect_ratio(Float(@vp.get_actual_width()) / Float(@vp.get_actual_height()))
145
+ end
146
+
147
+ def setup_content()
148
+ # set background and some fog
149
+ @vp.set_background_colour(Ogre::ColourValue.new(1.0, 1.0, 0.8))
150
+ @sceneMgr.set_fog(Ogre::FOG_LINEAR, Ogre::ColourValue.new(1.0, 1.0, 0.8), 0, 15, 100)
151
+
152
+ # set shadow properties
153
+ @sceneMgr.set_shadow_technique(Ogre::SHADOWTYPE_TEXTURE_MODULATIVE)
154
+ @sceneMgr.set_shadow_colour(Ogre::ColourValue.new(0.5, 0.5, 0.5))
155
+ @sceneMgr.set_shadow_texture_size(1024)
156
+ @sceneMgr.set_shadow_texture_count(1)
157
+
158
+ # use a small amount of ambient lighting
159
+ @sceneMgr.set_ambient_light(Ogre::ColourValue.new(0.3, 0.3, 0.3))
160
+
161
+ # add a bright light above the scene
162
+ @light = @sceneMgr.create_light()
163
+ @light.set_type(Ogre::Light::LT_POINT)
164
+ @light.set_position(-10, 40, 20)
165
+ @light.set_specular_colour(Ogre::ColourValue.White)
166
+
167
+ # create a floor mesh resource
168
+ Ogre::MeshManager::get_singleton().create_plane("floor",
169
+ Ogre::ResourceGroupManager.DEFAULT_RESOURCE_GROUP_NAME,
170
+ Ogre::Plane.new(Ogre::Vector3.UNIT_Y, 0),
171
+ 100, 100, 10, 10, true, 1, 10, 10,
172
+ Ogre::Vector3.UNIT_Z)
173
+
174
+ # create a floor entity, give it a material, and place it at the origin
175
+ @floor = @sceneMgr.create_entity("Floor", "floor")
176
+ @floor.set_material_name("Examples/Rockwall")
177
+ @floor.set_cast_shadows(false)
178
+ @sceneMgr.get_root_scene_node().attach_object(@floor)
179
+
180
+ @cameraMover = CameraMover.new(@camera)
181
+ @cameraMover.set_position(Ogre::Vector3.new(10, 10, 10))
182
+ @cameraMover.look_at(Ogre::Vector3.new(0, 0, 0))
183
+
184
+ @char = SinbadCharacter.new(@sceneMgr, @cameraMover)
185
+
186
+ items = []
187
+ items.push("Help")
188
+ @help = @trayMgr.create_params_panel(Ogrebites::TL_TOPLEFT, "HelpMessage", 100, items)
189
+ @help.set_param_value(Ogre::UTFString.new("Help"), Ogre::UTFString.new("H / F1"))
190
+ end
191
+
192
+ def frame_rendering_queued(evt)
193
+ @keyboard.capture()
194
+ @mouse.capture()
195
+ @trayMgr.frame_rendering_queued(evt)
196
+
197
+ @char.add_time(evt.timeSinceLastFrame)
198
+ @cameraMover.update(evt.timeSinceLastFrame)
199
+
200
+ return !@quit
201
+ end
202
+
203
+ def key_pressed(keyEvent)
204
+ @char.inject_key_down(keyEvent)
205
+
206
+ case keyEvent.key
207
+ when Ois::KC_ESCAPE
208
+ @quit =true
209
+ when Ois::KC_H, Ois::KC_F1
210
+ if (!@trayMgr.is_dialog_visible() && @Info["Help"] != "")
211
+ @trayMgr.show_ok_dialog(Ogre::UTFString.new("Help"), Ogre::UTFString.new(@Info["Help"]))
212
+ else
213
+ @trayMgr.close_dialog()
214
+ end
215
+ end
216
+
217
+ return true
218
+ end
219
+
220
+ def key_released(keyEvent)
221
+ @char.inject_key_up(keyEvent)
222
+ return true
223
+ end
224
+
225
+ def mouse_moved(mouseEvent)
226
+ return true if @trayMgr.inject_mouse_move(mouseEvent)
227
+ @cameraMover.mouse_moved(mouseEvent)
228
+ return true
229
+ end
230
+
231
+ def mouse_pressed(mouseEvent, mouseButtonID)
232
+ return true if @trayMgr.inject_mouse_down(mouseEvent, mouseButtonID)
233
+ @cameraMover.mouse_pressed(mouseEvent, mouseButtonID)
234
+ @char.inject_mouse_down(mouseEvent, mouseButtonID)
235
+ return true
236
+ end
237
+
238
+ def mouse_released(mouseEvent, mouseButtonID)
239
+ return true if @trayMgr.inject_mouse_up(mouseEvent, mouseButtonID)
240
+ @cameraMover.mouse_released(mouseEvent, mouseButtonID)
241
+ return true
242
+ end
243
+ end
244
+
245
+ sinbad = Sinbad.new
246
+ sinbad.run