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
@@ -0,0 +1,185 @@
|
|
1
|
+
require_relative "../common/browser_event"
|
2
|
+
|
3
|
+
include Teien
|
4
|
+
|
5
|
+
class BrowserApplication < Teien::Application
|
6
|
+
def initialize()
|
7
|
+
super
|
8
|
+
|
9
|
+
@ui = Teien::get_component("user_interface")
|
10
|
+
@ui.register_receiver(self)
|
11
|
+
@camera_mover = nil
|
12
|
+
end
|
13
|
+
|
14
|
+
##
|
15
|
+
# handlers of EventRouter.
|
16
|
+
#
|
17
|
+
|
18
|
+
def setup()
|
19
|
+
puts "browser setup"
|
20
|
+
@controllable_actor_name = nil
|
21
|
+
|
22
|
+
@camera_mover = @ui.get_camera().get_mover()
|
23
|
+
|
24
|
+
# REVISIT: There is a bug which set_position must set same parameters(x, y, z).
|
25
|
+
@camera_mover.set_position(Vector3D.new(50, 50, 50))
|
26
|
+
@camera_mover.look_at(Vector3D.new(0, 0, 0))
|
27
|
+
|
28
|
+
@ui.show_frame_stats(UI::TL_BOTTOMLEFT)
|
29
|
+
@ui.show_logo(UI::TL_BOTTOMRIGHT)
|
30
|
+
@ui.hide_cursor()
|
31
|
+
end
|
32
|
+
|
33
|
+
def connection_completed(from)
|
34
|
+
event = Teien::Event::Browser::ReadyToGo.new
|
35
|
+
@event_router.send_event(event, from)
|
36
|
+
end
|
37
|
+
|
38
|
+
def update(delta)
|
39
|
+
@camera_mover.update(delta)
|
40
|
+
|
41
|
+
if @controllable_actor_name
|
42
|
+
camera_dir = Vector3D.to_self(@camera_mover.camera.get_direction())
|
43
|
+
event = Teien::Event::Actor::RequestSetForwardDirection.new(@controllable_actor_name, camera_dir)
|
44
|
+
@event_router.send_event(event)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def receive_event(event, from)
|
49
|
+
case event
|
50
|
+
when Teien::Event::Browser::ControllableActor
|
51
|
+
@controllable_actor_name = event.actor_name
|
52
|
+
|
53
|
+
actor = Teien::get_component("actor_manager").actors[@controllable_actor_name]
|
54
|
+
@camera_mover.set_style(CameraMover::CS_TPS)
|
55
|
+
@camera_mover.set_target(actor.object)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
##
|
60
|
+
# handlers of UserInterface.
|
61
|
+
#
|
62
|
+
|
63
|
+
def key_pressed(keyEvent)
|
64
|
+
if (keyEvent.key == UI::KC_E)
|
65
|
+
@camera_mover.move_forward(true)
|
66
|
+
if @controllable_actor_name
|
67
|
+
event = Teien::Event::Actor::RequestEnableAction.new(@controllable_actor_name)
|
68
|
+
event.forward = true
|
69
|
+
@event_router.send_event(event)
|
70
|
+
end
|
71
|
+
elsif (keyEvent.key == UI::KC_D)
|
72
|
+
@camera_mover.move_backward(true)
|
73
|
+
if @controllable_actor_name
|
74
|
+
event = Teien::Event::Actor::RequestEnableAction.new(@controllable_actor_name)
|
75
|
+
event.backward = true
|
76
|
+
@event_router.send_event(event)
|
77
|
+
end
|
78
|
+
elsif (keyEvent.key == UI::KC_S)
|
79
|
+
@camera_mover.move_left(true)
|
80
|
+
if @controllable_actor_name
|
81
|
+
event = Teien::Event::Actor::RequestEnableAction.new(@controllable_actor_name)
|
82
|
+
event.left = true
|
83
|
+
@event_router.send_event(event)
|
84
|
+
end
|
85
|
+
elsif (keyEvent.key == UI::KC_F)
|
86
|
+
@camera_mover.move_right(true)
|
87
|
+
if @controllable_actor_name
|
88
|
+
event = Teien::Event::Actor::RequestEnableAction.new(@controllable_actor_name)
|
89
|
+
event.right = true
|
90
|
+
@event_router.send_event(event)
|
91
|
+
end
|
92
|
+
elsif (keyEvent.key == UI::KC_SPACE)
|
93
|
+
if @controllable_actor_name
|
94
|
+
event = Teien::Event::Actor::RequestEnableAction.new(@controllable_actor_name)
|
95
|
+
event.jump = true
|
96
|
+
@event_router.send_event(event)
|
97
|
+
end
|
98
|
+
elsif (keyEvent.key == UI::KC_G)
|
99
|
+
if @ui.debug_draw
|
100
|
+
@ui.set_debug_draw(false)
|
101
|
+
else
|
102
|
+
@ui.set_debug_draw(true)
|
103
|
+
end
|
104
|
+
elsif (keyEvent.key == UI::KC_ESCAPE)
|
105
|
+
@event_router.quit = true
|
106
|
+
end
|
107
|
+
|
108
|
+
event = Event::Browser::KeyPressed.new(keyEvent.key)
|
109
|
+
@event_router.send_event(event)
|
110
|
+
|
111
|
+
return true
|
112
|
+
end
|
113
|
+
|
114
|
+
def key_released(keyEvent)
|
115
|
+
if (keyEvent.key == UI::KC_ESCAPE)
|
116
|
+
@quit =true
|
117
|
+
elsif (keyEvent.key == UI::KC_E)
|
118
|
+
@camera_mover.move_forward(false)
|
119
|
+
|
120
|
+
if @controllable_actor_name
|
121
|
+
event = Teien::Event::Actor::RequestDisableAction.new(@controllable_actor_name)
|
122
|
+
event.forward = true
|
123
|
+
@event_router.send_event(event)
|
124
|
+
end
|
125
|
+
elsif (keyEvent.key == UI::KC_D)
|
126
|
+
@camera_mover.move_backward(false)
|
127
|
+
|
128
|
+
if @controllable_actor_name
|
129
|
+
event = Teien::Event::Actor::RequestDisableAction.new(@controllable_actor_name)
|
130
|
+
event.backward = true
|
131
|
+
@event_router.send_event(event)
|
132
|
+
end
|
133
|
+
elsif (keyEvent.key == UI::KC_S)
|
134
|
+
@camera_mover.move_left(false)
|
135
|
+
|
136
|
+
if @controllable_actor_name
|
137
|
+
event = Teien::Event::Actor::RequestDisableAction.new(@controllable_actor_name)
|
138
|
+
event.left = true
|
139
|
+
@event_router.send_event(event)
|
140
|
+
end
|
141
|
+
elsif (keyEvent.key == UI::KC_F)
|
142
|
+
@camera_mover.move_right(false)
|
143
|
+
if @controllable_actor_name
|
144
|
+
event = Teien::Event::Actor::RequestDisableAction.new(@controllable_actor_name)
|
145
|
+
event.right = true
|
146
|
+
@event_router.send_event(event)
|
147
|
+
end
|
148
|
+
elsif (keyEvent.key == UI::KC_SPACE)
|
149
|
+
if @controllable_actor_name
|
150
|
+
event = Teien::Event::Actor::RequestDisableAction.new(@controllable_actor_name)
|
151
|
+
event.jump = true
|
152
|
+
@event_router.send_event(event)
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
event = Event::Browser::KeyReleased.new(keyEvent.key)
|
157
|
+
@event_router.send_event(event)
|
158
|
+
|
159
|
+
return true
|
160
|
+
end
|
161
|
+
|
162
|
+
def mouse_moved(mouseEvent)
|
163
|
+
@camera_mover.mouse_moved(mouseEvent)
|
164
|
+
return true
|
165
|
+
end
|
166
|
+
|
167
|
+
def mouse_pressed(mouseEvent, mouseButtonID)
|
168
|
+
@camera_mover.mouse_pressed(mouseEvent, mouseButtonID)
|
169
|
+
|
170
|
+
event = Event::Browser::MousePressed.new(mouseEvent, mouseButtonID, @ui.get_camera())
|
171
|
+
@event_router.send_event(event)
|
172
|
+
|
173
|
+
return true
|
174
|
+
end
|
175
|
+
|
176
|
+
def mouse_released(mouseEvent, mouseButtonID)
|
177
|
+
@camera_mover.mouse_released(mouseEvent, mouseButtonID)
|
178
|
+
|
179
|
+
event = Event::Browser::MouseReleased.new(mouseEvent, mouseButtonID, @ui.get_camera())
|
180
|
+
@event_router.send_event(event)
|
181
|
+
|
182
|
+
return true
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module Teien::Event::Browser
|
2
|
+
class KeyPressed
|
3
|
+
attr_accessor :key
|
4
|
+
|
5
|
+
def initialize(key)
|
6
|
+
@key = key
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
class KeyReleased
|
11
|
+
attr_accessor :key
|
12
|
+
|
13
|
+
def initialize(key)
|
14
|
+
@key = key
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
module MouseAction
|
19
|
+
attr_reader :button_id
|
20
|
+
attr_reader :width
|
21
|
+
attr_reader :height
|
22
|
+
attr_reader :x_abs
|
23
|
+
attr_reader :y_abs
|
24
|
+
attr_reader :z_abs
|
25
|
+
attr_reader :x_rel
|
26
|
+
attr_reader :y_rel
|
27
|
+
attr_reader :z_rel
|
28
|
+
attr_reader :camera_pos
|
29
|
+
attr_reader :camera_dir
|
30
|
+
|
31
|
+
def initialize(mouse_event, mouse_button_id, camera)
|
32
|
+
@button_id = mouse_button_id
|
33
|
+
@width = mouse_event.state.width
|
34
|
+
@height = mouse_event.state.height
|
35
|
+
@x_abs = mouse_event.state.X.abs
|
36
|
+
@y_abs = mouse_event.state.Y.abs
|
37
|
+
@z_abs = mouse_event.state.Z.abs
|
38
|
+
@x_rel = mouse_event.state.X.rel
|
39
|
+
@y_rel = mouse_event.state.Y.rel
|
40
|
+
@z_rel = mouse_event.state.Z.rel
|
41
|
+
@camera_pos = camera.get_position()
|
42
|
+
@camera_dir = camera.get_direction()
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
class MousePressed
|
47
|
+
include MouseAction
|
48
|
+
end
|
49
|
+
|
50
|
+
class MouseReleased
|
51
|
+
include MouseAction
|
52
|
+
end
|
53
|
+
|
54
|
+
class ReadyToGo
|
55
|
+
end
|
56
|
+
|
57
|
+
class ControllableActor
|
58
|
+
attr_accessor :actor_name
|
59
|
+
|
60
|
+
def initialize(actor_name)
|
61
|
+
@actor_name = actor_name
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require_relative "../common/browser_event"
|
2
|
+
|
3
|
+
include Teien
|
4
|
+
|
5
|
+
class ServerApplication < Teien::Application
|
6
|
+
attr_accessor :remote_to_controllables
|
7
|
+
|
8
|
+
##
|
9
|
+
# handlers of EventRouter
|
10
|
+
#
|
11
|
+
|
12
|
+
def setup()
|
13
|
+
@remote_to_controllables = Hash.new
|
14
|
+
|
15
|
+
@sync_period = 0.5
|
16
|
+
@sync_timer = 0
|
17
|
+
|
18
|
+
# environment
|
19
|
+
@base_object_manager.set_gravity(Vector3D.new(0.0, -9.8, 0.0))
|
20
|
+
@base_object_manager.set_ambient_light(Color.new(0.4, 0.4, 0.4))
|
21
|
+
@base_object_manager.set_sky_dome(true, "Examples/CloudySky", 5, 8)
|
22
|
+
|
23
|
+
@actor_manager = Teien::get_component("actor_manager")
|
24
|
+
|
25
|
+
# light
|
26
|
+
object_info = LightObjectInfo.new(LightObjectInfo::DIRECTIONAL)
|
27
|
+
object_info.diffuse_color = Color.new(1.0, 1.0, 1.0)
|
28
|
+
object_info.specular_color = Color.new(0.25, 0.25, 0)
|
29
|
+
object_info.direction = Vector3D.new( -1, -1, -1 )
|
30
|
+
light = @base_object_manager.create_object("light", object_info, PhysicsInfo.new(0))
|
31
|
+
light.set_position(Vector3D.new(0, 0, 0))
|
32
|
+
|
33
|
+
# create a floor.
|
34
|
+
object_info = FloorObjectInfo.new(50, 50, 0.5, 1, 1, 5, 5)
|
35
|
+
object_info.material_name = "Examples/Rockwall"
|
36
|
+
floor = @base_object_manager.create_object("Floor", object_info, PhysicsInfo.new(0))
|
37
|
+
floor.set_position(Vector3D.new(0, 0, 0))
|
38
|
+
end
|
39
|
+
|
40
|
+
def connection_unbinded(from)
|
41
|
+
actor = @remote_to_controllables[from]
|
42
|
+
if actor
|
43
|
+
@remote_to_controllables.delete(from)
|
44
|
+
@actor_manager.actors.delete(actor.name)
|
45
|
+
actor.finalize()
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def receive_event(event, from)
|
50
|
+
case event
|
51
|
+
when Teien::Event::Browser::ReadyToGo
|
52
|
+
puts "ReadyToGo"
|
53
|
+
|
54
|
+
remote_info = Network.connections[from]
|
55
|
+
|
56
|
+
actor_info = SinbadInfo.new("Sinbad-#{remote_info.id}")
|
57
|
+
@sinbad = @actor_manager.create_actor(actor_info)
|
58
|
+
@remote_to_controllables[from] = @sinbad
|
59
|
+
|
60
|
+
actor_info.object_name = @sinbad.object.name
|
61
|
+
event = Teien::Event::Actor::SyncActor.new(actor_info)
|
62
|
+
@event_router.send_event(event)
|
63
|
+
|
64
|
+
event = Teien::Event::Browser::ControllableActor.new(@sinbad.name)
|
65
|
+
@event_router.send_event(event, from)
|
66
|
+
|
67
|
+
when Teien::Event::Actor::RequestSetForwardDirection
|
68
|
+
@remote_to_controllables[from].set_forward_direction(event.dir)
|
69
|
+
@event_router.send_event(Teien::Event::Actor::SetForwardDirection.new.copy(event))
|
70
|
+
|
71
|
+
when Teien::Event::Actor::RequestEnableAction
|
72
|
+
if event.forward
|
73
|
+
@remote_to_controllables[from].move_forward(true)
|
74
|
+
elsif event.backward
|
75
|
+
@remote_to_controllables[from].move_backward(true)
|
76
|
+
elsif event.left
|
77
|
+
@remote_to_controllables[from].move_left(true)
|
78
|
+
elsif event.right
|
79
|
+
@remote_to_controllables[from].move_right(true)
|
80
|
+
elsif event.jump
|
81
|
+
@remote_to_controllables[from].jump(true)
|
82
|
+
end
|
83
|
+
@event_router.send_event(Teien::Event::Actor::EnableAction.new(event.actor_name).copy(event))
|
84
|
+
|
85
|
+
when Teien::Event::Actor::RequestDisableAction
|
86
|
+
if event.forward
|
87
|
+
@remote_to_controllables[from].move_forward(false)
|
88
|
+
elsif event.backward
|
89
|
+
@remote_to_controllables[from].move_backward(false)
|
90
|
+
elsif event.left
|
91
|
+
@remote_to_controllables[from].move_left(false)
|
92
|
+
elsif event.right
|
93
|
+
@remote_to_controllables[from].move_right(false)
|
94
|
+
elsif event.jump
|
95
|
+
@remote_to_controllables[from].jump(false)
|
96
|
+
end
|
97
|
+
@event_router.send_event(Teien::Event::Actor::DisableAction.new(event.actor_name).copy(event))
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
@@ -1,10 +1,15 @@
|
|
1
1
|
require 'teien'
|
2
|
-
require_relative '
|
3
|
-
require_relative '
|
2
|
+
require_relative '../../app/helpers/user_event'
|
3
|
+
require_relative '../../app/helpers/sinbad/sinbad'
|
4
4
|
|
5
5
|
include Teien
|
6
6
|
|
7
|
-
class ActorAi
|
7
|
+
class ActorAi
|
8
|
+
def initialize(garden)
|
9
|
+
@garden = garden
|
10
|
+
@garden.register_receiver(self)
|
11
|
+
end
|
12
|
+
|
8
13
|
def setup(garden)
|
9
14
|
@quit = false
|
10
15
|
@actor = nil
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Teien
|
2
|
+
class AiCommand
|
3
|
+
def self.ai_command(argv)
|
4
|
+
=begin
|
5
|
+
require "teien/proxy_garden.rb"
|
6
|
+
require_relative "ai/actor_ai.rb"
|
7
|
+
|
8
|
+
ip = ARGV[1] ? ARGV[1] : "0.0.0.0"
|
9
|
+
port = ARGV[2] ? ARGV[2].to_i : 11922
|
10
|
+
|
11
|
+
garden = Teien::ProxyGarden.new()
|
12
|
+
ai = ActorAi.new(garden)
|
13
|
+
|
14
|
+
garden.run(ip, port)
|
15
|
+
=end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
Teien::Launcher::register_command("ai", AiCommand.method(:ai_command))
|
20
|
+
end
|
@@ -12,8 +12,8 @@ PluginFolder=<SystemPluginFolder>
|
|
12
12
|
Plugin=RenderSystem_GL
|
13
13
|
# Plugin=RenderSystem_GLES
|
14
14
|
Plugin=Plugin_ParticleFX
|
15
|
-
Plugin=Plugin_BSPSceneManager
|
15
|
+
# Plugin=Plugin_BSPSceneManager
|
16
16
|
Plugin=Plugin_CgProgramManager
|
17
|
-
Plugin=Plugin_PCZSceneManager
|
18
|
-
Plugin=Plugin_OctreeZone
|
19
|
-
Plugin=Plugin_OctreeSceneManager
|
17
|
+
# Plugin=Plugin_PCZSceneManager
|
18
|
+
# Plugin=Plugin_OctreeZone
|
19
|
+
# Plugin=Plugin_OctreeSceneManager
|
@@ -1,24 +1,27 @@
|
|
1
|
-
require_relative
|
1
|
+
require_relative "../common/browser_event"
|
2
2
|
|
3
3
|
include Teien
|
4
4
|
|
5
|
-
class
|
6
|
-
|
7
|
-
|
8
|
-
puts "controller setup"
|
9
|
-
@quit = false
|
10
|
-
@ui.set_window_title("SimpleGarden")
|
5
|
+
class BrowserApplication < Teien::Application
|
6
|
+
def initialize()
|
7
|
+
super
|
11
8
|
|
12
|
-
|
13
|
-
|
14
|
-
@
|
15
|
-
|
9
|
+
@ui = Teien::get_component("user_interface")
|
10
|
+
@ui.register_receiver(self)
|
11
|
+
@camera_mover = nil
|
12
|
+
end
|
13
|
+
|
14
|
+
##
|
15
|
+
# handlers of EventRouter.
|
16
|
+
#
|
17
|
+
|
18
|
+
def setup()
|
19
|
+
puts "browser setup"
|
20
|
+
@controllable_actor_name = nil
|
16
21
|
|
17
22
|
@camera_mover = @ui.get_camera().get_mover()
|
18
|
-
# @camera_mover.set_style(CameraMover::CS_TPS)
|
19
|
-
# @camera_mover.set_target(floor)
|
20
|
-
# @camera_mover.set_yaw_pitch_dist(Radian.new(Degree.new(0)), Radian.new(Degree.new(45)), 30.0)
|
21
23
|
|
24
|
+
# REVISIT: There is a bug which set_position must set same parameters(x, y, z).
|
22
25
|
@camera_mover.set_position(Vector3D.new(50, 50, 50))
|
23
26
|
@camera_mover.look_at(Vector3D.new(0, 0, 0))
|
24
27
|
|
@@ -27,19 +30,26 @@ class HelloGardenController < Teien::Controller
|
|
27
30
|
@ui.hide_cursor()
|
28
31
|
end
|
29
32
|
|
33
|
+
def connection_completed(from)
|
34
|
+
event = Teien::Event::Browser::ReadyToGo.new
|
35
|
+
@event_router.send_event(event, from)
|
36
|
+
end
|
37
|
+
|
30
38
|
def update(delta)
|
31
39
|
@camera_mover.update(delta)
|
32
|
-
return !@quit
|
33
40
|
end
|
34
41
|
|
35
|
-
|
42
|
+
##
|
43
|
+
# handlers of UserInterface.
|
44
|
+
#
|
45
|
+
|
36
46
|
def key_pressed(keyEvent)
|
37
47
|
if (keyEvent.key == UI::KC_E)
|
38
48
|
@camera_mover.move_forward(true)
|
39
49
|
elsif (keyEvent.key == UI::KC_D)
|
40
50
|
@camera_mover.move_backward(true)
|
41
51
|
elsif (keyEvent.key == UI::KC_S)
|
42
|
-
@camera_mover.move_left(true)
|
52
|
+
@camera_mover.move_left(true)
|
43
53
|
elsif (keyEvent.key == UI::KC_F)
|
44
54
|
@camera_mover.move_right(true)
|
45
55
|
elsif (keyEvent.key == UI::KC_G)
|
@@ -49,8 +59,12 @@ class HelloGardenController < Teien::Controller
|
|
49
59
|
@ui.set_debug_draw(true)
|
50
60
|
end
|
51
61
|
elsif (keyEvent.key == UI::KC_ESCAPE)
|
52
|
-
@
|
62
|
+
@event_router.quit = true
|
53
63
|
end
|
64
|
+
|
65
|
+
event = Event::Browser::KeyPressed.new(keyEvent.key)
|
66
|
+
@event_router.send_event(event)
|
67
|
+
|
54
68
|
return true
|
55
69
|
end
|
56
70
|
|
@@ -62,10 +76,14 @@ class HelloGardenController < Teien::Controller
|
|
62
76
|
elsif (keyEvent.key == UI::KC_D)
|
63
77
|
@camera_mover.move_backward(false)
|
64
78
|
elsif (keyEvent.key == UI::KC_S)
|
65
|
-
@camera_mover.move_left(false)
|
79
|
+
@camera_mover.move_left(false)
|
66
80
|
elsif (keyEvent.key == UI::KC_F)
|
67
|
-
@camera_mover.move_right(false)
|
81
|
+
@camera_mover.move_right(false)
|
68
82
|
end
|
83
|
+
|
84
|
+
event = Event::Browser::KeyReleased.new(keyEvent.key)
|
85
|
+
@event_router.send_event(event)
|
86
|
+
|
69
87
|
return true
|
70
88
|
end
|
71
89
|
|
@@ -75,15 +93,20 @@ class HelloGardenController < Teien::Controller
|
|
75
93
|
end
|
76
94
|
|
77
95
|
def mouse_pressed(mouseEvent, mouseButtonID)
|
78
|
-
@camera_mover.mouse_pressed(mouseEvent, mouseButtonID)
|
79
|
-
|
80
|
-
|
81
|
-
@
|
96
|
+
@camera_mover.mouse_pressed(mouseEvent, mouseButtonID)
|
97
|
+
|
98
|
+
event = Event::Browser::MousePressed.new(mouseEvent, mouseButtonID, @ui.get_camera())
|
99
|
+
@event_router.send_event(event)
|
100
|
+
|
82
101
|
return true
|
83
102
|
end
|
84
103
|
|
85
104
|
def mouse_released(mouseEvent, mouseButtonID)
|
86
|
-
@camera_mover.mouse_released(mouseEvent, mouseButtonID)
|
105
|
+
@camera_mover.mouse_released(mouseEvent, mouseButtonID)
|
106
|
+
|
107
|
+
event = Event::Browser::MouseReleased.new(mouseEvent, mouseButtonID, @ui.get_camera())
|
108
|
+
@event_router.send_event(event)
|
109
|
+
|
87
110
|
return true
|
88
111
|
end
|
89
112
|
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Teien::Event::Browser
|
2
|
+
class KeyPressed
|
3
|
+
attr_accessor :key
|
4
|
+
|
5
|
+
def initialize(key)
|
6
|
+
@key = key
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
class KeyReleased
|
11
|
+
attr_accessor :key
|
12
|
+
|
13
|
+
def initialize(key)
|
14
|
+
@key = key
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
module MouseAction
|
19
|
+
attr_reader :button_id
|
20
|
+
attr_reader :width
|
21
|
+
attr_reader :height
|
22
|
+
attr_reader :x_abs
|
23
|
+
attr_reader :y_abs
|
24
|
+
attr_reader :z_abs
|
25
|
+
attr_reader :x_rel
|
26
|
+
attr_reader :y_rel
|
27
|
+
attr_reader :z_rel
|
28
|
+
attr_reader :camera_pos
|
29
|
+
attr_reader :camera_dir
|
30
|
+
|
31
|
+
def initialize(mouse_event, mouse_button_id, camera)
|
32
|
+
@button_id = mouse_button_id
|
33
|
+
@width = mouse_event.state.width
|
34
|
+
@height = mouse_event.state.height
|
35
|
+
@x_abs = mouse_event.state.X.abs
|
36
|
+
@y_abs = mouse_event.state.Y.abs
|
37
|
+
@z_abs = mouse_event.state.Z.abs
|
38
|
+
@x_rel = mouse_event.state.X.rel
|
39
|
+
@y_rel = mouse_event.state.Y.rel
|
40
|
+
@z_rel = mouse_event.state.Z.rel
|
41
|
+
@camera_pos = camera.get_position()
|
42
|
+
@camera_dir = camera.get_direction()
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
class MousePressed
|
47
|
+
include MouseAction
|
48
|
+
end
|
49
|
+
|
50
|
+
class MouseReleased
|
51
|
+
include MouseAction
|
52
|
+
end
|
53
|
+
|
54
|
+
class ReadyToGo
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
|