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
@@ -1,210 +0,0 @@
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
@@ -1,182 +0,0 @@
1
- require 'teien'
2
- require_relative '../helpers/user_event'
3
- require_relative '../helpers/sinbad/sinbad'
4
-
5
- include Teien
6
-
7
- class ActorController < Teien::Controller
8
- def setup(garden)
9
- @quit = false
10
- @actor = nil
11
- @first_update = true
12
-
13
- @camera_mover = @ui.get_camera().get_mover()
14
- @camera_mover.set_position(Vector3D.new(0, 10, 0))
15
- @camera_mover.look_at(Vector3D.new(0, 0, 0))
16
-
17
- @ui.show_frame_stats(UI::TL_BOTTOMLEFT)
18
- @ui.show_logo(UI::TL_BOTTOMRIGHT)
19
- @ui.hide_cursor()
20
- end
21
-
22
- def update(delta)
23
- if @first_update
24
- event = Event::RequestControllable.new()
25
- @garden.send_event(event)
26
- @first_update = false
27
- end
28
-
29
- @camera_mover.update(delta)
30
-
31
- if @actor
32
- event = Event::SetForwardDirection.new(@actor.name, Vector3D.to_self(@camera_mover.camera.get_direction()))
33
- @garden.send_event(event)
34
- # @actor.set_forward_direction(event.dir)
35
- end
36
- end
37
-
38
- def receive_event(event, from)
39
- case event
40
- when Event::SyncSinbad
41
- unless (@garden.actors[event.actor_name])
42
- puts "new Sindbad: #{event.actor_name}"
43
- actor = Sinbad.load_event(@garden, event)
44
- @garden.actors[event.actor_name] = actor
45
- end
46
-
47
- when Event::ControllableObject
48
- @actor = @garden.actors[event.actor_name]
49
- puts event.actor_name
50
- puts @actor
51
-
52
- @camera_mover.set_style(CameraMover::CS_TPS)
53
- @camera_mover.set_target(@actor.object)
54
- when Event::SetForwardDirection
55
- if @garden.actors[event.actor_name]
56
- @garden.actors[event.actor_name].set_forward_direction(event.dir)
57
-
58
- # puts "Event::SetForwardDirection" if event.actor_name != @actor.name
59
- else
60
- puts "no actor_name"
61
- end
62
- when Event::EnableAction
63
- if event.forward
64
- @garden.actors[event.actor_name].move_forward(true)
65
- elsif event.backward
66
- @garden.actors[event.actor_name].move_backward(true)
67
- elsif event.left
68
- @garden.actors[event.actor_name].move_left(true)
69
- elsif event.right
70
- @garden.actors[event.actor_name].move_right(true)
71
- elsif event.jump
72
- @garden.actors[event.actor_name].jump(true)
73
- end
74
- when Event::DisableAction
75
- if event.forward
76
- @garden.actors[event.actor_name].move_forward(false)
77
- elsif event.backward
78
- @garden.actors[event.actor_name].move_backward(false)
79
- elsif event.left
80
- @garden.actors[event.actor_name].move_left(false)
81
- elsif event.right
82
- @garden.actors[event.actor_name].move_right(false)
83
- elsif event.jump
84
- @garden.actors[event.actor_name].jump(false)
85
- end
86
- end
87
- end
88
-
89
- #
90
- # Ui event handlers
91
- #
92
- def key_pressed(keyEvent)
93
- # puts "key_pressed"
94
-
95
- if (keyEvent.key == UI::KC_ESCAPE)
96
- @garden.quit()
97
- elsif (keyEvent.key == UI::KC_E)
98
- event = Event::EnableAction.new(@actor.name)
99
- event.forward = true
100
- @garden.send_event(event)
101
- # @actor.move_forward(true)
102
- elsif (keyEvent.key == UI::KC_D)
103
- event = Event::EnableAction.new(@actor.name)
104
- event.backward = true
105
- @garden.send_event(event)
106
- # @actor.move_backward(true)
107
- elsif (keyEvent.key == UI::KC_S)
108
- event = Event::EnableAction.new(@actor.name)
109
- event.left = true
110
- @garden.send_event(event)
111
- # @actor.move_left(true)
112
- elsif (keyEvent.key == UI::KC_F)
113
- event = Event::EnableAction.new(@actor.name)
114
- event.right = true
115
- @garden.send_event(event)
116
- # @actor.move_right(true)
117
- =begin
118
- elsif (keyEvent.key == UI::KC_R)
119
- @actor.press_gravity()
120
- elsif (keyEvent.key == UI::KC_V)
121
- @actor.stop_gravity()
122
- =end
123
- elsif (keyEvent.key == UI::KC_SPACE)
124
- event = Event::EnableAction.new(@actor.name)
125
- event.jump = true
126
- @garden.send_event(event)
127
- # @actor.jump(true)
128
- end
129
-
130
- return true
131
- end
132
-
133
- def key_released(keyEvent)
134
- if (keyEvent.key == UI::KC_E)
135
- event = Event::DisableAction.new(@actor.name)
136
- event.forward = true
137
- @garden.send_event(event)
138
- # @actor.move_forward(false)
139
- elsif (keyEvent.key == UI::KC_D)
140
- event = Event::DisableAction.new(@actor.name)
141
- event.backward = true
142
- @garden.send_event(event)
143
- # @actor.move_backward(false)
144
- elsif (keyEvent.key == UI::KC_S)
145
- event = Event::DisableAction.new(@actor.name)
146
- event.left = true
147
- @garden.send_event(event)
148
- # @actor.move_left(false)
149
- elsif (keyEvent.key == UI::KC_F)
150
- event = Event::DisableAction.new(@actor.name)
151
- event.right = true
152
- @garden.send_event(event)
153
- # @actor.move_right(false)
154
- elsif (keyEvent.key == UI::KC_SPACE)
155
- event = Event::DisableAction.new(@actor.name)
156
- event.jump = true
157
- @garden.send_event(event)
158
- # @actor.jump(false)
159
- end
160
- return true
161
- end
162
-
163
- def mouse_moved(evt)
164
- @camera_mover.mouse_moved(evt)
165
- return true
166
- end
167
-
168
- def mouse_pressed(mouseEvent, mouseButtonID)
169
- =begin
170
- if (mouseButtonID == UI::MB_Left)
171
- @actor.action_left()
172
- elsif (mouseButtonID == UI::MB_Right)
173
- @actor.action_right()
174
- end
175
- =end
176
- return true
177
- end
178
-
179
- def mouse_released(mouseEvent, mouseButtonID)
180
- return true
181
- end
182
- end
@@ -1,176 +0,0 @@
1
- require_relative "sinbad_state"
2
-
3
- class ClosestNotMe < Bullet::ClosestRayResultCallback
4
- def initialize(rb)
5
- super(Bullet::BtVector3.new(0.0, 0.0, 0.0), Bullet::BtVector3.new(0.0, 0.0, 0.0))
6
- @rigidBody = rb
7
- end
8
-
9
- def addSingleResult(rayResult, normalInWorldSpace)
10
- return 1.0 if (rayResult.m_collisionObject == @rigedBody)
11
- return super(rayResult, normalInWorldSpace)
12
- end
13
- end
14
-
15
- class Sinbad
16
- attr_accessor :garden
17
- attr_accessor :name
18
-
19
- attr_accessor :object
20
- attr_accessor :mover
21
- attr_accessor :sm_mover
22
- attr_accessor :grav_mover
23
- attr_accessor :state
24
-
25
- def initialize(garden, name)
26
- @garden = garden
27
-
28
- @name = name
29
- build_object()
30
-
31
- # moves this charactor smoothly.
32
- @sm_mover = SmoothMover.new(@object)
33
- @sm_mover.acceleration = 50
34
-
35
- @object.animation_info.create_operator("TopAnim", "IdeleTop", 1.0, true)
36
- @object.animation_info.create_operator("BaseAnim", "IdleBase", 1.0, true)
37
- @object.animation_info.create_operator("HandsAnim", "HandsRelaxed", 1.0, true)
38
-
39
- @mover = @sm_mover
40
- @state = SinbadState.new(self)
41
- end
42
-
43
- def finalize()
44
- @garden.objects.delete(@object.name)
45
- @object.finalize()
46
- end
47
-
48
- def dump_event()
49
- return Event::SyncSinbad.new(self)
50
- end
51
-
52
- def self.load_event(garden, event)
53
- actor = garden.actors[event.actor_name]
54
- if actor == nil
55
- actor = Sinbad.new(garden, event.actor_name)
56
- else
57
- actor = garden.actors[event.actor_name]
58
- end
59
-
60
- return actor
61
- end
62
-
63
- def build_object()
64
- # sinbad
65
- object_info = MeshBBObjectInfo.new("sinbad.mesh", Vector3D.new(1.0, 1.0, 1.0))
66
- object_info.scale = Vector3D.new(1.0 / 2.0, 1.0 / 2.0, 1.0 / 2.0)
67
- object_info.physics_offset = Vector3D.new(0, 1.0, 0)
68
- object_info.view_offset = Vector3D.new(0, 2.5, 0)
69
- object_info.view_rotation = Quaternion.new(Vector3D.new(0, 1, 0), Ogre::Degree.new(180.0).value_radians)
70
- physics_info = PhysicsInfo.new(1.0)
71
- physics_info.angular_factor = 0
72
- physics_info.restitution = 0.5
73
- physics_info.friction = 0.5
74
- physics_info.linear_damping = 0.5
75
- physics_info.angular_damping = 0
76
- @object = @garden.create_object(@name, object_info, physics_info)
77
- @object.set_position(Vector3D.new(0, 0, 0))
78
-
79
- =begin
80
- # swords
81
- object_info = MeshObjectInfo.new("Sword.mesh")
82
- object_info.scale = Vector3D.new(1.0 / 2.0, 1.0 / 2.0, 1.0 / 2.0)
83
- @sword1 = @garden.create_object("SinbadSword1", object_info, PhysicsInfo.new(1.0))
84
- @object.attach_object_to_bone("Sheath.L", @sword1)
85
-
86
- object_info = MeshObjectInfo.new("Sword.mesh")
87
- object_info.scale = Vector3D.new(1.0 / 2.0, 1.0 / 2.0, 1.0 / 2.0)
88
- @sword2 = @garden.create_object("SinbadSword2", object_info, PhysicsInfo.new(1.0))
89
- #@object.entity.attach_object_to_bone("Sheath.R", @sword2)
90
- =end
91
- end
92
-
93
- def update(delta)
94
- @state.update(delta)
95
- end
96
-
97
- def check_on_ground()
98
- rayCallback = ClosestNotMe.new(@object.physics_object.rigid_body)
99
- rayCallback.m_closestHitFraction = 1.0
100
- src = @object.get_position() + Vector3D.new(0, 0.1, 0)
101
- tgt = src + Vector3D.new(0, -0.2, 0)
102
-
103
- # puts "src(#{src.x}, #{src.y}, #{src.z})"
104
- # puts "tgt(#{tgt.x}, #{tgt.y}, #{tgt.z})"
105
-
106
- @garden.physics.dynamics_world.ray_test(src, tgt, rayCallback)
107
- return true if (rayCallback.has_hit())
108
- return false
109
- end
110
-
111
- def set_forward_direction(dir)
112
- @mover.set_forward_direction(dir)
113
- end
114
-
115
- def move_forward(bl)
116
- @mover.move_forward(bl)
117
- end
118
-
119
- def move_backward(bl)
120
- @mover.move_backward(bl)
121
- end
122
-
123
- def move_left(bl)
124
- @mover.move_left(bl)
125
- end
126
-
127
- def move_right(bl)
128
- @mover.move_right(bl)
129
- end
130
-
131
- def jump(bl)
132
- if bl
133
- if @state.state?("GravityFree")
134
- elsif @state.state?("JumpLoop")
135
- else
136
- @state.set_state("Jump")
137
- end
138
- end
139
- end
140
-
141
- def action_left()
142
- @object.detach_object_from_bone(@sword1)
143
- #@state.set_state("Kick")
144
- end
145
-
146
- def action_right
147
- @state.set_state("Attack")
148
- end
149
-
150
- def press_gravity
151
- @state.set_state("GravityFree")
152
- end
153
-
154
- def release_gravity
155
- end
156
-
157
- def stop_gravity
158
- @object.set_gravity(Vector3D.new(0, -9.8, 0))
159
- @state.set_state("InAir")
160
- end
161
-
162
- def play_top_animation(name, loop = true)
163
- @object.animation_info.operators["TopAnim"].name = name
164
- @object.animation_info.operators["TopAnim"].loop = loop
165
- end
166
-
167
- def play_base_animation(name, loop = true)
168
- @object.animation_info.operators["BaseAnim"].name = name
169
- @object.animation_info.operators["BaseAnim"].loop = loop
170
- end
171
-
172
- def play_hands_animation(name, loop = true)
173
- @object.animation_info.operators["HandsAnim"].name = name
174
- @object.animation_info.operators["HnadsAnim"].loop = loop
175
- end
176
- end
@@ -1,108 +0,0 @@
1
- require 'teien'
2
-
3
- require_relative '../helpers/user_event'
4
- require_relative '../helpers/sinbad/sinbad'
5
-
6
- include Teien
7
-
8
- class ActorModel < Teien::Model
9
- attr_accessor :info
10
- attr_accessor :quit
11
-
12
- def setup(garden)
13
- puts "model::setup"
14
- @remote_to_actors = Hash.new
15
- @sync_period = 0.5
16
- @sync_timer = 0
17
- @quit = false
18
-
19
- # environment
20
- @garden.set_gravity(Vector3D.new(0.0, -9.8, 0.0))
21
- @garden.set_ambient_light(Color.new(0.4, 0.4, 0.4))
22
- @garden.set_sky_dome(true, "Examples/CloudySky", 5, 8)
23
-
24
- # light
25
- object_info = LightObjectInfo.new(LightObjectInfo::DIRECTIONAL)
26
- object_info.diffuse_color = Color.new(1.0, 1.0, 1.0)
27
- object_info.specular_color = Color.new(0.25, 0.25, 0)
28
- object_info.direction = Vector3D.new( -1, -1, -1 )
29
- light = @garden.create_object("light", object_info, PhysicsInfo.new(0))
30
- light.set_position(Vector3D.new(0, 0, 0))
31
-
32
- # create a floor.
33
- object_info = FloorObjectInfo.new(50, 50, 0.5, 1, 1, 5, 5)
34
- object_info.material_name = "Examples/Rockwall"
35
- floor = @garden.create_object("Floor", object_info, PhysicsInfo.new(0))
36
- floor.set_position(Vector3D.new(0, 0, 0))
37
-
38
- end
39
-
40
- def update(delta)
41
- @sync_timer += delta
42
- if (@sync_timer > @sync_period)
43
- @garden.actors.each_value {|actor|
44
- event = actor.dump_event()
45
- @garden.send_event(event)
46
- }
47
- @sync_timer = 0
48
- end
49
- return !@quit
50
- end
51
-
52
- def receive_event(event, from)
53
- # puts event
54
- case event
55
- when Event::ClientUnbinded
56
- actor = @remote_to_actors[from]
57
- @remote_to_actors.delete(from)
58
- @garden.actors.delete(actor.name)
59
- actor.finalize()
60
- when Event::RequestControllable
61
- puts "Event::RequestControllable"
62
-
63
- remote_info = Network.connected_clients[from]
64
- actor = Sinbad.new(@garden, "Sinbad-#{remote_info.id}")
65
- @garden.actors[actor.name] = actor
66
- @remote_to_actors[from] = actor
67
- event = actor.dump_event()
68
- @garden.send_event(event)
69
-
70
- @sinbad = actor
71
- event = Event::ControllableObject.new(@sinbad.name, @sinbad.object.name)
72
- @garden.send_event(event, from)
73
-
74
- when Event::SetForwardDirection
75
- @remote_to_actors[from].set_forward_direction(event.dir)
76
- @garden.send_event(event)
77
- when Event::EnableAction
78
- if event.forward
79
- @remote_to_actors[from].move_forward(true)
80
- elsif event.backward
81
- @remote_to_actors[from].move_backward(true)
82
- elsif event.left
83
- @remote_to_actors[from].move_left(true)
84
- elsif event.right
85
- @remote_to_actors[from].move_right(true)
86
- elsif event.jump
87
- @remote_to_actors[from].jump(true)
88
- end
89
- @garden.send_event(event)
90
- when Event::DisableAction
91
- return if (from == nil)
92
-
93
- if event.forward
94
- @remote_to_actors[from].move_forward(false)
95
- elsif event.backward
96
- @remote_to_actors[from].move_backward(false)
97
- elsif event.left
98
- @remote_to_actors[from].move_left(false)
99
- elsif event.right
100
- @remote_to_actors[from].move_right(false)
101
- elsif event.jump
102
- @remote_to_actors[from].jump(false)
103
- end
104
- @garden.send_event(event)
105
- end
106
- end
107
- end
108
-
@@ -1,12 +0,0 @@
1
- require 'teien/event.rb'
2
-
3
- module Event
4
- class ShotBox
5
- attr_accessor :pos
6
- attr_accessor :dir
7
- def initialize(pos, dir)
8
- @pos = pos
9
- @dir = dir
10
- end
11
- end
12
- end
File without changes
File without changes
File without changes