teien 0.0.3 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +7 -5
- data/bin/teien +36 -37
- data/lib/teien/{smooth_mover.rb → action_model/smooth_moving.rb} +19 -3
- data/lib/teien/actor/actor.rb +21 -0
- data/{sample/actor/app/helpers/user_event.rb → lib/teien/actor/actor_event.rb} +41 -32
- data/lib/teien/actor/actor_factory.rb +20 -0
- data/lib/teien/actor/actor_info.rb +7 -0
- data/lib/teien/actor/actor_manager.rb +31 -0
- data/lib/teien/actor/actor_manager_proxy.rb +72 -0
- data/lib/teien/addon/addon.rb +25 -0
- data/lib/teien/{animation.rb → animation/animation.rb} +1 -0
- data/lib/teien/animation/animation_event.rb +17 -0
- data/lib/teien/animation/animation_manager.rb +23 -0
- data/lib/teien/animation/animation_manager_proxy.rb +27 -0
- data/lib/teien/application/application.rb +43 -0
- data/lib/teien/base_object/attachment_info.rb +15 -0
- data/lib/teien/{garden_object.rb → base_object/base_object.rb} +43 -52
- data/lib/teien/{event.rb → base_object/base_object_event.rb} +9 -12
- data/lib/teien/base_object/base_object_manager.rb +57 -0
- data/lib/teien/{garden_base.rb → base_object/base_object_manager_base.rb} +22 -31
- data/lib/teien/{proxy_garden.rb → base_object/base_object_manager_proxy.rb} +20 -62
- data/lib/teien/base_object/object_info.rb +21 -0
- data/lib/teien/{physics.rb → base_object/physics.rb} +4 -5
- data/lib/teien/{physics_info.rb → base_object/physics_info.rb} +1 -0
- data/lib/teien/base_object/physics_object_factory.rb +23 -0
- data/lib/teien/base_object/std_objects/box_object_info.rb +42 -0
- data/lib/teien/base_object/std_objects/capsule_object_info.rb +44 -0
- data/lib/teien/base_object/std_objects/cone_object_info.rb +41 -0
- data/lib/teien/base_object/std_objects/cylinder_object_info.rb +44 -0
- data/lib/teien/base_object/std_objects/floor_object_info.rb +45 -0
- data/lib/teien/base_object/std_objects/light_object_info.rb +40 -0
- data/lib/teien/base_object/std_objects/mesh_bb_object_info.rb +42 -0
- data/lib/teien/base_object/std_objects/mesh_object_info.rb +62 -0
- data/lib/teien/base_object/std_objects/sphere_object_info.rb +38 -0
- data/lib/teien/commands/browser_command.rb +46 -0
- data/lib/teien/commands/local_command.rb +21 -0
- data/lib/teien/commands/server_command.rb +39 -0
- data/lib/teien/commands/std_command.rb +71 -0
- data/lib/teien/core/client_network.rb +26 -0
- data/lib/teien/core/component_manager.rb +11 -0
- data/lib/teien/core/core_event.rb +7 -0
- data/lib/teien/core/dispatcher.rb +30 -0
- data/lib/teien/core/event_router.rb +116 -0
- data/lib/teien/core/launcher.rb +31 -0
- data/lib/teien/core/network.rb +28 -0
- data/lib/teien/{remote_info.rb → core/remote_info.rb} +6 -1
- data/lib/teien/core/server_network.rb +23 -0
- data/lib/teien/{tools.rb → core/tools.rb} +2 -2
- data/lib/teien/{camera.rb → ui/camera.rb} +1 -1
- data/lib/teien/{camera_mover.rb → ui/camera_mover.rb} +1 -2
- data/lib/teien/ui/std_objects/box_object_info.rb +29 -0
- data/lib/teien/ui/std_objects/capsule_object_info.rb +28 -0
- data/lib/teien/ui/std_objects/cone_object_info.rb +25 -0
- data/lib/teien/ui/std_objects/cylinder_object_info.rb +26 -0
- data/lib/teien/ui/std_objects/floor_object_info.rb +34 -0
- data/lib/teien/ui/std_objects/light_object_info.rb +23 -0
- data/lib/teien/ui/std_objects/mesh_bb_object_info.rb +24 -0
- data/lib/teien/ui/std_objects/mesh_object_info.rb +24 -0
- data/lib/teien/ui/std_objects/sphere_object_info.rb +26 -0
- data/lib/teien/{user_interface.rb → ui/user_interface.rb} +18 -13
- data/lib/teien/{view.rb → ui/view.rb} +42 -20
- data/lib/teien/ui/view_object.rb +142 -0
- data/lib/teien/ui/view_object_factory.rb +23 -0
- data/lib/teien/version.rb +1 -1
- data/lib/teien.rb +3 -78
- data/mods/actor/addons/sinbad/lib/sinbad/sinbad_info.rb +16 -0
- data/{sample/actor/app/helpers → mods/actor/addons/sinbad/lib}/sinbad/sinbad_state.rb +14 -39
- data/mods/actor/addons/sinbad/lib/sinbad.rb +180 -0
- data/mods/actor/apps/browser/browser_application.rb +185 -0
- data/mods/actor/apps/common/browser_event.rb +68 -0
- data/mods/actor/apps/server/server_application.rb +101 -0
- data/{sample/actor/app/ais → mods/actor/commands/ai}/actor_ai.rb +8 -3
- data/mods/actor/commands/ai_command.rb +20 -0
- data/{sample/actor/config → mods/actor/configs}/plugins.cfg +4 -4
- data/{sample/hello_garden/app/controllers/hello_garden_controller.rb → mods/hello_garden/apps/browser/browser_application.rb} +48 -25
- data/mods/hello_garden/apps/common/browser_event.rb +58 -0
- data/{sample/hello_garden/app/models/hello_garden_model.rb → mods/hello_garden/apps/server/server_application.rb} +35 -26
- data/teien.gemspec +3 -1
- metadata +114 -55
- data/lib/teien/ai.rb +0 -27
- data/lib/teien/controller.rb +0 -30
- data/lib/teien/dispatcher.rb +0 -22
- data/lib/teien/event_router.rb +0 -118
- data/lib/teien/garden.rb +0 -91
- data/lib/teien/model.rb +0 -34
- data/lib/teien/network.rb +0 -108
- data/lib/teien/object_info.rb +0 -192
- data/lib/teien/physics_object_factory.rb +0 -170
- data/lib/teien/synchronizer.rb +0 -26
- data/lib/teien/view_object.rb +0 -67
- data/lib/teien/view_object_factory.rb +0 -210
- data/sample/actor/app/controllers/actor_controller.rb +0 -182
- data/sample/actor/app/helpers/sinbad/sinbad.rb +0 -176
- data/sample/actor/app/models/actor_model.rb +0 -108
- data/sample/hello_garden/app/helpers/user_event.rb +0 -12
- /data/lib/teien/{animation_operator.rb → animation/animation_operator.rb} +0 -0
- /data/lib/teien/{physics_object.rb → base_object/physics_object.rb} +0 -0
- /data/lib/teien/{sky_dome.rb → base_object/sky_dome.rb} +0 -0
- /data/lib/teien/{ui_listener.rb → ui/ui_listener.rb} +0 -0
- /data/{sample/actor/config → mods/actor/configs}/resources.cfg +0 -0
- /data/{sample/hello_garden/config → mods/hello_garden/configs}/plugins.cfg +0 -0
- /data/{sample/hello_garden/config → mods/hello_garden/configs}/resources.cfg +0 -0
- /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
|
-
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|