teienlib 0.0.1-x86-linux → 0.0.2-x86-linux

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.
@@ -1,3 +1,3 @@
1
1
  module Teienlib
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -0,0 +1,68 @@
1
+ class Box < Bullet::BtMotionState
2
+ @@cnt = 0
3
+
4
+ attr_accessor :id
5
+
6
+ def initialize(dynamics_world, scene_mgr, mass, x, y, z, color)
7
+ super() # needed by Bullet::BtMotionState
8
+
9
+ @dynamics_world = dynamics_world
10
+ @scene_mgr = scene_mgr
11
+ @x = x
12
+ @y = y
13
+ @z = z
14
+ @color = color
15
+ @@cnt += 1
16
+ @id = @@cnt
17
+ @name = "box_#{@id}"
18
+
19
+ # create a physics object.
20
+ @colObj = Bullet::BtBoxShape.new(Bullet::BtVector3.new(x, y, z))
21
+ inertia = Bullet::BtVector3.new()
22
+ @colObj.calculateLocalInertia(mass, inertia)
23
+ @rigid_body = Bullet::BtRigidBody.new(mass, self, @colObj, inertia)
24
+ dynamics_world.addRigidBody(@rigid_body)
25
+
26
+ # create a view object.
27
+ gen = Procedural::BoxGenerator.new()
28
+ gen.setSizeX(x * 2.0).setSizeY(y * 2.0).setSizeZ(z * 2.0)
29
+ gen.setNumSegX(1).setNumSegY(1).setNumSegZ(1)
30
+ gen.setUTile(1.0).setVTile(1.0).realizeMesh(@name)
31
+ @entity = scene_mgr.createEntity(@name)
32
+ @entity.setCastShadows(true)
33
+ @entity.setMaterialName("Examples/BumpyMetal")
34
+ @scene_node = scene_mgr.getRootSceneNode().createChildSceneNode()
35
+ @scene_node.attachObject(@entity)
36
+
37
+ # position/rotation
38
+ @transform = Bullet::BtTransform.new()
39
+ @transform.setIdentity()
40
+ end
41
+
42
+ # called through Bullet::BtMotionState when this rigid_body transform is changed
43
+ # on bullet simulation step.
44
+ def setWorldTransform(worldTrans)
45
+ @transform = Bullet::BtTransform.new(worldTrans)
46
+ newPos = @transform.getOrigin()
47
+ newRot = @transform.getRotation()
48
+ return if (newRot.x.nan?)
49
+
50
+ @scene_node.setPosition(newPos.x, newPos.y, newPos.z)
51
+ @scene_node.setOrientation(newRot.w, newRot.x, newRot.y, newRot.z)
52
+ end
53
+
54
+ # called by Bullet::BtMotionState
55
+ def getWorldTransform(worldTrans)
56
+ end
57
+
58
+ def set_position(x, y, z)
59
+ @scene_node.setPosition(x, y, z)
60
+ @transform.setOrigin(Bullet::BtVector3.new(x, y, z))
61
+ @rigid_body.setCenterOfMassTransform(@transform)
62
+ end
63
+
64
+ def apply_impulse(imp, rel = Bullet::BtVector3.new(0, 0, 0))
65
+ @rigid_body.activate(true)
66
+ @rigid_body.applyImpulse(imp, rel)
67
+ end
68
+ end
@@ -0,0 +1,190 @@
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 :camera_pivot
11
+ attr_accessor :camera
12
+
13
+ def initialize(cam)
14
+ @camera = cam
15
+ @camera.setPosition(0, 0, 0)
16
+ @camera.setNearClipDistance(0.1)
17
+
18
+ @style = CS_FREELOOK
19
+
20
+ # CS_FREELOOK, CS_ORBIT, CS_MANUAL
21
+ @sdk_camera_man = OgreBites::SdkCameraMan.new(@camera)
22
+ @evt_frame = Ogre::FrameEvent.new
23
+
24
+ # CS_TPS
25
+ @height = CAM_HEIGHT
26
+ @camera_pivot = cam.getSceneManager().getRootSceneNode().createChildSceneNode()
27
+ @camera_goal = @camera_pivot.createChildSceneNode(Ogre::Vector3.new(0, 0, 5))
28
+
29
+ @camera_pivot.setFixedYawAxis(true)
30
+ @camera_goal.setFixedYawAxis(true)
31
+
32
+ @pivot_pitch = 0
33
+
34
+ end
35
+
36
+ def set_style(style)
37
+ @style = style
38
+ case @style
39
+ when CS_FREELOOK
40
+ @sdk_camera_man.setStyle(OgreBites::CS_FREELOOK)
41
+ when CS_ORBIT
42
+ @sdk_camera_man.setStyle(OgreBites::CS_ORBIT)
43
+ else # CS_MANUAL, CS_TPS
44
+ @sdk_camera_man.setStyle(OgreBites::CS_MANUAL)
45
+ end
46
+ end
47
+
48
+ def set_target(target)
49
+ @target = target
50
+ if @style == CS_TPS
51
+ @camera.setAutoTracking(false)
52
+ @camera.moveRelative(Ogre::Vector3.new(0, 0, 0))
53
+ update_camera(1.0)
54
+ else
55
+ @sdk_camera_man.setTarget(target.pivotSceneNode)
56
+ end
57
+ end
58
+
59
+ def set_position(pos)
60
+ @camera.setPosition(pos) if @style == CS_FREELOOK
61
+ end
62
+
63
+ def look_at(pos)
64
+ @camera.lookAt(pos) if @style == CS_FREELOOK
65
+ end
66
+
67
+ def set_yaw_pitch_dist(yaw, pitch, dist)
68
+ @sdk_camera_man.setYawPitchDist(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
+ @sdk_camera_man.injectKeyDown(evt)
75
+ else
76
+ @sdk_camera_man.injectKeyUp(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
+ @sdk_camera_man.injectKeyDown(evt)
84
+ else
85
+ @sdk_camera_man.injectKeyUp(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
+ @sdk_camera_man.injectKeyDown(evt)
93
+ else
94
+ @sdk_camera_man.injectKeyUp(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
+ @sdk_camera_man.injectKeyDown(evt)
102
+ else
103
+ @sdk_camera_man.injectKeyUp(evt)
104
+ end
105
+ end
106
+
107
+
108
+ def update(delta)
109
+ if (@style == CS_TPS)
110
+ update_camera(delta)
111
+ else
112
+ @evt_frame.timeSinceLastFrame = delta
113
+ @sdk_camera_man.frameRenderingQueued(@evt_frame)
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
+ @camera_pivot.setPosition(@target.get_position() + Ogre::Vector3.UNIT_Y * @height)
124
+ # move the camera smoothly to the goal
125
+ goalOffset = @camera_goal._getDerivedPosition() - @camera.getPosition()
126
+ @camera.move(goalOffset * deltaTime * 9.0)
127
+ # always look at the pivot
128
+ @camera.lookAt(@camera_pivot._getDerivedPosition())
129
+ end
130
+
131
+ def mouse_moved(evt)
132
+ if @style == CS_TPS
133
+
134
+ # deal with a warp.
135
+ if evt.state.X.rel.abs > 300
136
+ #puts "#{evt.state.X.rel}, #{evt.state.X.abs}"
137
+ return true
138
+ end
139
+
140
+ update_camera_goal(-0.05 * evt.state.X.rel,
141
+ -0.05 * evt.state.Y.rel,
142
+ -0.0005 * evt.state.Z.rel)
143
+ else
144
+ @sdk_camera_man.injectMouseMove(evt)
145
+ end
146
+ return true
147
+ end
148
+
149
+ #
150
+ # This method updates the goal position, which this camera should be placed finally.
151
+ # In general, should be called when the mouse is moved.
152
+ # *deltaYaw*::_float_, degree value.
153
+ # *deltaPitch*::_float_, degree value.
154
+ # *deltaZoom*::_float_, zoom
155
+ #
156
+ def update_camera_goal(deltaYaw, deltaPitch, deltaZoom)
157
+
158
+ @camera_pivot.yaw(Ogre::Radian.new(Ogre::Degree.new(deltaYaw)), Ogre::Node::TS_WORLD);
159
+
160
+ # bound the pitch
161
+ if (!(@pivot_pitch + deltaPitch > 25 && deltaPitch > 0) &&
162
+ !(@pivot_pitch + deltaPitch < -60 && deltaPitch < 0))
163
+ @camera_pivot.pitch(Ogre::Radian.new(Ogre::Degree.new(deltaPitch)), Ogre::Node::TS_LOCAL)
164
+ @pivot_pitch += deltaPitch;
165
+ end
166
+ dist = @camera_goal._getDerivedPosition().distance(@camera_pivot._getDerivedPosition())
167
+ distChange = deltaZoom * dist;
168
+
169
+ # puts "dist: #{dist}:#{distChange}"
170
+
171
+ # bound the zoom
172
+ if (!(dist + distChange < 8 && distChange < 0) &&
173
+ !(dist + distChange > 25 && distChange > 0))
174
+
175
+ @camera_goal.translate(Ogre::Vector3.new(0, 0, distChange), Ogre::Node::TS_LOCAL)
176
+ end
177
+ end
178
+
179
+ def mouse_pressed(mouseEvent, mouseButtonID)
180
+ @sdk_camera_man.injectMouseDown(mouseEvent, mouseButtonID) if @style == CS_ORBIT
181
+ return true
182
+ end
183
+
184
+ def mouse_released(mouseEvent, mouseButtonID)
185
+ @sdk_camera_man.injectMouseUp(mouseEvent, mouseButtonID) if @style == CS_ORBIT
186
+ return true
187
+ end
188
+
189
+ end
190
+
@@ -0,0 +1,41 @@
1
+ class Floor < Bullet::BtMotionState
2
+ def initialize(dynamicsWorld, sceneMgr)
3
+ super()
4
+
5
+ x = 10 # width
6
+ y = 1 # depth
7
+ z = 10 # height
8
+ mass = 0.0
9
+
10
+ # create a physics object
11
+ @cshape = Bullet::BtBoxShape.new(Bullet::BtVector3.new(x, 1, z))
12
+ inertia = Bullet::BtVector3.new()
13
+ @cshape.calculateLocalInertia(mass, inertia)
14
+ @rigid_body = Bullet::BtRigidBody.new(mass, self, @cshape, inertia)
15
+ dynamicsWorld.addRigidBody(@rigid_body)
16
+
17
+ # create a floor mesh resource
18
+ Ogre::MeshManager::getSingleton().createPlane("floor",
19
+ Ogre::ResourceGroupManager.DEFAULT_RESOURCE_GROUP_NAME,
20
+ Ogre::Plane.new(Ogre::Vector3.UNIT_Y, 0),
21
+ x * 2, z * 2, 10, 10, true, 1, 10, 10,
22
+ Ogre::Vector3.UNIT_Z)
23
+ @entity = sceneMgr.createEntity("Floor", "floor")
24
+ @entity.setMaterialName("Examples/Rockwall")
25
+ @entity.setCastShadows(false)
26
+ sceneMgr.getRootSceneNode().attachObject(@entity)
27
+
28
+ # set this object's position
29
+ @transform = Bullet::BtTransform.new()
30
+ @transform.setIdentity()
31
+ @transform.setOrigin(Bullet::BtVector3.new(0, -y, 0))
32
+ @rigid_body.setCenterOfMassTransform(@transform)
33
+ end
34
+
35
+ def setWorldTransform(worldTrans)
36
+ end
37
+
38
+ def getWorldTransform(worldTrans)
39
+ end
40
+
41
+ end
@@ -0,0 +1,6 @@
1
+ #!/bin/sh
2
+
3
+ FILE_PATH=`dirname "$0"`
4
+ OGRE_LIB=`ruby -e "require 'OgreConfig'; print OgreConfig.getDepsLibPath"`
5
+
6
+ LD_LIBRARY_PATH=$OGRE_LIB:$LD_LIBRARY_PATH ruby $FILE_PATH/hello.rb
@@ -0,0 +1,300 @@
1
+
2
+ $LOAD_PATH.push(File.dirname(File.expand_path(__FILE__)) + "/../../lib")
3
+
4
+ require "Ogre"
5
+ require "OIS"
6
+ require "OgreBites"
7
+ require "Procedural"
8
+ require "Bullet"
9
+
10
+ require "OgreConfig"
11
+
12
+ require_relative "ui_listener"
13
+ require_relative "camera_mover"
14
+ require_relative "box"
15
+ require_relative "floor"
16
+
17
+ class World < Ogre::FrameListener
18
+ def initialize()
19
+ super() # needed by Ogre::FrameListener
20
+
21
+ @delta_sum = 0
22
+ @quit = false
23
+ @info = {}
24
+ @info["Help"] =
25
+ " Use the ESDF keys to move the camera. \n" +
26
+ " Use the left mouse button to shot a box. \n" +
27
+ " Press Q to quit."
28
+
29
+ $file_path = File.dirname(File.expand_path(__FILE__))
30
+
31
+ # physics
32
+ initPhysics()
33
+
34
+ # view
35
+ initView()
36
+ end
37
+
38
+ def initPhysics()
39
+ # initialize bullet dynamics world.
40
+ @collision_config = Bullet::BtDefaultCollisionConfiguration.new();
41
+ @collision_dispatcher = Bullet::BtCollisionDispatcher.new(@collision_config)
42
+ world_aabb_min = Bullet::BtVector3.new(-3000.0,-500.0, -3000.0)
43
+ world_aabb_max = Bullet::BtVector3.new(3000.0, 500.0, 3000.0)
44
+ max_proxies = 1024 * 4
45
+ @aabb_cache = Bullet::BtAxisSweep3.new(world_aabb_min, world_aabb_max, max_proxies)
46
+ @solver = Bullet::BtSequentialImpulseConstraintSolver.new();
47
+ @dynamics_world = Bullet::BtDiscreteDynamicsWorld.new(@collision_dispatcher, @aabb_cache,
48
+ @solver, @collision_config)
49
+
50
+ gravity = Bullet::BtVector3.new(0.0, -9.8, 0.0)
51
+ @dynamics_world.setGravity(gravity)
52
+ end
53
+
54
+ def initView()
55
+ # initialize Root
56
+ @root = Ogre::Root.new("")
57
+
58
+ # load Plugins
59
+ cfg = Ogre::ConfigFile.new
60
+ cfg.load("#{$file_path}/plugins.cfg")
61
+ pluginDir = cfg.getSetting("PluginFolder")
62
+ pluginDir += "/" if (pluginDir.length > 0) && (pluginDir[-1] != '/')
63
+ cfg.each_Settings {|secName, keyName, valueName|
64
+ fullPath = pluginDir + valueName
65
+ fullPath.sub!("<SystemPluginFolder>", OgreConfig::getPluginFolder)
66
+ @root.loadPlugin(fullPath) if (keyName == "Plugin")
67
+ }
68
+
69
+ # initialize Resources
70
+ cfg = Ogre::ConfigFile.new
71
+ cfg.load("#{$file_path}/resources.cfg")
72
+ resourceDir = cfg.getSetting("ResourceFolder")
73
+ resourceDir += "/" if (resourceDir.length > 0) && (resourceDir[-1] != '/')
74
+ cfg.each_Settings {|secName, keyName, valueName|
75
+ next if (keyName == "ResourceFolder")
76
+ fullPath = resourceDir + valueName
77
+ fullPath.sub!("<SystemResourceFolder>", OgreConfig::getResourceFolder)
78
+ Ogre::ResourceGroupManager::getSingleton().addResourceLocation(fullPath,
79
+ keyName,
80
+ secName)
81
+ }
82
+
83
+ # create a window to draw.
84
+ return false unless @root.showConfigDialog()
85
+ @window = @root.initialise(true, "Sinbad")
86
+ @root.addFrameListener(self)
87
+
88
+ # initialize Managers
89
+ ## InputManager
90
+ windowHnd = Ogre::Intp.new
91
+ @window.getCustomAttribute("WINDOW", windowHnd)
92
+ windowHndStr = sprintf("%d", windowHnd.value())
93
+ pl = OIS::ParamList.new
94
+ pl["WINDOW"] = windowHndStr
95
+ @inputManager = OIS::InputManager::createInputSystem(pl)
96
+ @keyboard = @inputManager.createInputObject(OIS::OISKeyboard, true).toKeyboard()
97
+ @mouse = @inputManager.createInputObject(OIS::OISMouse, true).toMouse()
98
+
99
+ ## TrayManager
100
+ Ogre::ResourceGroupManager::getSingleton().initialiseResourceGroup("Essential")
101
+ @tray_mgr = OgreBites::SdkTrayManager.new("Base", @window, @mouse);
102
+ ms = @mouse.getMouseState()
103
+ ms.width = @window.getWidth()
104
+ ms.height = @window.getHeight()
105
+
106
+ ## SceneMgr
107
+ @sceneMgr = @root.createSceneManager(Ogre::ST_GENERIC)
108
+ @sceneMgr.setShadowTechnique(Ogre::SHADOWTYPE_STENCIL_ADDITIVE)
109
+
110
+ # initialize Listeners
111
+ @keyListener = KeyListener.new(self)
112
+ @keyboard.setEventCallback(@keyListener)
113
+
114
+ @mouseListener = MouseListener.new(self)
115
+ @mouse.setEventCallback(@mouseListener)
116
+
117
+ @trayListener = TrayListener.new(self)
118
+ @tray_mgr.setListener(@trayListener)
119
+
120
+ # initialize Camera
121
+ @camera = @sceneMgr.createCamera("FixCamera")
122
+ # Create one viewport, entire window
123
+ @vp = @window.addViewport(@camera);
124
+ @vp.setBackgroundColour(Ogre::ColourValue.new(0, 0, 0))
125
+ # Alter the camera aspect ratio to match the viewport
126
+ @camera.setAspectRatio(Float(@vp.getActualWidth()) / Float(@vp.getActualHeight()))
127
+
128
+ # load "General" group resources into ResourceGroupManager.
129
+ @tray_mgr.showLoadingBar(1, 0)
130
+ Ogre::ResourceGroupManager::getSingleton().initialiseResourceGroup("General")
131
+ @tray_mgr.hideLoadingBar()
132
+ Ogre::TextureManager::getSingleton().setDefaultNumMipmaps(5)
133
+
134
+ @tray_mgr.showFrameStats(OgreBites::TL_BOTTOMLEFT)
135
+ @tray_mgr.showLogo(OgreBites::TL_BOTTOMRIGHT)
136
+ @tray_mgr.hideCursor()
137
+ end
138
+
139
+ def run
140
+ # set background and some fog
141
+ @vp.setBackgroundColour(Ogre::ColourValue.new(1.0, 1.0, 0.8))
142
+ @sceneMgr.setFog(Ogre::FOG_LINEAR, Ogre::ColourValue.new(1.0, 1.0, 0.8), 0, 15, 100)
143
+
144
+ # set shadow properties
145
+ @sceneMgr.setShadowTechnique(Ogre::SHADOWTYPE_TEXTURE_MODULATIVE)
146
+ @sceneMgr.setShadowColour(Ogre::ColourValue.new(0.5, 0.5, 0.5))
147
+ @sceneMgr.setShadowTextureSize(1024)
148
+ @sceneMgr.setShadowTextureCount(1)
149
+
150
+ # use a small amount of ambient lighting
151
+ @sceneMgr.setAmbientLight(Ogre::ColourValue.new(0.3, 0.3, 0.3))
152
+
153
+ # add a bright light above the scene
154
+ @light = @sceneMgr.createLight()
155
+ @light.setType(Ogre::Light::LT_POINT)
156
+ @light.setPosition(-10, 40, 20)
157
+ @light.setSpecularColour(Ogre::ColourValue.White)
158
+
159
+ @camera_mover = CameraMover.new(@camera)
160
+ @camera_mover.set_position(Ogre::Vector3.new(20, 10, 20))
161
+ @camera_mover.look_at(Ogre::Vector3.new(0, 10, 0))
162
+
163
+ items = []
164
+ items.push("Help")
165
+ @help = @tray_mgr.createParamsPanel(OgreBites::TL_TOPLEFT, "HelpMessage", 100, items)
166
+ @help.setParamValue(Ogre::UTFString.new("Help"), Ogre::UTFString.new("H / F1"))
167
+
168
+ # creates objects
169
+ @floor = Floor.new(@dynamics_world, @sceneMgr)
170
+
171
+ @boxes = []
172
+ 11.times {|x|
173
+ 3.times {|y|
174
+ box = Box.new(@dynamics_world, @sceneMgr, 1.0, 1, 1, 1, 'blue')
175
+ box.set_position(-10 + x * 2, 5 + y * 2, 0)
176
+ @boxes.push(box)
177
+ }
178
+ }
179
+
180
+ @root.startRendering()
181
+ end
182
+
183
+ def shot_box()
184
+ cam_pos_ogre = @camera.getPosition()
185
+ cam_dir_ogre = @camera.getDirection()
186
+
187
+ cam_pos = Bullet::BtVector3.new(cam_pos_ogre.x, cam_pos_ogre.y, cam_pos_ogre.z)
188
+ cam_dir = Bullet::BtVector3.new(cam_dir_ogre.x, cam_dir_ogre.y, cam_dir_ogre.z)
189
+
190
+ box = Box.new(@dynamics_world, @sceneMgr, 1.0, 1, 1, 1, 'grey')
191
+ box_pos = cam_pos + (cam_dir * 5.0)
192
+ box.set_position(box_pos.x, box_pos.y, box_pos.z)
193
+
194
+ force = cam_dir * Bullet::BtVector3.new(100.0, 100.0, 100.0)
195
+ box.apply_impulse(force)
196
+
197
+ @boxes.push(box)
198
+ end
199
+
200
+ #
201
+ # Event handlers
202
+ #
203
+
204
+ # implementation of Ogre::FrameListener interface.
205
+ def frameRenderingQueued(evt)
206
+ # update bullet(physics)
207
+ @dynamics_world.stepSimulation(evt.timeSinceLastFrame)
208
+
209
+ # update ogre3d(view)
210
+ @keyboard.capture()
211
+ @mouse.capture()
212
+ @tray_mgr.frameRenderingQueued(evt)
213
+
214
+ # update model
215
+ @camera_mover.update(evt.timeSinceLastFrame)
216
+
217
+ @delta_sum += evt.timeSinceLastFrame
218
+ # create a new box per 3sec.
219
+ if (@delta_sum > 3.0)
220
+ box = Box.new(@dynamics_world, @sceneMgr, 1.0, 1, 1, 1, 'orange')
221
+ box.set_position(-10 + ((box.id - 1) % 11) * 2, 20, 0)
222
+ @boxes.push(box)
223
+ @delta_sum = 0
224
+ end
225
+
226
+ return !@quit
227
+ end
228
+
229
+ def key_pressed(keyEvent)
230
+ case keyEvent.key
231
+ when OIS::KC_ESCAPE
232
+ @quit =true
233
+ when OIS::KC_H, OIS::KC_F1
234
+ if (!@tray_mgr.isDialogVisible() && @info["Help"] != "")
235
+ @tray_mgr.showOkDialog(Ogre::UTFString.new("Help"), Ogre::UTFString.new(@info["Help"]))
236
+ else
237
+ @tray_mgr.closeDialog()
238
+ end
239
+
240
+ when OIS::KC_E
241
+ @camera_mover.move_forward(true)
242
+ when OIS::KC_D
243
+ @camera_mover.move_backward(true)
244
+ when OIS::KC_S
245
+ @camera_mover.move_left(true)
246
+ when OIS::KC_F
247
+ @camera_mover.move_right(true)
248
+ end
249
+
250
+ return true
251
+ end
252
+
253
+ def key_released(keyEvent)
254
+ case keyEvent.key
255
+ when OIS::KC_ESCAPE
256
+ @quit =true
257
+ when OIS::KC_E
258
+ @camera_mover.move_forward(false)
259
+ when OIS::KC_D
260
+ @camera_mover.move_backward(false)
261
+ when OIS::KC_S
262
+ @camera_mover.move_left(false)
263
+ when OIS::KC_F
264
+ @camera_mover.move_right(false)
265
+ end
266
+
267
+ return true
268
+ end
269
+
270
+ def mouse_moved(mouseEvent)
271
+ return true if @tray_mgr.injectMouseMove(mouseEvent)
272
+ @camera_mover.mouse_moved(mouseEvent)
273
+ return true
274
+ end
275
+
276
+ def mouse_pressed(mouseEvent, mouseButtonID)
277
+ return true if @tray_mgr.injectMouseDown(mouseEvent, mouseButtonID)
278
+ @camera_mover.mouse_pressed(mouseEvent, mouseButtonID)
279
+
280
+ if (mouseButtonID == OIS::MB_Left)
281
+ shot_box()
282
+ end
283
+
284
+ return true
285
+ end
286
+
287
+ def mouse_released(mouseEvent, mouseButtonID)
288
+ return true if @tray_mgr.injectMouseUp(mouseEvent, mouseButtonID)
289
+ @camera_mover.mouse_released(mouseEvent, mouseButtonID)
290
+ return true
291
+ end
292
+
293
+ def ok_dialog_closed(name)
294
+ return true
295
+ end
296
+ end
297
+
298
+
299
+ world = World.new()
300
+ world.run
@@ -0,0 +1,11 @@
1
+ Render System=OpenGL Rendering Subsystem
2
+
3
+ [OpenGL Rendering Subsystem]
4
+ Display Frequency=50 Hz
5
+ FSAA=0
6
+ Fixed Pipeline Enabled=Yes
7
+ Full Screen=No
8
+ RTT Preferred Mode=FBO
9
+ VSync=No
10
+ Video Mode=1440 x 900
11
+ sRGB Gamma Conversion=No
@@ -0,0 +1,17 @@
1
+ # Defines plugins to load
2
+
3
+ # Define plugin folder
4
+ PluginFolder=<SystemPluginFolder>
5
+
6
+ # Define plugins
7
+ # Plugin=RenderSystem_Direct3D9
8
+ # Plugin=RenderSystem_Direct3D10
9
+ # Plugin=RenderSystem_Direct3D11
10
+ Plugin=RenderSystem_GL
11
+ # Plugin=RenderSystem_GLES
12
+ Plugin=Plugin_ParticleFX
13
+ Plugin=Plugin_BSPSceneManager
14
+ Plugin=Plugin_CgProgramManager
15
+ Plugin=Plugin_PCZSceneManager
16
+ Plugin=Plugin_OctreeZone
17
+ Plugin=Plugin_OctreeSceneManager
@@ -0,0 +1,22 @@
1
+ # Resources required by the sample browser and most samples.
2
+ ResourceFolder=<SystemResourceFolder>
3
+
4
+ [Essential]
5
+ Zip=packs/SdkTrays.zip
6
+
7
+ # Resource locations to be added to the default path
8
+ [General]
9
+ Zip=packs/skybox.zip
10
+ Zip=packs/Sinbad.zip
11
+ FileSystem=fonts
12
+ FileSystem=models/
13
+ FileSystem=materials/scripts/
14
+ FileSystem=materials/textures/
15
+ FileSystem=materials/textures/nvidia/
16
+ FileSystem=materials/programs/
17
+ FileSystem=particle
18
+ FileSystem=DeferredShadingMedia
19
+ FileSystem=PCZAppMedia
20
+ FileSystem=RTShaderLib
21
+ FileSystem=RTShaderLib/materials
22
+
@@ -0,0 +1,65 @@
1
+ #
2
+ # Key Listener
3
+ #
4
+ class KeyListener < OIS::KeyListener
5
+ def initialize(listener)
6
+ super()
7
+ @listener = listener
8
+ end
9
+
10
+ def keyPressed(keyEvent)
11
+ return @listener.key_pressed(keyEvent)
12
+ end
13
+
14
+ def keyReleased(keyEvent)
15
+ return @listener.key_released(keyEvent)
16
+ end
17
+ end
18
+
19
+ #
20
+ # Mouse Listener
21
+ #
22
+ class MouseListener < OIS::MouseListener
23
+ def initialize(listener)
24
+ super()
25
+ @listener = listener
26
+ end
27
+
28
+ def mouseMoved(evt)
29
+ return @listener.mouse_moved(evt)
30
+ end
31
+
32
+ def mousePressed(mouseEvent, mouseButtonID)
33
+ return @listener.mouse_pressed(mouseEvent, mouseButtonID)
34
+ end
35
+
36
+ def mouseReleased(mouseEvent, mouseButtonID)
37
+ return @listener.mouse_released(mouseEvent, mouseButtonID)
38
+ end
39
+ end
40
+
41
+ #
42
+ # Tray Listener
43
+ #
44
+ class TrayListener < OgreBites::SdkTrayListener
45
+ def initialize(listener)
46
+ super()
47
+ @listener = listener
48
+ end
49
+
50
+ def buttonHit(button)
51
+ @listener.button_hit(button)
52
+ end
53
+
54
+ def itemSelected(menu)
55
+ @listener.item_selected(menu)
56
+ end
57
+
58
+ def yesNoDialogClosed(name, bl)
59
+ @listener.yes_no_dialog_closed(name, bl)
60
+ end
61
+
62
+ def okDialogClosed(name)
63
+ @listener.ok_dialog_closed(name)
64
+ end
65
+ end
data/teienlib.gemspec CHANGED
@@ -21,6 +21,9 @@ Gem::Specification.new do |gem|
21
21
  'ext/teienlib/interface/*.i',
22
22
  'ext/teienlib/interface/Rakefile',
23
23
  'ext/teienlib/src/*.{cc,h}',
24
+ 'sample/hello/*.rb',
25
+ 'sample/hello/*.cfg',
26
+ 'sample/hello/hello',
24
27
  'lib/**/*',
25
28
  ]
26
29
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: teienlib
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: x86-linux
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-09-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ruby-ogre
16
- requirement: &82505360 !ruby/object:Gem::Requirement
16
+ requirement: &76100680 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *82505360
24
+ version_requirements: *76100680
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: ruby-bullet
27
- requirement: &82505070 !ruby/object:Gem::Requirement
27
+ requirement: &76100330 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *82505070
35
+ version_requirements: *76100330
36
36
  description: An extension library for Teien.
37
37
  email:
38
38
  - abexsoft@gmail.com
@@ -68,6 +68,15 @@ files:
68
68
  - ext/teienlib/src/MeshStrider.h
69
69
  - ext/teienlib/src/Vector3D.h
70
70
  - ext/teienlib/src/DebugDrawer.h
71
+ - sample/hello/floor.rb
72
+ - sample/hello/ui_listener.rb
73
+ - sample/hello/hello.rb
74
+ - sample/hello/box.rb
75
+ - sample/hello/camera_mover.rb
76
+ - sample/hello/ogre.cfg
77
+ - sample/hello/resources.cfg
78
+ - sample/hello/plugins.cfg
79
+ - sample/hello/hello
71
80
  - lib/teienlib/version.rb
72
81
  - lib/Teienlib.so
73
82
  - lib/teienlib.rb