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
@@ -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 '../helpers/user_event'
3
- require_relative '../helpers/sinbad/sinbad'
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 < Teien::Ai
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 '../helpers/user_event'
1
+ require_relative "../common/browser_event"
2
2
 
3
3
  include Teien
4
4
 
5
- class HelloGardenController < Teien::Controller
6
- # handlers of Garden
7
- def setup(garden)
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
- # set config files.
13
- fileDir = File.dirname(File.expand_path(__FILE__))
14
- @garden.plugins_cfg = "#{fileDir}/plugins.cfg"
15
- @garden.resources_cfg = "#{fileDir}/resources.cfg"
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
- # handlers of UserInterface
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
- @garden.quit()
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
- event = Event::ShotBox.new(@ui.get_camera().get_position(),
80
- @ui.get_camera().get_direction())
81
- @garden.send_event(event)
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
+