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
@@ -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