teien 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. data/README.md +7 -5
  2. data/bin/teien +36 -37
  3. data/lib/teien/{smooth_mover.rb → action_model/smooth_moving.rb} +19 -3
  4. data/lib/teien/actor/actor.rb +21 -0
  5. data/{sample/actor/app/helpers/user_event.rb → lib/teien/actor/actor_event.rb} +41 -32
  6. data/lib/teien/actor/actor_factory.rb +20 -0
  7. data/lib/teien/actor/actor_info.rb +7 -0
  8. data/lib/teien/actor/actor_manager.rb +31 -0
  9. data/lib/teien/actor/actor_manager_proxy.rb +72 -0
  10. data/lib/teien/addon/addon.rb +25 -0
  11. data/lib/teien/{animation.rb → animation/animation.rb} +1 -0
  12. data/lib/teien/animation/animation_event.rb +17 -0
  13. data/lib/teien/animation/animation_manager.rb +23 -0
  14. data/lib/teien/animation/animation_manager_proxy.rb +27 -0
  15. data/lib/teien/application/application.rb +43 -0
  16. data/lib/teien/base_object/attachment_info.rb +15 -0
  17. data/lib/teien/{garden_object.rb → base_object/base_object.rb} +43 -52
  18. data/lib/teien/{event.rb → base_object/base_object_event.rb} +9 -12
  19. data/lib/teien/base_object/base_object_manager.rb +57 -0
  20. data/lib/teien/{garden_base.rb → base_object/base_object_manager_base.rb} +22 -31
  21. data/lib/teien/{proxy_garden.rb → base_object/base_object_manager_proxy.rb} +20 -62
  22. data/lib/teien/base_object/object_info.rb +21 -0
  23. data/lib/teien/{physics.rb → base_object/physics.rb} +4 -5
  24. data/lib/teien/{physics_info.rb → base_object/physics_info.rb} +1 -0
  25. data/lib/teien/base_object/physics_object_factory.rb +23 -0
  26. data/lib/teien/base_object/std_objects/box_object_info.rb +42 -0
  27. data/lib/teien/base_object/std_objects/capsule_object_info.rb +44 -0
  28. data/lib/teien/base_object/std_objects/cone_object_info.rb +41 -0
  29. data/lib/teien/base_object/std_objects/cylinder_object_info.rb +44 -0
  30. data/lib/teien/base_object/std_objects/floor_object_info.rb +45 -0
  31. data/lib/teien/base_object/std_objects/light_object_info.rb +40 -0
  32. data/lib/teien/base_object/std_objects/mesh_bb_object_info.rb +42 -0
  33. data/lib/teien/base_object/std_objects/mesh_object_info.rb +62 -0
  34. data/lib/teien/base_object/std_objects/sphere_object_info.rb +38 -0
  35. data/lib/teien/commands/browser_command.rb +46 -0
  36. data/lib/teien/commands/local_command.rb +21 -0
  37. data/lib/teien/commands/server_command.rb +39 -0
  38. data/lib/teien/commands/std_command.rb +71 -0
  39. data/lib/teien/core/client_network.rb +26 -0
  40. data/lib/teien/core/component_manager.rb +11 -0
  41. data/lib/teien/core/core_event.rb +7 -0
  42. data/lib/teien/core/dispatcher.rb +30 -0
  43. data/lib/teien/core/event_router.rb +116 -0
  44. data/lib/teien/core/launcher.rb +31 -0
  45. data/lib/teien/core/network.rb +28 -0
  46. data/lib/teien/{remote_info.rb → core/remote_info.rb} +6 -1
  47. data/lib/teien/core/server_network.rb +23 -0
  48. data/lib/teien/{tools.rb → core/tools.rb} +2 -2
  49. data/lib/teien/{camera.rb → ui/camera.rb} +1 -1
  50. data/lib/teien/{camera_mover.rb → ui/camera_mover.rb} +1 -2
  51. data/lib/teien/ui/std_objects/box_object_info.rb +29 -0
  52. data/lib/teien/ui/std_objects/capsule_object_info.rb +28 -0
  53. data/lib/teien/ui/std_objects/cone_object_info.rb +25 -0
  54. data/lib/teien/ui/std_objects/cylinder_object_info.rb +26 -0
  55. data/lib/teien/ui/std_objects/floor_object_info.rb +34 -0
  56. data/lib/teien/ui/std_objects/light_object_info.rb +23 -0
  57. data/lib/teien/ui/std_objects/mesh_bb_object_info.rb +24 -0
  58. data/lib/teien/ui/std_objects/mesh_object_info.rb +24 -0
  59. data/lib/teien/ui/std_objects/sphere_object_info.rb +26 -0
  60. data/lib/teien/{user_interface.rb → ui/user_interface.rb} +18 -13
  61. data/lib/teien/{view.rb → ui/view.rb} +42 -20
  62. data/lib/teien/ui/view_object.rb +142 -0
  63. data/lib/teien/ui/view_object_factory.rb +23 -0
  64. data/lib/teien/version.rb +1 -1
  65. data/lib/teien.rb +3 -78
  66. data/mods/actor/addons/sinbad/lib/sinbad/sinbad_info.rb +16 -0
  67. data/{sample/actor/app/helpers → mods/actor/addons/sinbad/lib}/sinbad/sinbad_state.rb +14 -39
  68. data/mods/actor/addons/sinbad/lib/sinbad.rb +180 -0
  69. data/mods/actor/apps/browser/browser_application.rb +185 -0
  70. data/mods/actor/apps/common/browser_event.rb +68 -0
  71. data/mods/actor/apps/server/server_application.rb +101 -0
  72. data/{sample/actor/app/ais → mods/actor/commands/ai}/actor_ai.rb +8 -3
  73. data/mods/actor/commands/ai_command.rb +20 -0
  74. data/{sample/actor/config → mods/actor/configs}/plugins.cfg +4 -4
  75. data/{sample/hello_garden/app/controllers/hello_garden_controller.rb → mods/hello_garden/apps/browser/browser_application.rb} +48 -25
  76. data/mods/hello_garden/apps/common/browser_event.rb +58 -0
  77. data/{sample/hello_garden/app/models/hello_garden_model.rb → mods/hello_garden/apps/server/server_application.rb} +35 -26
  78. data/teien.gemspec +3 -1
  79. metadata +114 -55
  80. data/lib/teien/ai.rb +0 -27
  81. data/lib/teien/controller.rb +0 -30
  82. data/lib/teien/dispatcher.rb +0 -22
  83. data/lib/teien/event_router.rb +0 -118
  84. data/lib/teien/garden.rb +0 -91
  85. data/lib/teien/model.rb +0 -34
  86. data/lib/teien/network.rb +0 -108
  87. data/lib/teien/object_info.rb +0 -192
  88. data/lib/teien/physics_object_factory.rb +0 -170
  89. data/lib/teien/synchronizer.rb +0 -26
  90. data/lib/teien/view_object.rb +0 -67
  91. data/lib/teien/view_object_factory.rb +0 -210
  92. data/sample/actor/app/controllers/actor_controller.rb +0 -182
  93. data/sample/actor/app/helpers/sinbad/sinbad.rb +0 -176
  94. data/sample/actor/app/models/actor_model.rb +0 -108
  95. data/sample/hello_garden/app/helpers/user_event.rb +0 -12
  96. /data/lib/teien/{animation_operator.rb → animation/animation_operator.rb} +0 -0
  97. /data/lib/teien/{physics_object.rb → base_object/physics_object.rb} +0 -0
  98. /data/lib/teien/{sky_dome.rb → base_object/sky_dome.rb} +0 -0
  99. /data/lib/teien/{ui_listener.rb → ui/ui_listener.rb} +0 -0
  100. /data/{sample/actor/config → mods/actor/configs}/resources.cfg +0 -0
  101. /data/{sample/hello_garden/config → mods/hello_garden/configs}/plugins.cfg +0 -0
  102. /data/{sample/hello_garden/config → mods/hello_garden/configs}/resources.cfg +0 -0
  103. /data/{sample → mods}/hello_garden/run +0 -0
@@ -0,0 +1,31 @@
1
+ module Teien
2
+
3
+ class Launcher
4
+ @@argv = nil
5
+ @command = Hash.new
6
+
7
+ def self.launch(argv)
8
+ @@argv = argv
9
+
10
+ if @command[argv[0]]
11
+ require 'teien'
12
+ @command[argv[0]].call(argv)
13
+ else
14
+ puts "Command List:"
15
+ @command.each_key {|key|
16
+ puts key
17
+ }
18
+ end
19
+ end
20
+
21
+ def self.register_command(command_name, method)
22
+ @command[command_name] = method
23
+ end
24
+
25
+ def self.argv
26
+ return @@argv
27
+ end
28
+
29
+ end
30
+
31
+ end
@@ -0,0 +1,28 @@
1
+ require 'teien/core/remote_info'
2
+
3
+ module Teien
4
+
5
+ class Network < EM::Connection
6
+ @@connections = Hash.new
7
+ @@event_router = nil
8
+
9
+ def initialize(event_router)
10
+ puts "network initialize"
11
+ @@event_router = event_router
12
+ end
13
+
14
+ def self.connections
15
+ @@connections
16
+ end
17
+
18
+ include EM::P::ObjectProtocol
19
+
20
+
21
+ def self.send_event_to_all(obj)
22
+ @@connections.each_value { |c|
23
+ c.connection.send_object(obj) if c.connection
24
+ }
25
+ end
26
+ end
27
+
28
+ end
@@ -10,7 +10,12 @@ class RemoteInfo
10
10
  def initialize(con)
11
11
  @ip = nil
12
12
  @port = 0
13
- @port, @ip = Socket.unpack_sockaddr_in(con.get_peername) if con.get_peername
13
+ if con
14
+ @port, @ip = Socket.unpack_sockaddr_in(con.get_peername) if con.get_peername
15
+ else
16
+ @port = 0
17
+ @ip = "dummy ip"
18
+ end
14
19
  @connection = con
15
20
  @id = @@total_cnt
16
21
  @@total_cnt += 1
@@ -0,0 +1,23 @@
1
+ require 'teien/core/network'
2
+
3
+ module Teien
4
+
5
+ class ServerNetwork < Teien::Network
6
+ def post_init
7
+ puts "A client has connected."
8
+ @@connections[self] = RemoteInfo.new(self)
9
+ @@event_router.connection_binded(self)
10
+ end
11
+
12
+ def receive_object(obj)
13
+ @@event_router.receive_event(obj, self)
14
+ end
15
+
16
+ def unbind
17
+ puts "A client has unbinded."
18
+ @@event_router.connection_unbinded(self)
19
+ @@connections.delete(self)
20
+ end
21
+ end
22
+
23
+ end
@@ -47,7 +47,7 @@ class Vector3D < Bullet::BtVector3
47
47
  return Vector3D.new(vec.x, vec.y, vec.z)
48
48
  end
49
49
 
50
- def self.to_s(vec)
50
+ def self.to_string(vec)
51
51
  return sprintf("(%f, %f, %f)", vec.x, vec.y, vec.z)
52
52
  end
53
53
 
@@ -80,7 +80,7 @@ class Quaternion < Bullet::BtQuaternion
80
80
  return Quaternion.new(qt.x, qt.y, qt.z, qt.w)
81
81
  end
82
82
 
83
- def self.to_s(qt)
83
+ def self.to_string(qt)
84
84
  return sprintf("(%f, %f, %f, %f)", qt.x, qt.y, qt.z, qt.w)
85
85
  end
86
86
 
@@ -1,4 +1,4 @@
1
- require 'teien/camera_mover'
1
+ require 'teien/ui/camera_mover'
2
2
 
3
3
  module Teien
4
4
 
@@ -17,8 +17,6 @@ class CameraMover
17
17
  @camera.set_position(0, 0, 0)
18
18
  @camera.set_near_clip_distance(0.1)
19
19
 
20
- @style = CS_FREELOOK
21
-
22
20
  # CS_FREELOOK, CS_ORBIT, CS_MANUAL
23
21
  @sdk_camera_man = Ogrebites::SdkCameraMan.new(@camera)
24
22
  @evt_frame = Ogre::FrameEvent.new
@@ -33,6 +31,7 @@ class CameraMover
33
31
 
34
32
  @pivot_pitch = 0
35
33
 
34
+ set_style(CS_FREELOOK)
36
35
  end
37
36
 
38
37
  def set_style(style)
@@ -0,0 +1,29 @@
1
+ require "teien/ui/view_object_factory"
2
+ require "teien/base_object/std_objects/box_object_info"
3
+
4
+ module Teien
5
+
6
+ class BoxObjectInfo
7
+ def self.create_view_object(obj, view)
8
+ gen = Procedural::BoxGenerator.new()
9
+ gen.set_size_x(obj.object_info.size.x * 2.0)
10
+ gen.set_size_y(obj.object_info.size.y * 2.0)
11
+ gen.set_size_z(obj.object_info.size.z * 2.0)
12
+ gen.set_num_seg_x(obj.object_info.num_seg_x)
13
+ gen.set_num_seg_y(obj.object_info.num_seg_y)
14
+ gen.set_num_seg_z(obj.object_info.num_seg_z)
15
+ gen.set_utile(obj.object_info.u_tile).set_vtile(obj.object_info.v_tile).realize_mesh(obj.name)
16
+ entity = view.scene_mgr.create_entity(obj.name)
17
+ entity.set_cast_shadows(true)
18
+ entity.set_material_name(obj.object_info.material_name)
19
+
20
+ view_object = ViewObject.new(view)
21
+ view_object.set_scene_node(entity)
22
+
23
+ return view_object
24
+ end
25
+
26
+ ViewObjectFactory::set_creator(self, self.method(:create_view_object))
27
+ end
28
+
29
+ end
@@ -0,0 +1,28 @@
1
+ require "teien/ui/view_object_factory"
2
+ require "teien/base_object/std_objects/capsule_object_info"
3
+
4
+ module Teien
5
+
6
+ class CapsuleObjectInfo
7
+ def self.create_view_object(obj, view)
8
+ gen = Procedural::CapsuleGenerator.new()
9
+ gen.set_radius(obj.object_info.radius).set_height(obj.object_info.height)
10
+ gen.set_num_rings(obj.object_info.num_rings)
11
+ gen.set_num_segments(obj.object_info.num_segments)
12
+ gen.set_num_seg_height(obj.object_info.num_seg_height)
13
+ gen.set_vtile(obj.object_info.u_tile).set_vtile(obj.object_info.v_tile).realize_mesh(obj.name)
14
+ entity = view.scene_mgr.create_entity(obj.name)
15
+ entity.set_cast_shadows(true)
16
+ entity.set_material_name(obj.object_info.material_name)
17
+
18
+ view_object = ViewObject.new(view)
19
+ view_object.set_scene_node(entity)
20
+
21
+ return view_object
22
+ end
23
+
24
+ ViewObjectFactory::set_creator(self, self.method(:create_view_object))
25
+ end
26
+
27
+
28
+ end
@@ -0,0 +1,25 @@
1
+ require "teien/ui/view_object_factory"
2
+ require "teien/base_object/std_objects/cone_object_info"
3
+
4
+ module Teien
5
+
6
+ class ConeObjectInfo
7
+ def self.create_view_object(obj, view)
8
+ gen = Procedural::ConeGenerator.new
9
+ gen.set_radius(obj.object_info.radius).set_height(obj.object_info.height)
10
+ gen.set_num_seg_base(obj.object_info.num_seg_base).set_num_seg_height(obj.object_info.num_seg_height)
11
+ gen.set_utile(obj.object_info.u_tile).set_vtile(obj.object_info.v_tile).realize_mesh(obj.name)
12
+ entity = view.scene_mgr.create_entity(obj.name)
13
+ entity.set_cast_shadows(true)
14
+ entity.set_material_name(obj.object_info.material_name)
15
+
16
+ view_object = ViewObject.new(view)
17
+ view_object.set_scene_node(entity)
18
+
19
+ return view_object
20
+ end
21
+
22
+ ViewObjectFactory::set_creator(self, self.method(:create_view_object))
23
+ end
24
+
25
+ end
@@ -0,0 +1,26 @@
1
+ require "teien/ui/view_object_factory"
2
+ require "teien/base_object/std_objects/cylinder_object_info"
3
+
4
+ module Teien
5
+
6
+ class CylinderObjectInfo
7
+ def self.create_view_object(obj, view)
8
+ gen = Procedural::CylinderGenerator.new
9
+ gen.set_radius(obj.object_info.radius).set_height(obj.object_info.height).set_capped(obj.object_info.capped)
10
+ gen.set_num_seg_base(obj.object_info.num_seg_base).set_num_seg_height(obj.object_info.num_seg_height)
11
+ gen.set_utile(obj.object_info.u_tile).set_vtile(obj.object_info.v_tile).realize_mesh(obj.name)
12
+ entity = view.scene_mgr.create_entity(obj.name)
13
+ entity.set_cast_shadows(true)
14
+ entity.set_material_name(obj.object_info.material_name)
15
+
16
+ view_object = ViewObject.new(view)
17
+ view_object.set_scene_node(entity,
18
+ Vector3D.new(0, -obj.object_info.height / 2, 0))
19
+
20
+ return view_object
21
+ end
22
+
23
+ ViewObjectFactory::set_creator(self, self.method(:create_view_object))
24
+ end
25
+
26
+ end
@@ -0,0 +1,34 @@
1
+ require "teien/ui/view_object_factory"
2
+ require "teien/base_object/std_objects/floor_object_info"
3
+
4
+ module Teien
5
+
6
+ class FloorObjectInfo
7
+ # Setting an entity and a node of Ogre3d.
8
+ def self.create_view_object(obj, view)
9
+ normal = Ogre::Vector3.new(0, 1, 0)
10
+ up = Ogre::Vector3.new(0, 0, 1)
11
+ Ogre::MeshManager::get_singleton().create_plane(obj.name,
12
+ Ogre::ResourceGroupManager.DEFAULT_RESOURCE_GROUP_NAME,
13
+ Ogre::Plane.new(normal, 0),
14
+ obj.object_info.width * 2.0,
15
+ obj.object_info.height * 2.0,
16
+ obj.object_info.num_seg_x,
17
+ obj.object_info.num_seg_y,
18
+ true, 1,
19
+ obj.object_info.u_tile,
20
+ obj.object_info.v_tile, up)
21
+ entity = view.scene_mgr.create_entity(obj.name, obj.name)
22
+ entity.set_cast_shadows(true)
23
+ entity.set_material_name(obj.object_info.material_name)
24
+
25
+ view_object = ViewObject.new(view)
26
+ view_object.set_scene_node(entity)
27
+
28
+ return view_object
29
+ end
30
+
31
+ ViewObjectFactory::set_creator(self, self.method(:create_view_object))
32
+ end
33
+
34
+ end
@@ -0,0 +1,23 @@
1
+ require "teien/ui/view_object_factory"
2
+ require "teien/base_object/std_objects/light_object_info"
3
+
4
+ module Teien
5
+
6
+ class LightObjectInfo
7
+ def self.create_view_object(obj, view)
8
+ entity = view.scene_mgr.create_light(obj.name)
9
+ entity.set_type(obj.object_info.type)
10
+ entity.set_diffuse_colour(obj.object_info.diffuse_color)
11
+ entity.set_specular_colour(obj.object_info.specular_color)
12
+ entity.set_direction(Vector3D.to_ogre(obj.object_info.direction))
13
+
14
+ view_object = ViewObject.new(@view)
15
+ view_object.entity = entity
16
+
17
+ return view_object
18
+ end
19
+
20
+ ViewObjectFactory::set_creator(self, self.method(:create_view_object))
21
+ end
22
+
23
+ end
@@ -0,0 +1,24 @@
1
+ require "teien/ui/view_object_factory"
2
+ require "teien/base_object/std_objects/mesh_bb_object_info"
3
+
4
+ module Teien
5
+
6
+ class MeshBBObjectInfo
7
+ def self.create_view_object(obj, view)
8
+ entity = view.scene_mgr.create_entity(obj.name, obj.object_info.mesh_path)
9
+ entity.set_cast_shadows(true)
10
+ entity.set_material_name(obj.object_info.material_name) if obj.object_info.material_name
11
+
12
+ view_object = ViewObject.new(view)
13
+ node = view_object.set_scene_node(entity, obj.object_info.view_offset, obj.object_info.view_rotation)
14
+ node.set_scale(obj.object_info.size.x * obj.object_info.scale.x,
15
+ obj.object_info.size.y * obj.object_info.scale.y,
16
+ obj.object_info.size.z * obj.object_info.scale.z)
17
+
18
+ return view_object
19
+ end
20
+
21
+ ViewObjectFactory::set_creator(self, self.method(:create_view_object))
22
+ end
23
+
24
+ end
@@ -0,0 +1,24 @@
1
+ require "teien/ui/view_object_factory"
2
+ require "teien/base_object/std_objects/mesh_object_info"
3
+
4
+ module Teien
5
+
6
+ class MeshObjectInfo
7
+ def self.create_view_object(obj, view)
8
+ entity = view.scene_mgr.create_entity(obj.name, obj.object_info.mesh_path)
9
+ entity.set_cast_shadows(true)
10
+ entity.set_material_name(obj.object_info.material_name) if obj.object_info.material_name
11
+
12
+ view_object = ViewObject.new(view)
13
+ node = view_object.set_scene_node(entity, obj.object_info.view_offset)
14
+ node.set_scale(obj.object_info.scale.x,
15
+ obj.object_info.scale.y,
16
+ obj.object_info.scale.z)
17
+
18
+ return view_object
19
+ end
20
+
21
+ ViewObjectFactory::set_creator(self, self.method(:create_view_object))
22
+ end
23
+
24
+ end
@@ -0,0 +1,26 @@
1
+ require "teien/ui/view_object_factory"
2
+ require "teien/base_object/std_objects/sphere_object_info"
3
+
4
+ module Teien
5
+
6
+ class SphereObjectInfo
7
+ def self.create_view_object(obj, view)
8
+ gen = Procedural::SphereGenerator.new()
9
+ gen.set_radius(obj.object_info.radius)
10
+ gen.set_num_rings(obj.object_info.num_rings)
11
+ gen.set_num_segments(obj.object_info.num_segments)
12
+ gen.set_vtile(obj.object_info.u_tile).set_vtile(obj.object_info.v_tile).realize_mesh(obj.name)
13
+ entity = view.scene_mgr.create_entity(obj.name)
14
+ entity.set_cast_shadows(true)
15
+ entity.set_material_name(obj.object_info.material_name)
16
+
17
+ view_object = ViewObject.new(view)
18
+ view_object.set_scene_node(entity)
19
+
20
+ return view_object
21
+ end
22
+
23
+ ViewObjectFactory::set_creator(self, self.method(:create_view_object))
24
+ end
25
+
26
+ end
@@ -1,20 +1,21 @@
1
- require 'teien/camera'
2
- require 'teien/view'
3
- require "teien/dispatcher.rb"
1
+ require 'teien/ui/camera'
2
+ require 'teien/ui/view'
4
3
 
5
4
  module Teien
6
5
 
7
6
  class UserInterface
8
7
  # include Dispatcher
9
8
 
10
- attr_accessor :garden
9
+ attr_accessor :base_object_manager
11
10
  attr_accessor :debug_draw
12
11
 
13
- def initialize(garden)
12
+ def initialize(event_router, base_object_manager)
14
13
  super()
15
14
 
16
- @garden = garden
17
- @garden.register_receiver(self)
15
+ @event_router = event_router
16
+ @event_router.register_receiver(self)
17
+ @base_object_manager = base_object_manager
18
+ @base_object_manager.register_receiver(self)
18
19
 
19
20
  @view = View.new()
20
21
  @camera = nil
@@ -22,6 +23,10 @@ class UserInterface
22
23
  @debug_draw = false
23
24
  end
24
25
 
26
+ def finalize
27
+ @view.finalize
28
+ end
29
+
25
30
  def set_window_title(title)
26
31
  @view.window_title = title
27
32
  end
@@ -30,7 +35,7 @@ class UserInterface
30
35
  @debug_draw = bl
31
36
  if (bl)
32
37
  @debug_drawer = Teienlib::DebugDrawer.new(@view.scene_mgr)
33
- @garden.physics.dynamics_world.set_debug_drawer(@debug_drawer)
38
+ @base_object_manager.physics.dynamics_world.set_debug_drawer(@debug_drawer)
34
39
  end
35
40
  end
36
41
 
@@ -62,7 +67,7 @@ class UserInterface
62
67
  # called as a receiver by a dispatcher.
63
68
 
64
69
  #
65
- # By Garden/GardenBase
70
+ # By Base_Object_Manager/Base_Object_ManagerBase
66
71
  #
67
72
 
68
73
  def set_ambient_light(color)
@@ -73,16 +78,16 @@ class UserInterface
73
78
  @view.scene_mgr.set_sky_dome(enable, materialName, curvature, tiling, distance)
74
79
  end
75
80
 
76
- def setup(garden)
77
- @view.setup(garden)
81
+ def setup()
82
+ @view.setup(@base_object_manager)
78
83
  end
79
84
 
80
85
  def create_object(obj)
81
- @view.add_view_object(obj)
86
+ @view.create_object(obj)
82
87
  end
83
88
 
84
89
  def update(delta)
85
- @garden.physics.dynamics_world.debug_draw_world() if @debug_draw
90
+ @base_object_manager.physics.dynamics_world.debug_draw_world() if @debug_draw
86
91
  @view.update(delta)
87
92
  end
88
93
  end
@@ -1,6 +1,16 @@
1
- require 'teien/ui_listener'
2
- require "teien/view_object_factory.rb"
3
- require "teien/dispatcher.rb"
1
+ require 'teien/ui/ui_listener'
2
+ require "teien/ui/view_object_factory.rb"
3
+ require "teien/core/dispatcher.rb"
4
+
5
+ require_relative "std_objects/light_object_info"
6
+ require_relative "std_objects/floor_object_info"
7
+ require_relative "std_objects/mesh_bb_object_info"
8
+ require_relative "std_objects/mesh_object_info"
9
+ require_relative "std_objects/box_object_info"
10
+ require_relative "std_objects/sphere_object_info"
11
+ require_relative "std_objects/capsule_object_info"
12
+ require_relative "std_objects/cone_object_info"
13
+ require_relative "std_objects/cylinder_object_info"
4
14
 
5
15
  module Teien
6
16
 
@@ -15,7 +25,7 @@ class View < Ogre::FrameListener
15
25
  attr_accessor :scene_mgr
16
26
  attr_accessor :tray_mgr
17
27
  attr_accessor :window_title
18
-
28
+ attr_accessor :objects
19
29
 
20
30
  def initialize()
21
31
  super()
@@ -30,15 +40,14 @@ class View < Ogre::FrameListener
30
40
  @tray_mgr = nil
31
41
  @inputManager = nil
32
42
  @window_title = ""
33
-
34
- @object_factory = ViewObjectFactory.new(self)
43
+ @objects = Hash.new
35
44
  end
36
45
 
37
- def setup(garden)
46
+ def setup(base_object_manager)
38
47
  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"
48
+ @base_object_manager = base_object_manager
49
+ @plugins_cfg = @base_object_manager.plugins_cfg ? @base_object_manager.plugins_cfg : "configs/plugins.cfg"
50
+ @resources_cfg = @base_object_manager.resources_cfg ? @base_object_manager.resources_cfg : "configs/resources.cfg"
42
51
 
43
52
  @root = Ogre::Root.new("")
44
53
  load_plugins()
@@ -67,8 +76,10 @@ class View < Ogre::FrameListener
67
76
 
68
77
  cfg.each_settings {|secName, keyName, valueName|
69
78
  fullPath = pluginDir + valueName
70
- fullPath.sub!("<ConfigFileFolder>", File.dirname(@garden.plugins_cfg)) if @garden.resources_cfg
71
- fullPath.sub!("<SystemPluginFolder>", OgreConfig::get_plugin_folder)
79
+ if @base_object_manager.resources_cfg
80
+ fullPath.sub!("<ConfigFileFolder>", File.dirname(@base_object_manager.plugins_cfg))
81
+ end
82
+ fullPath.sub!("<SystemPluginFolder>", Ruby::Ogre::get_plugin_folder)
72
83
  @root.load_plugin(fullPath) if (keyName == "Plugin")
73
84
  }
74
85
  end
@@ -86,10 +97,10 @@ class View < Ogre::FrameListener
86
97
  next if (keyName == "ResourceFolder")
87
98
 
88
99
  fullPath = resourceDir + valueName
89
- if @garden.resources_cfg
90
- fullPath.sub!("<ConfigFileFolder>", File.dirname(@garden.resources_cfg))
100
+ if @base_object_manager.resources_cfg
101
+ fullPath.sub!("<ConfigFileFolder>", File.dirname(@base_object_manager.resources_cfg))
91
102
  end
92
- fullPath.sub!("<SystemResourceFolder>", OgreConfig::get_resource_folder)
103
+ fullPath.sub!("<SystemResourceFolder>", Ruby::Ogre::get_resource_folder)
93
104
 
94
105
  Ogre::ResourceGroupManager::get_singleton().add_resource_location(fullPath,
95
106
  keyName,
@@ -175,8 +186,13 @@ class View < Ogre::FrameListener
175
186
  @scene_mgr.set_ambient_light(color)
176
187
  end
177
188
 
178
- def add_view_object(obj)
179
- obj.view_object = @object_factory.create_object(obj)
189
+ def create_object(obj)
190
+ view_object = ViewObjectFactory::create_object(obj, self)
191
+
192
+ obj.register_receiver(view_object)
193
+ view_object.object = obj
194
+
195
+ @objects[obj.name] = view_object if view_object
180
196
  end
181
197
 
182
198
  # Takes a screen shot.
@@ -199,13 +215,19 @@ class View < Ogre::FrameListener
199
215
  return @root.render_one_frame(delta)
200
216
  end
201
217
 
202
- # Called through @root.renderOneFrame(delta).
218
+ # Called through @root.render_one_frame(delta).
203
219
  def frame_rendering_queued(evt)
204
220
  @keyboard.capture()
205
221
  @mouse.capture()
206
222
 
207
- @garden.objects.each_value {|obj|
208
- obj.view_object.update_animation(evt.timeSinceLastFrame, obj.animation_info)
223
+ animation_manager = Teien::get_component("animation_manager")
224
+ @objects.each_value {|obj|
225
+ if obj.object.attached_objects.length > 0
226
+ obj.update_attached_objects(self)
227
+ end
228
+
229
+ animation = animation_manager.animations[obj.object.name]
230
+ obj.update_animation(evt.timeSinceLastFrame, animation) if animation
209
231
  }
210
232
 
211
233
  @tray_mgr.frame_rendering_queued(evt)