teien 0.0.3 → 0.1.0

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 (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)