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