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,142 @@
1
+ require "teien/animation/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
+ attr_accessor :object
14
+
15
+ def initialize(view)
16
+ @view = view
17
+ @pivot_scene_node = nil
18
+ @scene_node = nil
19
+ @entity = nil
20
+ @animation_operators = Hash.new
21
+ @attached_objects = Hash.new
22
+ @base_object_manager = Teien::get_component("base_object_manager")
23
+ end
24
+
25
+ def finalize()
26
+ @pivot_scene_node.remove_child(@scene_node)
27
+ @view.scene_mgr.destroySceneNode(@scene_node)
28
+ @view.scene_mgr.get_root_scene_node.remove_child(@pivot_scene_node)
29
+ @view.scene_mgr.destroySceneNode(@pivot_scene_node)
30
+ @view.scene_mgr.destroyEntity(@entity)
31
+ end
32
+
33
+ def update_attached_objects(view)
34
+ # attached
35
+ @object.attached_objects.each_pair {|key, info|
36
+ unless @attached_objects[key]
37
+ attached_object = @base_object_manager.objects[info.object_name]
38
+ attached_entity = view.objects[attached_object.name].entity
39
+ attached_scene_node = view.objects[attached_object.name].scene_node
40
+
41
+ puts "attached: #{info.bone_name}, #{attached_entity}"
42
+
43
+ attached_scene_node.detach_object(attached_entity)
44
+ tag = @entity.attach_object_to_bone(info.bone_name, attached_entity)
45
+ # @manager.physics.dynamics_world.remove_rigid_body(obj.rigid_body)
46
+ attached_object.mode = Teien::BaseObject::MODE_ATTACHED
47
+ @attached_objects[key] = info
48
+ end
49
+ }
50
+
51
+ # detached
52
+ @attached_objects.each_pair {|key, info|
53
+ unless @object.attached_objects[key]
54
+ detached_object = @base_object_manager.objects[info.object_name]
55
+ detached_entity = view.objects[detached_object.name]
56
+ detached_scene_node = view.objects[detached_object.name].scene_node
57
+
58
+ @entity.detach_object_from_bone(detached_entity)
59
+ detached_scene_node.attach_object(obj.entity)
60
+ =begin
61
+ if obj.physics_info.collision_filter
62
+ @manager.physics.dynamics_world.add_rigid_body(obj.rigid_body,
63
+ obj.physics_info.collision_filter.group,
64
+ obj.physics_info.collision_filter.mask)
65
+ else
66
+ @manager.physics.dynamics_world.add_rigid_body(obj.rigid_body)
67
+ end
68
+ =end
69
+ detached_object.mode = Teien::BaseObject::MODE_FREE
70
+ @attached_objects.delete(key)
71
+ end
72
+ }
73
+
74
+
75
+ end
76
+
77
+ def update_animation(delta, animation)
78
+ animation.operators.each_pair{|key, value|
79
+ unless @animation_operators[key]
80
+ @entity.get_skeleton().set_blend_mode(animation.blend_mode)
81
+ ani_ope = AnimationOperator.new(@entity)
82
+ ani_ope.init(value.name, value.loop)
83
+ @animation_operators[key] = ani_ope
84
+ end
85
+
86
+ if (value.name != @animation_operators[key].name ||
87
+ value.loop != @animation_operators[key].loop)
88
+ @animation_operators[key].play(value.name, value.loop)
89
+ end
90
+ @animation_operators[key].add_time(delta * value.speed)
91
+ }
92
+ end
93
+
94
+ #
95
+ # The offset changes the local position of the created scene_node in Object.
96
+ #
97
+ def set_scene_node(entity, offset = Vector3D.new(0, 0, 0), rotate = Quaternion.new(0, 0, 0, 1.0))
98
+ if (@pivot_scene_node == nil)
99
+ @pivot_scene_node = @view.scene_mgr.get_root_scene_node().create_child_scene_node()
100
+ end
101
+ @scene_node = @pivot_scene_node.create_child_scene_node(Vector3D.to_ogre(offset),
102
+ Quaternion.to_ogre(rotate))
103
+ @pivot_scene_node.instance_variable_set(:@child, @scene_node) # prevent this from GC.
104
+
105
+ if entity
106
+ @scene_node.attach_object(entity)
107
+ @entity = entity
108
+ end
109
+
110
+ return @scene_node
111
+ end
112
+
113
+ #
114
+ # handlers of BaseObject
115
+
116
+ def set_position(aPos)
117
+ if @pivot_scene_node
118
+ @pivot_scene_node.set_position(aPos.x, aPos.y, aPos.z)
119
+ else
120
+ # object_info.class == LightObjectInfo
121
+ @entity.set_position(Vector3D.to_ogre(aPos))
122
+ end
123
+ end
124
+
125
+ def set_world_transform(transform)
126
+ newPos = transform.get_origin()
127
+ newRot = transform.get_rotation()
128
+ # puts "newRot(#{id}: #{newRot.x}, #{newRot.y}, #{newRot.z}, #{newRot.w})"
129
+ # puts "newPos(#{id}: #{newPos.x}, #{newPos.y}, #{newPos.z})"
130
+
131
+ return if (newRot.x.nan?)
132
+
133
+ @pivot_scene_node.set_position(newPos.x, newPos.y, newPos.z)
134
+ @pivot_scene_node.set_orientation(newRot.w, newRot.x, newRot.y, newRot.z)
135
+ end
136
+
137
+ def set_rotation(rot)
138
+ @pivot_scene_node.set_orientation(Quaternion.to_ogre(rot))
139
+ end
140
+ end
141
+
142
+ end
@@ -0,0 +1,23 @@
1
+ require 'teien/base_object/base_object'
2
+ require 'teien/ui/view_object'
3
+
4
+ module Teien
5
+
6
+ class ViewObjectFactory
7
+ @creators = Hash.new
8
+
9
+ def self.create_object(obj, view)
10
+ if @creators[obj.object_info.class] != nil
11
+ return @creators[obj.object_info.class].call(obj, view)
12
+ else
13
+ puts "not a supported object: #{obj.object_info.class}"
14
+ return nil
15
+ end
16
+ end
17
+
18
+ def self.set_creator(info_klass, creator)
19
+ @creators[info_klass] = creator
20
+ end
21
+ end
22
+
23
+ end
data/lib/teien/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Teien
2
- VERSION = "0.0.3"
2
+ VERSION = "0.1.0"
3
3
  end
data/lib/teien.rb CHANGED
@@ -7,82 +7,7 @@ require "ois.so"
7
7
  require "ogrebites.so"
8
8
  require "teienlib.so"
9
9
 
10
- require "teien/tools.rb"
11
- require 'teien/object_info'
12
- require 'teien/physics_info'
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"
10
+ require "teien/core/tools.rb"
11
+ require "teien/core/component_manager"
12
+ require "teien/core/event_router"
19
13
 
20
- module Teien
21
-
22
- def self.start_server_garden(ip, port, sync_period = 0.5)
23
- require "teien/synchronizer"
24
-
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)
35
- end
36
-
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
- }
45
-
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)
51
- end
52
-
53
- def self.start_ai_garden(ip, port)
54
- require "teien/proxy_garden.rb"
55
-
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)
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
85
- =end
86
- end
87
-
88
- end
@@ -0,0 +1,16 @@
1
+ require "teien/actor/actor_info"
2
+
3
+ class SinbadInfo < Teien::ActorInfo
4
+ attr_accessor :object_name
5
+
6
+ def initialize(actor_name)
7
+ @actor_name = actor_name
8
+ @object_name = nil
9
+ end
10
+
11
+ def self.create_actor(sinbad_info)
12
+ Sinbad.new(sinbad_info)
13
+ end
14
+
15
+ Teien::ActorFactory::register_creator(self, self.method(:create_actor))
16
+ end
@@ -5,13 +5,11 @@ class SinbadState
5
5
  @stateHash = {}
6
6
  @stateHash["Stop"] = Stop.new(parent)
7
7
  @stateHash["Run"] = Run.new(parent)
8
- @stateHash["GravityFree"] = GravityFree.new(parent)
9
8
  @stateHash["InAir"] = InAir.new(parent)
10
9
  @stateHash["Jump"] = Jump.new(parent)
11
10
  @stateHash["JumpLoop"] = JumpLoop.new(parent)
12
11
  @stateHash["JumpEnd"] = JumpEnd.new(parent)
13
12
  set_state("Stop")
14
-
15
13
  end
16
14
 
17
15
  def set_state(state)
@@ -20,9 +18,7 @@ class SinbadState
20
18
  @state.fini() if (@state != nil)
21
19
  @prevState = @state
22
20
  @state = nextState
23
-
24
- puts state
25
-
21
+ # puts state
26
22
  @state.init() if(@state != nil)
27
23
  return true
28
24
  end
@@ -58,7 +54,7 @@ class SinbadState
58
54
  def init()
59
55
  @parent.play_top_animation("IdleTop")
60
56
  @parent.play_base_animation("IdleBase")
61
- # @parent.object.set_damping(0.9, 0)
57
+ @parent.object.set_damping(0.9, 0)
62
58
  end
63
59
  def update(delta)
64
60
  unless @parent.check_on_ground()
@@ -83,11 +79,16 @@ class SinbadState
83
79
  def init()
84
80
  @parent.play_top_animation("RunTop")
85
81
  @parent.play_base_animation("RunBase")
86
- # @parent.object.set_damping(0.0, 0)
82
+ @parent.object.set_damping(0.0, 0)
87
83
  @parent.object.set_max_horizontal_velocity(17.0)
88
84
  end
89
85
 
90
86
  def update(delta)
87
+ unless @parent.check_on_ground()
88
+ @parent.state.set_state("InAir")
89
+ return
90
+ end
91
+
91
92
  @parent.mover.update_target(delta)
92
93
  unless (@parent.mover.moving?())
93
94
  @parent.state.set_state("Stop")
@@ -98,33 +99,6 @@ class SinbadState
98
99
  end
99
100
  end
100
101
 
101
- class GravityFree
102
- def initialize(parent)
103
- @parent = parent
104
- end
105
-
106
- def init()
107
- @parent.play_top_animation("IdleTop")
108
- @parent.play_base_animation("IdleBase")
109
- # @parent.object.set_damping(0, 0)
110
-
111
- grav = @parent.object.get_gravity()
112
- puts "gravity: (#{grav.x}, #{grav.y}, #{grav.z})"
113
- @parent.object.set_gravity(Vector3D.new(0, 0, 0))
114
-
115
- @parent.mover = @parent.grav_mover
116
- end
117
-
118
- def update(delta)
119
- @parent.mover.update_target(delta)
120
- end
121
-
122
- def fini()
123
- @parent.object.set_gravity(Vector3D.new(0, -9.8, 0))
124
- @parent.mover = @parent.sm_mover
125
- end
126
- end
127
-
128
102
  class InAir
129
103
  def initialize(parent)
130
104
  @parent = parent
@@ -133,7 +107,7 @@ class SinbadState
133
107
  def init()
134
108
  @parent.play_top_animation("IdleTop")
135
109
  @parent.play_base_animation("IdleBase")
136
- # @parent.object.set_damping(0, 0)
110
+ @parent.object.set_damping(0, 0)
137
111
 
138
112
  @parent.object.set_gravity(Vector3D.new(0, -9.8, 0))
139
113
  end
@@ -156,10 +130,11 @@ class SinbadState
156
130
  def init()
157
131
  @parent.play_top_animation("IdleTop")
158
132
  @parent.play_base_animation("JumpStart")
159
- # @parent.object.set_damping(0, 0)
133
+ @parent.object.set_damping(0, 0)
160
134
 
161
135
  @parent.object.set_gravity(Vector3D.new(0, -9.8, 0))
162
- @parent.object.set_acceleration(Vector3D.new(0, 39.8, 0))
136
+ # @parent.object.set_acceleration(Vector3D.new(0, 39.8, 0))
137
+ @parent.object.set_acceleration(Vector3D.new(0, 60, 0))
163
138
  @timer = 0
164
139
  end
165
140
 
@@ -184,7 +159,7 @@ class SinbadState
184
159
  def init()
185
160
  @parent.play_top_animation("IdleTop")
186
161
  @parent.play_base_animation("JumpLoop")
187
- # @parent.object.set_damping(0, 0)
162
+ @parent.object.set_damping(0, 0)
188
163
  @parent.object.set_acceleration(Vector3D.new(0, 0.0, 0))
189
164
  end
190
165
 
@@ -207,7 +182,7 @@ class SinbadState
207
182
  def init()
208
183
  @parent.play_top_animation("IdleTop")
209
184
  @parent.play_base_animation("JumpEnd")
210
- # @parent.object.set_damping(0, 0)
185
+ @parent.object.set_damping(0, 0)
211
186
 
212
187
  @parent.object.set_gravity(Vector3D.new(0, -9.8, 0))
213
188
  end
@@ -0,0 +1,180 @@
1
+ require_relative "sinbad/sinbad_state"
2
+ require_relative "sinbad/sinbad_info"
3
+
4
+ class ClosestNotMe < Bullet::ClosestRayResultCallback
5
+ def initialize(rb)
6
+ super(Bullet::BtVector3.new(0.0, 0.0, 0.0), Bullet::BtVector3.new(0.0, 0.0, 0.0))
7
+ @rigidBody = rb
8
+ end
9
+
10
+ def add_single_result(rayResult, normalInWorldSpace)
11
+ return 1.0 if (rayResult.m_collisionObject == @rigedBody)
12
+ return super(rayResult, normalInWorldSpace)
13
+ end
14
+ end
15
+
16
+
17
+ include Teien
18
+
19
+ require "teien/action_model/smooth_moving"
20
+
21
+ class Sinbad < Teien::Actor
22
+ attr_accessor :object
23
+ attr_accessor :actor
24
+ attr_accessor :mover
25
+ attr_accessor :state
26
+
27
+ def initialize(sinbad_info)
28
+ @base_object_manager = Teien::get_component("base_object_manager")
29
+
30
+ build_object(sinbad_info)
31
+
32
+ @mover = SmoothMoving.new(@object.name)
33
+ @mover.acceleration = 50
34
+
35
+ @state = SinbadState.new(self)
36
+ end
37
+
38
+ def finalize()
39
+ @base_object_manager.objects.delete(@object.name)
40
+ @base_object_manager.objects.delete("SinbadSword1")
41
+ @base_object_manager.objects.delete("SinbadSword2")
42
+ @object.finalize()
43
+ end
44
+
45
+
46
+ def dump_event()
47
+ return Event::SyncSinbad.new(self)
48
+ end
49
+
50
+
51
+ def self.load_event(base_object_manager, actors, event)
52
+ actor = actors[event.actor_name]
53
+ if actor == nil
54
+ actor = Sinbad.new(base_object_manager, event.actor_name)
55
+ else
56
+ actor = actors[event.actor_name]
57
+ end
58
+
59
+ return actor
60
+ end
61
+
62
+ def build_object(sinbad_info)
63
+ @name = sinbad_info.actor_name
64
+
65
+ if sinbad_info.object_name
66
+ @object = @base_object_manager.objects[sinbad_info.object_name]
67
+ @animation = Teien::get_component("animation_manager").animations[@object.name]
68
+ else
69
+ object_info = MeshBBObjectInfo.new("sinbad.mesh", Vector3D.new(1.0, 1.0, 1.0))
70
+ object_info.scale = Vector3D.new(1.0 / 2.0, 1.0 / 2.0, 1.0 / 2.0)
71
+ object_info.physics_offset = Vector3D.new(0, 1.0, 0)
72
+ object_info.view_offset = Vector3D.new(0, 2.5, 0)
73
+ object_info.view_rotation = Quaternion.new(Vector3D.new(0, 1, 0), Ogre::Degree.new(180.0).value_radians)
74
+ physics_info = PhysicsInfo.new(1.0)
75
+ physics_info.angular_factor = 0
76
+ physics_info.restitution = 0.5
77
+ physics_info.friction = 0.5
78
+ physics_info.linear_damping = 0.5
79
+ physics_info.angular_damping = 0
80
+ @object = @base_object_manager.create_object(@name, object_info, physics_info)
81
+ @object.set_position(Vector3D.new(0, 0, 0))
82
+
83
+ event = Teien::Event::BaseObject::SyncObject.new(@object)
84
+ Teien::get_component("event_router").send_event(event)
85
+
86
+ @animation = Teien::get_component("animation_manager").create_animation(@object.name)
87
+ @animation.create_operator("TopAnim", "IdeleTop", 1.0, true)
88
+ @animation.create_operator("BaseAnim", "IdleBase", 1.0, true)
89
+ @animation.create_operator("HandsAnim", "HandsRelaxed", 1.0, true)
90
+
91
+ event = Teien::Event::Animation::SyncAnimation.new(@object.name, @animation)
92
+ Teien::get_component("event_router").send_event(event)
93
+ end
94
+
95
+
96
+ # swords
97
+ object_info = MeshObjectInfo.new("Sword.mesh")
98
+ object_info.scale = Vector3D.new(1.0 / 2.0, 1.0 / 2.0, 1.0 / 2.0)
99
+ @sword1 = @base_object_manager.create_object("SinbadSword1", object_info)
100
+ @object.attach_object_to_bone("Sheath.L", @sword1)
101
+
102
+ object_info = MeshObjectInfo.new("Sword.mesh")
103
+ object_info.scale = Vector3D.new(1.0 / 2.0, 1.0 / 2.0, 1.0 / 2.0)
104
+ @sword2 = @base_object_manager.create_object("SinbadSword2", object_info)
105
+ @object.attach_object_to_bone("Sheath.R", @sword2)
106
+ end
107
+
108
+ def receive_event(event, from)
109
+ end
110
+
111
+ def update(delta)
112
+ @state.update(delta) if @state
113
+ end
114
+
115
+ def check_on_ground()
116
+ rayCallback = ClosestNotMe.new(@object.physics_object.rigid_body)
117
+ rayCallback.m_closestHitFraction = 1.0
118
+ src = @object.get_position() + Vector3D.new(0, 0.1, 0)
119
+ tgt = src + Vector3D.new(0, -0.2, 0)
120
+
121
+ # puts "src(#{src.x}, #{src.y}, #{src.z})"
122
+ # puts "tgt(#{tgt.x}, #{tgt.y}, #{tgt.z})"
123
+
124
+ @base_object_manager.physics.dynamics_world.ray_test(src, tgt, rayCallback)
125
+ return true if (rayCallback.has_hit())
126
+ return false
127
+ end
128
+
129
+ def set_forward_direction(dir)
130
+ @mover.set_forward_direction(dir)
131
+ end
132
+
133
+ def move_forward(bl)
134
+ @mover.move_forward(bl)
135
+ end
136
+
137
+ def move_backward(bl)
138
+ @mover.move_backward(bl)
139
+ end
140
+
141
+ def move_left(bl)
142
+ @mover.move_left(bl)
143
+ end
144
+
145
+ def move_right(bl)
146
+ @mover.move_right(bl)
147
+ end
148
+
149
+ def jump(bl)
150
+ if bl
151
+ unless @state.state?("JumpLoop")
152
+ @state.set_state("Jump")
153
+ end
154
+ end
155
+ end
156
+
157
+ def action_left()
158
+ @object.detach_object_from_bone(@sword1)
159
+ #@state.set_state("Kick")
160
+ end
161
+
162
+ def action_right
163
+ @state.set_state("Attack")
164
+ end
165
+
166
+ def play_top_animation(name, loop = true)
167
+ @animation.operators["TopAnim"].name = name
168
+ @animation.operators["TopAnim"].loop = loop
169
+ end
170
+
171
+ def play_base_animation(name, loop = true)
172
+ @animation.operators["BaseAnim"].name = name
173
+ @animation.operators["BaseAnim"].loop = loop
174
+ end
175
+
176
+ def play_hands_animation(name, loop = true)
177
+ @animation.operators["HandsAnim"].name = name
178
+ @animation.operators["HnadsAnim"].loop = loop
179
+ end
180
+ end