teien 0.0.2 → 0.0.3

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 (49) hide show
  1. data/README.md +11 -6
  2. data/bin/teien +16 -2
  3. data/lib/teien/ai.rb +27 -0
  4. data/lib/teien/animation.rb +34 -0
  5. data/lib/teien/animation_operator.rb +6 -0
  6. data/lib/teien/controller.rb +30 -0
  7. data/lib/teien/dispatcher.rb +22 -0
  8. data/lib/teien/event.rb +60 -0
  9. data/lib/teien/event_router.rb +118 -0
  10. data/lib/teien/garden.rb +60 -172
  11. data/lib/teien/garden_base.rb +117 -0
  12. data/lib/teien/garden_object.rb +119 -136
  13. data/lib/teien/model.rb +34 -0
  14. data/lib/teien/network.rb +108 -0
  15. data/lib/teien/object_info.rb +21 -0
  16. data/lib/teien/physics.rb +47 -39
  17. data/lib/teien/physics_object.rb +57 -0
  18. data/lib/teien/physics_object_factory.rb +170 -0
  19. data/lib/teien/proxy_garden.rb +118 -0
  20. data/lib/teien/remote_info.rb +20 -0
  21. data/lib/teien/sky_dome.rb +15 -0
  22. data/lib/teien/smooth_mover.rb +31 -42
  23. data/lib/teien/synchronizer.rb +26 -0
  24. data/lib/teien/tools.rb +30 -2
  25. data/lib/teien/user_interface.rb +58 -5
  26. data/lib/teien/version.rb +1 -1
  27. data/lib/teien/view.rb +52 -33
  28. data/lib/teien/view_object.rb +67 -0
  29. data/lib/teien/view_object_factory.rb +210 -0
  30. data/lib/teien.rb +62 -14
  31. data/sample/actor/app/ais/actor_ai.rb +112 -0
  32. data/sample/actor/app/controllers/actor_controller.rb +182 -0
  33. data/sample/actor/app/helpers/sinbad/sinbad.rb +176 -0
  34. data/sample/actor/app/helpers/sinbad/sinbad_state.rb +224 -0
  35. data/sample/actor/app/helpers/user_event.rb +75 -0
  36. data/sample/actor/app/models/actor_model.rb +108 -0
  37. data/sample/actor/config/plugins.cfg +19 -0
  38. data/sample/actor/config/resources.cfg +24 -0
  39. data/sample/hello_garden/app/controllers/hello_garden_controller.rb +90 -0
  40. data/sample/hello_garden/app/helpers/user_event.rb +12 -0
  41. data/sample/{standalone/hello_garden/hello_garden.rb → hello_garden/app/models/hello_garden_model.rb} +29 -83
  42. data/sample/{standalone/hello_garden → hello_garden/config}/plugins.cfg +0 -0
  43. data/sample/{standalone/hello_garden → hello_garden/config}/resources.cfg +0 -0
  44. data/sample/hello_garden/run +6 -0
  45. data/teien.gemspec +2 -1
  46. metadata +52 -15
  47. data/lib/teien/light_object.rb +0 -36
  48. data/lib/teien/object_factory.rb +0 -308
  49. data/sample/standalone/hello_garden/run +0 -5
data/lib/teien/tools.rb CHANGED
@@ -51,9 +51,19 @@ class Vector3D < Bullet::BtVector3
51
51
  return sprintf("(%f, %f, %f)", vec.x, vec.y, vec.z)
52
52
  end
53
53
 
54
+ def _dump(limit)
55
+ return [x(), y(), z()].pack("fff")
56
+ end
57
+
58
+ def self._load(source)
59
+ array = source.unpack("fff")
60
+ return Vector3D.new(array[0], array[1], array[2])
61
+ end
62
+
54
63
  def copy(vec)
55
- setValue(vec.x, vec.y, vec.z)
64
+ set_value(vec.x, vec.y, vec.z)
56
65
  end
66
+
57
67
  end
58
68
 
59
69
 
@@ -74,13 +84,31 @@ class Quaternion < Bullet::BtQuaternion
74
84
  return sprintf("(%f, %f, %f, %f)", qt.x, qt.y, qt.z, qt.w)
75
85
  end
76
86
 
87
+ def _dump(limit)
88
+ return [x(), y(), z(), w()].pack("ffff")
89
+ end
90
+
91
+ def self._load(source)
92
+ array = source.unpack("ffff")
93
+ return Quaternion.new(array[0], array[1], array[2], array[3])
94
+ end
95
+
77
96
  def copy(qt)
78
- setValue(qt.x, qt.y, qt.z, qt.w)
97
+ set_value(qt.x, qt.y, qt.z, qt.w)
79
98
  end
80
99
 
81
100
  end
82
101
 
83
102
  class Color < Ogre::ColourValue
103
+ def _dump(limit)
104
+ return [r(), g(), b(), a()].pack("ffff")
105
+ end
106
+
107
+ def self._load(source)
108
+ array = source.unpack("ffff")
109
+ return Color.new(array[0], array[1], array[2], array[3])
110
+ end
111
+
84
112
  end
85
113
 
86
114
  class Radian < Ogre::Radian
@@ -1,18 +1,41 @@
1
1
  require 'teien/camera'
2
+ require 'teien/view'
3
+ require "teien/dispatcher.rb"
2
4
 
3
5
  module Teien
4
6
 
5
7
  class UserInterface
6
- def initialize(view)
7
- @view = view
8
- @camera = Camera.new(view.camera)
8
+ # include Dispatcher
9
+
10
+ attr_accessor :garden
11
+ attr_accessor :debug_draw
12
+
13
+ def initialize(garden)
14
+ super()
15
+
16
+ @garden = garden
17
+ @garden.register_receiver(self)
18
+
19
+ @view = View.new()
20
+ @camera = nil
21
+
22
+ @debug_draw = false
9
23
  end
10
24
 
11
- def set_controller(controller)
12
- @view.set_controller(controller)
25
+ def set_window_title(title)
26
+ @view.window_title = title
27
+ end
28
+
29
+ def set_debug_draw(bl)
30
+ @debug_draw = bl
31
+ if (bl)
32
+ @debug_drawer = Teienlib::DebugDrawer.new(@view.scene_mgr)
33
+ @garden.physics.dynamics_world.set_debug_drawer(@debug_drawer)
34
+ end
13
35
  end
14
36
 
15
37
  def get_camera()
38
+ @camera = Camera.new(@view.camera) if @camera == nil
16
39
  return @camera
17
40
  end
18
41
 
@@ -32,6 +55,36 @@ class UserInterface
32
55
  @view.tray_mgr.hide_cursor()
33
56
  end
34
57
 
58
+ def register_receiver(recv)
59
+ @view.register_receiver(recv)
60
+ end
61
+
62
+ # called as a receiver by a dispatcher.
63
+
64
+ #
65
+ # By Garden/GardenBase
66
+ #
67
+
68
+ def set_ambient_light(color)
69
+ @view.set_ambient_light(color)
70
+ end
71
+
72
+ def set_sky_dome(enable, materialName, curvature = 10, tiling = 8, distance = 4000)
73
+ @view.scene_mgr.set_sky_dome(enable, materialName, curvature, tiling, distance)
74
+ end
75
+
76
+ def setup(garden)
77
+ @view.setup(garden)
78
+ end
79
+
80
+ def create_object(obj)
81
+ @view.add_view_object(obj)
82
+ end
83
+
84
+ def update(delta)
85
+ @garden.physics.dynamics_world.debug_draw_world() if @debug_draw
86
+ @view.update(delta)
87
+ end
35
88
  end
36
89
 
37
90
  class UI < UserInterface
data/lib/teien/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Teien
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
data/lib/teien/view.rb CHANGED
@@ -1,8 +1,12 @@
1
1
  require 'teien/ui_listener'
2
+ require "teien/view_object_factory.rb"
3
+ require "teien/dispatcher.rb"
2
4
 
3
5
  module Teien
4
6
 
5
7
  class View < Ogre::FrameListener
8
+ include Dispatcher
9
+
6
10
  attr_accessor :root
7
11
  attr_accessor :camera
8
12
  attr_accessor :window
@@ -13,29 +17,28 @@ class View < Ogre::FrameListener
13
17
  attr_accessor :window_title
14
18
 
15
19
 
16
- def initialize(garden)
20
+ def initialize()
17
21
  super()
18
- @garden = garden
22
+
19
23
  @adjustFlag = false
20
24
  @root = nil
21
25
  @camera = nil
22
26
  @window = nil
23
27
  @mouse = nil
24
28
  @keyboard = nil
25
- @controller = nil
26
29
  @scene_mgr = nil
27
30
  @tray_mgr = nil
28
31
  @inputManager = nil
29
32
  @window_title = ""
30
- end
31
33
 
32
- def set_controller(controller)
33
- @controller = controller
34
+ @object_factory = ViewObjectFactory.new(self)
34
35
  end
35
36
 
36
- def setup
37
- @plugins_cfg = @garden.plugins_cfg ? @garden.plugins_cfg : "plugins.cfg"
38
- @resources_cfg = @garden.resources_cfg ? @garden.resources_cfg : "resources.cfg"
37
+ def setup(garden)
38
+ puts "view setup"
39
+ @garden = garden
40
+ @plugins_cfg = @garden.plugins_cfg ? @garden.plugins_cfg : "config/plugins.cfg"
41
+ @resources_cfg = @garden.resources_cfg ? @garden.resources_cfg : "config/resources.cfg"
39
42
 
40
43
  @root = Ogre::Root.new("")
41
44
  load_plugins()
@@ -48,6 +51,9 @@ class View < Ogre::FrameListener
48
51
  init_resources()
49
52
  init_managers()
50
53
 
54
+ start()
55
+ prepare_render_loop()
56
+
51
57
  return true
52
58
  end
53
59
 
@@ -114,9 +120,7 @@ class View < Ogre::FrameListener
114
120
  ms.height = @window.get_height()
115
121
  end
116
122
 
117
- def start(script)
118
- @script = script
119
-
123
+ def start()
120
124
  # initialize scene_mgr
121
125
  @scene_mgr = @root.create_scene_manager(Ogre::ST_GENERIC)
122
126
  @scene_mgr.set_shadow_technique(Ogre::SHADOWTYPE_STENCIL_ADDITIVE)
@@ -134,7 +138,7 @@ class View < Ogre::FrameListener
134
138
  @keyboard.set_event_callback(@keyListener)
135
139
  @mouseListener = MouseListener.new(self)
136
140
  @mouse.set_event_callback(@mouseListener)
137
- @trayListener = TrayListener.new(@script)
141
+ @trayListener = TrayListener.new(self)
138
142
  @tray_mgr.set_listener(@trayListener)
139
143
 
140
144
  # load resources into ResourceGroupManager.
@@ -167,13 +171,12 @@ class View < Ogre::FrameListener
167
171
  @root.shutdown()
168
172
  end
169
173
 
170
- def create_scene_node(parent = nil)
171
- if (parent == nil)
172
- scene_node = @scene_mgr.get_root_scene_node().create_child_scene_node()
173
- else
174
- scene_node = parent.create_child_scene_node()
175
- end
176
- return scene_node
174
+ def set_ambient_light(color)
175
+ @scene_mgr.set_ambient_light(color)
176
+ end
177
+
178
+ def add_view_object(obj)
179
+ obj.view_object = @object_factory.create_object(obj)
177
180
  end
178
181
 
179
182
  # Takes a screen shot.
@@ -200,7 +203,10 @@ class View < Ogre::FrameListener
200
203
  def frame_rendering_queued(evt)
201
204
  @keyboard.capture()
202
205
  @mouse.capture()
203
- @controller.update(evt.timeSinceLastFrame) if @controller
206
+
207
+ @garden.objects.each_value {|obj|
208
+ obj.view_object.update_animation(evt.timeSinceLastFrame, obj.animation_info)
209
+ }
204
210
 
205
211
  @tray_mgr.frame_rendering_queued(evt)
206
212
  if (@adjustFlag != true)
@@ -208,37 +214,50 @@ class View < Ogre::FrameListener
208
214
  @adjustFlag = true
209
215
  end
210
216
 
211
- return @garden.update_in_frame_rendering_queued(evt.timeSinceLastFrame)
217
+ return true
212
218
  end
213
219
 
214
220
  def key_pressed(keyEvent)
215
- return true if @controller == nil
216
- return @controller.key_pressed(keyEvent)
221
+ notify(:key_pressed, keyEvent)
222
+ return true
217
223
  end
218
224
 
219
225
  def key_released(keyEvent)
220
- return true if @controller == nil
221
- return @controller.key_released(keyEvent)
226
+ notify(:key_released, keyEvent)
227
+ return true
222
228
  end
223
229
 
224
230
  def mouse_moved(evt)
225
231
  return true if @tray_mgr.inject_mouse_move(evt)
226
- return true if @controller == nil
227
- return @controller.mouse_moved(evt)
232
+ notify(:mouse_moved, evt)
233
+ return true
228
234
  end
229
235
 
230
236
  def mouse_pressed(mouseEvent, mouseButtonID)
231
237
  return true if @tray_mgr.inject_mouse_down(mouseEvent, mouseButtonID)
232
- return true if @controller == nil
233
- return @controller.mouse_pressed(mouseEvent, mouseButtonID)
238
+ notify(:mouse_pressed, mouseEvent, mouseButtonID)
239
+ return true
234
240
  end
235
241
 
236
242
  def mouse_released(mouseEvent, mouseButtonID)
237
243
  return true if @tray_mgr.inject_mouse_up(mouseEvent, mouseButtonID)
238
- return true if @controller == nil
239
- return @controller.mouse_released(mouseEvent, mouseButtonID)
244
+ notify(:mouse_released, mouseEvent, mouseButtonID)
245
+ return true
240
246
  end
241
-
242
247
  end
243
248
 
244
249
  end # module
250
+
251
+
252
+
253
+ =begin
254
+ def create_scene_node(parent = nil)
255
+ if (parent == nil)
256
+ scene_node = @scene_mgr.get_root_scene_node().create_child_scene_node()
257
+ else
258
+ scene_node = parent.create_child_scene_node()
259
+ end
260
+ return scene_node
261
+ end
262
+ =end
263
+
@@ -0,0 +1,67 @@
1
+ require "teien/animation_operator.rb"
2
+
3
+ module Teien
4
+
5
+ class ViewObject
6
+ # Ogre3D accessor
7
+ ## center of view objects(sceneNode) and kept to equal with the rigid_body position.
8
+ attr_accessor :pivot_scene_node
9
+ attr_accessor :scene_node
10
+ attr_accessor :entity
11
+ attr_accessor :animation_operators
12
+
13
+ def initialize(view)
14
+ @view = view
15
+ @pivot_scene_node = nil
16
+ @scene_node = nil
17
+ @entity = nil
18
+ @animation_operators = Hash.new
19
+ end
20
+
21
+ def finalize()
22
+ @pivot_scene_node.remove_child(@scene_node)
23
+ @view.scene_mgr.destroySceneNode(@scene_node)
24
+ @view.scene_mgr.get_root_scene_node.remove_child(@pivot_scene_node)
25
+ @view.scene_mgr.destroySceneNode(@pivot_scene_node)
26
+ @view.scene_mgr.destroyEntity(@entity)
27
+ end
28
+
29
+ def update_animation(delta, animation)
30
+ animation.operators.each_pair{|key, value|
31
+ unless @animation_operators[key]
32
+ @entity.get_skeleton().set_blend_mode(animation.blend_mode)
33
+ ani_ope = AnimationOperator.new(@entity)
34
+ ani_ope.init(value.name, value.loop)
35
+ @animation_operators[key] = ani_ope
36
+ end
37
+
38
+ if (value.name != @animation_operators[key].name ||
39
+ value.loop != @animation_operators[key].loop)
40
+ @animation_operators[key].play(value.name, value.loop)
41
+ end
42
+ @animation_operators[key].add_time(delta * value.speed)
43
+ }
44
+ end
45
+
46
+ #
47
+ # The offset changes the local position of the created scene_node in Object.
48
+ #
49
+ def set_scene_node(entity, offset = Vector3D.new(0, 0, 0), rotate = Quaternion.new(0, 0, 0, 1.0))
50
+ if (@pivot_scene_node == nil)
51
+ @pivot_scene_node = @view.scene_mgr.get_root_scene_node().create_child_scene_node()
52
+ end
53
+ @scene_node = @pivot_scene_node.create_child_scene_node(Vector3D.to_ogre(offset),
54
+ Quaternion.to_ogre(rotate))
55
+ @pivot_scene_node.instance_variable_set(:@child, @scene_node) # prevent this from GC.
56
+
57
+ if entity
58
+ @scene_node.attach_object(entity)
59
+ @entity = entity
60
+ end
61
+
62
+ return @scene_node
63
+ end
64
+
65
+ end
66
+
67
+ end
@@ -0,0 +1,210 @@
1
+ require 'teien/garden_object'
2
+
3
+ module Teien
4
+
5
+ class ViewObjectFactory
6
+ def initialize(view)
7
+ @view = view
8
+ end
9
+
10
+ # def create_object(name, object_info, physics_info)
11
+ def create_object(obj)
12
+ case obj.object_info
13
+ when LightObjectInfo
14
+ return create_light_object(obj)
15
+ when FloorObjectInfo
16
+ return create_floor_object(obj)
17
+ when BoxObjectInfo
18
+ return create_box_object(obj)
19
+ when SphereObjectInfo
20
+ return create_sphere_object(obj)
21
+ when CapsuleObjectInfo
22
+ return create_capsule_object(obj)
23
+ when ConeObjectInfo
24
+ return create_cone_object(obj)
25
+ when CylinderObjectInfo
26
+ return create_cylinder_object(obj)
27
+ when MeshBBObjectInfo
28
+ return create_meshBB_object(obj)
29
+ when MeshObjectInfo
30
+ return create_mesh_object(obj)
31
+ else
32
+ puts "Error: passed no supported object_info."
33
+ return nil
34
+ end
35
+ end
36
+
37
+ def create_light_object(obj)
38
+ entity = @view.scene_mgr.create_light(obj.name)
39
+ entity.set_type(obj.object_info.type)
40
+ entity.set_diffuse_colour(obj.object_info.diffuse_color)
41
+ entity.set_specular_colour(obj.object_info.specular_color)
42
+ entity.set_direction(Vector3D.to_ogre(obj.object_info.direction))
43
+
44
+ view_object = ViewObject.new(@view)
45
+ view_object.entity = entity
46
+ return view_object
47
+ end
48
+
49
+ #
50
+ # Floor Object
51
+ #
52
+
53
+ # Setting an entity and a node of Ogre3d.
54
+ def create_floor_object(obj)
55
+ normal = Ogre::Vector3.new(0, 1, 0)
56
+ up = Ogre::Vector3.new(0, 0, 1)
57
+ Ogre::MeshManager::get_singleton().create_plane(obj.name,
58
+ Ogre::ResourceGroupManager.DEFAULT_RESOURCE_GROUP_NAME,
59
+ Ogre::Plane.new(normal, 0),
60
+ obj.object_info.width * 2.0,
61
+ obj.object_info.height * 2.0,
62
+ obj.object_info.num_seg_x,
63
+ obj.object_info.num_seg_y,
64
+ true, 1,
65
+ obj.object_info.u_tile,
66
+ obj.object_info.v_tile, up)
67
+ entity = @view.scene_mgr.create_entity(obj.name, obj.name)
68
+ entity.set_cast_shadows(true)
69
+ entity.set_material_name(obj.object_info.material_name)
70
+
71
+ view_object = ViewObject.new(@view)
72
+ view_object.set_scene_node(entity)
73
+ return view_object
74
+ end
75
+
76
+ #
77
+ # Box Object
78
+ #
79
+
80
+ def create_box_object(obj)
81
+ gen = Procedural::BoxGenerator.new()
82
+ gen.set_size_x(obj.object_info.size.x * 2.0)
83
+ gen.set_size_y(obj.object_info.size.y * 2.0)
84
+ gen.set_size_z(obj.object_info.size.z * 2.0)
85
+ gen.set_num_seg_x(obj.object_info.num_seg_x)
86
+ gen.set_num_seg_y(obj.object_info.num_seg_y)
87
+ gen.set_num_seg_z(obj.object_info.num_seg_z)
88
+ gen.set_utile(obj.object_info.u_tile).set_vtile(obj.object_info.v_tile).realize_mesh(obj.name)
89
+ entity = @view.scene_mgr.create_entity(obj.name)
90
+ entity.set_cast_shadows(true)
91
+ entity.set_material_name(obj.object_info.material_name)
92
+
93
+ view_object = ViewObject.new(@view)
94
+ view_object.set_scene_node(entity)
95
+ return view_object
96
+ end
97
+
98
+ #
99
+ # Sphere Object
100
+ #
101
+
102
+ def create_sphere_object(obj)
103
+ gen = Procedural::SphereGenerator.new()
104
+ gen.set_radius(obj.object_info.radius)
105
+ gen.set_num_rings(obj.object_info.num_rings)
106
+ gen.set_num_segments(obj.object_info.num_segments)
107
+ gen.set_vtile(obj.object_info.u_tile).set_vtile(obj.object_info.v_tile).realize_mesh(obj.name)
108
+ entity = @view.scene_mgr.create_entity(obj.name)
109
+ entity.set_cast_shadows(true)
110
+ entity.set_material_name(obj.object_info.material_name)
111
+
112
+ view_object = ViewObject.new(@view)
113
+ view_object.set_scene_node(entity)
114
+ return view_object
115
+ end
116
+
117
+ #
118
+ # Capsule Object
119
+ #
120
+
121
+ def create_capsule_object(obj)
122
+ gen = Procedural::CapsuleGenerator.new()
123
+ gen.set_radius(obj.object_info.radius).set_height(obj.object_info.height)
124
+ gen.set_num_rings(obj.object_info.num_rings)
125
+ gen.set_num_segments(obj.object_info.num_segments)
126
+ gen.set_num_seg_height(obj.object_info.num_seg_height)
127
+ gen.set_vtile(obj.object_info.u_tile).set_vtile(obj.object_info.v_tile).realize_mesh(obj.name)
128
+ entity = @view.scene_mgr.create_entity(obj.name)
129
+ entity.set_cast_shadows(true)
130
+ entity.set_material_name(obj.object_info.material_name)
131
+
132
+ view_object = ViewObject.new(@view)
133
+ view_object.set_scene_node(entity)
134
+ return view_object
135
+ end
136
+
137
+ #
138
+ # Cone Object
139
+ #
140
+
141
+ def create_cone_object(obj)
142
+ gen = Procedural::ConeGenerator.new
143
+ gen.set_radius(obj.object_info.radius).set_height(obj.object_info.height)
144
+ gen.set_num_seg_base(obj.object_info.num_seg_base).set_num_seg_height(obj.object_info.num_seg_height)
145
+ gen.set_utile(obj.object_info.u_tile).set_vtile(obj.object_info.v_tile).realize_mesh(obj.name)
146
+ entity = @view.scene_mgr.create_entity(obj.name)
147
+ entity.set_cast_shadows(true)
148
+ entity.set_material_name(obj.object_info.material_name)
149
+
150
+ view_object = ViewObject.new(@view)
151
+ view_object.set_scene_node(entity)
152
+ return view_object
153
+ end
154
+
155
+ #
156
+ # Cylinder Object
157
+ #
158
+
159
+ def create_cylinder_object(obj)
160
+ gen = Procedural::CylinderGenerator.new
161
+ gen.set_radius(obj.object_info.radius).set_height(obj.object_info.height).set_capped(obj.object_info.capped)
162
+ gen.set_num_seg_base(obj.object_info.num_seg_base).set_num_seg_height(obj.object_info.num_seg_height)
163
+ gen.set_utile(obj.object_info.u_tile).set_vtile(obj.object_info.v_tile).realize_mesh(obj.name)
164
+ entity = @view.scene_mgr.create_entity(obj.name)
165
+ entity.set_cast_shadows(true)
166
+ entity.set_material_name(obj.object_info.material_name)
167
+
168
+ view_object = ViewObject.new(@view)
169
+ view_object.set_scene_node(entity,
170
+ Vector3D.new(0, -obj.object_info.height / 2, 0))
171
+ return view_object
172
+ end
173
+
174
+ #
175
+ # MeshBB Object
176
+ #
177
+
178
+ def create_meshBB_object(obj)
179
+ entity = @view.scene_mgr.create_entity(obj.name, obj.object_info.mesh_path)
180
+ entity.set_cast_shadows(true)
181
+ entity.set_material_name(obj.object_info.material_name) if obj.object_info.material_name
182
+
183
+ view_object = ViewObject.new(@view)
184
+ node = view_object.set_scene_node(entity, obj.object_info.view_offset, obj.object_info.view_rotation)
185
+ node.set_scale(obj.object_info.size.x * obj.object_info.scale.x,
186
+ obj.object_info.size.y * obj.object_info.scale.y,
187
+ obj.object_info.size.z * obj.object_info.scale.z)
188
+ return view_object
189
+ end
190
+
191
+ #
192
+ # Mesh Object
193
+ #
194
+
195
+ def create_mesh_object(obj)
196
+ entity = @view.scene_mgr.create_entity(obj.name, obj.object_info.mesh_path)
197
+ entity.set_cast_shadows(true)
198
+ entity.set_material_name(obj.object_info.material_name) if obj.object_info.material_name
199
+
200
+ view_object = ViewObject.new(@view)
201
+ node = view_object.set_scene_node(entity, obj.object_info.view_offset)
202
+ node.set_scale(obj.object_info.scale.x,
203
+ obj.object_info.scale.y,
204
+ obj.object_info.scale.z)
205
+ return view_object
206
+ end
207
+ end
208
+
209
+
210
+ end
data/lib/teien.rb CHANGED
@@ -8,33 +8,81 @@ require "ogrebites.so"
8
8
  require "teienlib.so"
9
9
 
10
10
  require "teien/tools.rb"
11
- require 'teien/light_object'
12
11
  require 'teien/object_info'
13
12
  require 'teien/physics_info'
14
- require 'teien/camera_mover'
13
+ require 'teien/animation'
14
+ require 'teien/smooth_mover'
15
+ require "teien/garden.rb"
16
+ require "teien/model.rb"
17
+ require "teien/controller.rb"
18
+ require "teien/ai.rb"
15
19
 
16
20
  module Teien
17
21
 
18
- def create_garden(klass)
19
- require "teien/garden.rb"
22
+ def self.start_server_garden(ip, port, sync_period = 0.5)
23
+ require "teien/synchronizer"
20
24
 
21
- return Teien::Garden.new(klass)
25
+ cwd = Dir.getwd
26
+ Dir.glob("#{cwd}/app/models/*.rb") {|file|
27
+ require "#{file}"
28
+ }
29
+
30
+ garden = Teien::Garden.new()
31
+ Teien::Model::load(garden)
32
+ # garden_script = garden_script_klass.new(garden)
33
+ sync = Synchronizer.new(garden, sync_period)
34
+ garden.run(ip, port)
22
35
  end
23
36
 
24
- =begin
25
- def createServerGarden(url, klass)
26
- require "teien/ServerGarden.rb"
27
- require "ENet.so"
37
+ def self.start_client_garden(ip, port)
38
+ require "teien/proxy_garden.rb"
39
+ require 'teien/user_interface'
40
+
41
+ cwd = Dir.getwd
42
+ Dir.glob("#{cwd}/app/controllers/*.rb") {|file|
43
+ require "#{file}"
44
+ }
28
45
 
29
- return MiniatureGarden::ServerGarden.new(url, klass)
46
+ garden = Teien::ProxyGarden.new()
47
+ ui = Teien::UserInterface.new(garden)
48
+ Teien::Controller::load(garden, ui)
49
+ # controller_script = controller_script_klass.new(garden, ui)
50
+ garden.run(ip, port)
30
51
  end
31
52
 
32
- def createClientGarden(uri, klass)
33
- require "teien/ClientGarden.rb"
34
- require "ENet.so"
53
+ def self.start_ai_garden(ip, port)
54
+ require "teien/proxy_garden.rb"
35
55
 
36
- return MiniatureGarden::ClientGarden.new(uri, klass)
56
+ cwd = Dir.getwd
57
+ Dir.glob("#{cwd}/app/ais/*.rb") {|file|
58
+ require "#{file}"
59
+ }
60
+
61
+ garden = Teien::ProxyGarden.new()
62
+ Teien::Ai::load(garden)
63
+ garden.run(ip, port)
37
64
  end
65
+
66
+
67
+ def self.start_local_garden()
68
+ require_relative 'teien/user_interface'
69
+
70
+ pid = Process.fork {
71
+ start_server_garden("0.0.0.0", 11922, 0.1)
72
+ }
73
+ begin
74
+ start_client_garden("0.0.0.0", 11922)
75
+ ensure
76
+ Process.kill("TERM", pid)
77
+ end
78
+
79
+ =begin
80
+ garden = Teien::Garden.new()
81
+ ui = Teien::UserInterface.new(garden)
82
+ garden_script = garden_script_klass.new(garden)
83
+ controller_script = controller_script_klass.new(garden, ui)
84
+ garden.run
38
85
  =end
86
+ end
39
87
 
40
88
  end