teien 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. data/README.md +4 -4
  2. data/bin/teien +5 -1
  3. data/lib/teien/animation/animation_manager.rb +2 -2
  4. data/lib/teien/animation/animation_manager_proxy.rb +2 -2
  5. data/lib/teien/application/local_application.rb +12 -0
  6. data/lib/teien/application/proxy_application.rb +28 -0
  7. data/lib/teien/application/server_application.rb +28 -0
  8. data/lib/teien/base_object/base_object_manager.rb +2 -4
  9. data/lib/teien/base_object/base_object_manager_base.rb +3 -3
  10. data/lib/teien/base_object/base_object_manager_proxy.rb +2 -4
  11. data/lib/teien/base_object/physics.rb +8 -9
  12. data/lib/teien/core/component_manager.rb +3 -1
  13. data/lib/teien/core/event_router.rb +33 -7
  14. data/lib/teien/core/network.rb +4 -0
  15. data/lib/teien/ui/user_interface.rb +3 -5
  16. data/lib/teien/ui/view.rb +7 -4
  17. data/lib/teien/version.rb +1 -1
  18. data/samples/actor/client +2 -0
  19. data/{mods/actor/configs → samples/actor/config}/plugins.cfg +0 -0
  20. data/{mods/actor/configs → samples/actor/config}/resources.cfg +0 -0
  21. data/samples/actor/lib/client.rb +38 -0
  22. data/{mods/actor/apps/common/browser_event.rb → samples/actor/lib/event.rb} +3 -2
  23. data/samples/actor/lib/local.rb +63 -0
  24. data/{mods/actor/apps/server/server_application.rb → samples/actor/lib/model.rb} +15 -16
  25. data/samples/actor/lib/server.rb +37 -0
  26. data/{mods/actor/addons/sinbad → samples/actor}/lib/sinbad/sinbad_info.rb +1 -0
  27. data/{mods/actor/addons/sinbad → samples/actor}/lib/sinbad/sinbad_state.rb +0 -0
  28. data/{mods/actor/addons/sinbad → samples/actor}/lib/sinbad.rb +1 -0
  29. data/{mods/actor/apps/browser/browser_application.rb → samples/actor/lib/ui.rb} +13 -27
  30. data/samples/actor/local +2 -0
  31. data/samples/actor/server +2 -0
  32. data/samples/hello_garden/client +2 -0
  33. data/{mods/hello_garden/configs → samples/hello_garden/config}/plugins.cfg +0 -0
  34. data/{mods/hello_garden/configs → samples/hello_garden/config}/resources.cfg +0 -0
  35. data/samples/hello_garden/lib/client.rb +41 -0
  36. data/{mods/hello_garden/apps/common/browser_event.rb → samples/hello_garden/lib/event.rb} +3 -2
  37. data/samples/hello_garden/lib/local.rb +56 -0
  38. data/{mods/hello_garden/apps/server/server_application.rb → samples/hello_garden/lib/model.rb} +22 -22
  39. data/samples/hello_garden/lib/server.rb +34 -0
  40. data/{mods/hello_garden/apps/browser/browser_application.rb → samples/hello_garden/lib/ui.rb} +14 -26
  41. data/samples/hello_garden/local +2 -0
  42. data/samples/hello_garden/server +2 -0
  43. metadata +42 -37
  44. data/lib/teien/addon/addon.rb +0 -25
  45. data/lib/teien/application/application.rb +0 -43
  46. data/lib/teien/commands/browser_command.rb +0 -46
  47. data/lib/teien/commands/local_command.rb +0 -21
  48. data/lib/teien/commands/server_command.rb +0 -39
  49. data/lib/teien/commands/std_command.rb +0 -71
  50. data/lib/teien/core/launcher.rb +0 -31
  51. data/mods/actor/commands/ai/actor_ai.rb +0 -117
  52. data/mods/actor/commands/ai_command.rb +0 -20
  53. data/mods/hello_garden/run +0 -6
data/README.md CHANGED
@@ -20,7 +20,7 @@ Or install it yourself as:
20
20
  $ gem install ruby-procedural
21
21
  $ gem install ruby-bullet
22
22
  $ gem install teienlib
23
- $ gem build teine.gemspec
23
+ $ gem build teien.gemspec
24
24
  $ gem install teien-<version>.gem
25
25
 
26
26
  ## Usage
@@ -28,9 +28,9 @@ Or install it yourself as:
28
28
  Run a sample application.
29
29
 
30
30
  $ mkdir mywork/
31
- $ cp -r <gems>/teien-<version>/mods/ mywork/
32
- $ cd mywork/mods/hello_garden/
33
- $ teien local
31
+ $ cp -r <gems>/teien-<version>/samples/ mywork/
32
+ $ cd mywork/samples/hello_garden/
33
+ $ ./local
34
34
 
35
35
  ## Contributing
36
36
 
data/bin/teien CHANGED
@@ -46,12 +46,16 @@ end
46
46
 
47
47
  $LOAD_PATH.push(lib_path)
48
48
 
49
+ load ARGV[0]
50
+
51
+ =begin
49
52
  require "teien/core/launcher.rb"
50
53
 
51
54
  # include standard commands.
52
55
  require "teien/commands/browser_command"
53
56
  require "teien/commands/server_command"
54
57
  require "teien/commands/local_command"
58
+ require "teien/commands/new_command"
55
59
 
56
60
  # include user commands.
57
61
  Dir.glob("#{Dir.getwd}/commands/*.rb") {|file|
@@ -59,4 +63,4 @@ Dir.glob("#{Dir.getwd}/commands/*.rb") {|file|
59
63
  }
60
64
 
61
65
  Teien::Launcher::launch(ARGV)
62
-
66
+ =end
@@ -6,9 +6,9 @@ module Teien
6
6
  class AnimationManager
7
7
  attr_accessor :animations
8
8
 
9
- def initialize(event_router)
9
+ def initialize()
10
10
  @animations = Hash.new
11
- @event_router = event_router
11
+ @event_router = Teien::get_component("event_router")
12
12
  @event_router.register_receiver(self)
13
13
  end
14
14
 
@@ -6,9 +6,9 @@ module Teien
6
6
  class AnimationManagerProxy
7
7
  attr_accessor :animations
8
8
 
9
- def initialize(event_router)
9
+ def initialize()
10
10
  @animations = Hash.new
11
- @event_router = event_router
11
+ @event_router = Teien::get_component("event_router")
12
12
  @event_router.register_receiver(self)
13
13
  end
14
14
 
@@ -0,0 +1,12 @@
1
+ require "teien/application/server_application"
2
+
3
+ module Teien
4
+
5
+ class LocalApplication < ServerApplication
6
+ def start_application
7
+ @event_router.start_application()
8
+ end
9
+
10
+ end
11
+
12
+ end
@@ -0,0 +1,28 @@
1
+ module Teien
2
+
3
+ class ProxyApplication
4
+ def initialize()
5
+ require 'teien'
6
+
7
+ @event_router = Teien::EventRouter.new()
8
+ Teien::register_component("event_router", @event_router)
9
+
10
+ require "teien/base_object/base_object_manager_proxy"
11
+ @base_object_manager = Teien::BaseObjectManagerProxy.new()
12
+ Teien::register_component("base_object_manager", @base_object_manager)
13
+
14
+ require 'teien/animation/animation_manager_proxy'
15
+ @animation_manager = Teien::AnimationManagerProxy.new()
16
+ Teien::register_component("animation_manager", @animation_manager)
17
+
18
+ require 'teien/actor/actor_manager_proxy'
19
+ @actor_manager = Teien::ActorManagerProxy.new()
20
+ Teien::register_component("actor_manager", @actor_manager)
21
+ end
22
+
23
+ def connect_to_server(ip, port)
24
+ @event_router.connect_to_server(ip, port)
25
+ end
26
+ end
27
+
28
+ end
@@ -0,0 +1,28 @@
1
+ module Teien
2
+
3
+ class ServerApplication
4
+ def initialize(sync_period = 0.3)
5
+ require 'teien'
6
+
7
+ @event_router = Teien::EventRouter.new()
8
+ Teien::register_component("event_router", @event_router)
9
+
10
+ require "teien/base_object/base_object_manager"
11
+ @base_object_manager = Teien::BaseObjectManager.new(sync_period)
12
+ Teien::register_component("base_object_manager", @base_object_manager)
13
+
14
+ require 'teien/animation/animation_manager'
15
+ @animation_manager = Teien::AnimationManager.new()
16
+ Teien::register_component("animation_manager", @animation_manager)
17
+
18
+ require 'teien/actor/actor_manager'
19
+ @actor_manager = Teien::ActorManager.new()
20
+ Teien::register_component("actor_manager", @actor_manager)
21
+ end
22
+
23
+ def start_server(ip, port)
24
+ @event_router.start_server(ip, port)
25
+ end
26
+ end
27
+
28
+ end
@@ -5,16 +5,14 @@ require "teien/base_object/base_object_event.rb"
5
5
  module Teien
6
6
 
7
7
  class BaseObjectManager < BaseObjectManagerBase
8
- def initialize(event_router, sync_period)
9
- super(event_router)
8
+ def initialize(sync_period)
9
+ super()
10
10
  @sync_period = sync_period
11
11
  @sync_timer = sync_period
12
12
  end
13
13
 
14
14
  # EventRouter handler
15
15
  def setup()
16
-
17
- @physics.setup(self)
18
16
  end
19
17
 
20
18
  # EventRouter handler
@@ -23,15 +23,15 @@ class BaseObjectManagerBase
23
23
  #
24
24
  # _script_klass_:: : set a user define class.
25
25
  #
26
- def initialize(event_router)
26
+ def initialize()
27
27
  super()
28
28
 
29
29
  puts "initialize base_object_manager_base"
30
30
 
31
- @event_router = event_router
31
+ @event_router = Teien::get_component("event_router")
32
32
  @event_router.register_receiver(self)
33
33
 
34
- @physics = Physics.new()
34
+ @physics = Physics.new(self)
35
35
 
36
36
  @objects = {}
37
37
  @object_num = 0
@@ -5,15 +5,13 @@ require "teien/base_object/base_object_event.rb"
5
5
  module Teien
6
6
 
7
7
  class BaseObjectManagerProxy < BaseObjectManagerBase
8
- def initialize(event_router)
9
- super(event_router)
8
+ def initialize()
9
+ super()
10
10
  @quit = false
11
11
  end
12
12
 
13
13
  # EventRouter handler
14
14
  def setup()
15
- @physics.setup(self)
16
- return true
17
15
  end
18
16
 
19
17
  # EventRouter handler
@@ -30,21 +30,15 @@ class Physics < Bullet::TickListener
30
30
  attr_accessor :fixed_time_step
31
31
  # attr_accessor :softBodyWorldInfo
32
32
 
33
- def initialize()
33
+ def initialize(object_manager)
34
34
  super()
35
35
 
36
36
  @rigid_bodies = []
37
37
 
38
38
  @max_sub_steps = 1
39
39
  @fixed_time_step = 1.0 / 60.0
40
- end
41
-
42
- def set_gravity(vec)
43
- @dynamics_world.set_gravity(vec)
44
- end
45
40
 
46
- def setup(garden)
47
- @garden = garden
41
+ @object_manager = object_manager
48
42
  @collision_config = Bullet::BtDefaultCollisionConfiguration.new()
49
43
  @collision_dispatcher = Bullet::BtCollisionDispatcher.new(@collision_config)
50
44
 
@@ -72,6 +66,11 @@ class Physics < Bullet::TickListener
72
66
  softBodyWorldInfo.m_gravity.setValue(0, -9.8, 0)
73
67
  # softBodyWorldInfo.m_sparsesdf.Initialize();
74
68
  =end
69
+
70
+ end
71
+
72
+ def set_gravity(vec)
73
+ @dynamics_world.set_gravity(vec)
75
74
  end
76
75
 
77
76
  def finalize
@@ -140,7 +139,7 @@ class Physics < Bullet::TickListener
140
139
  # print "pre_tick_callback: ", timeStep * 1000, "ms\n"
141
140
  delta = Bullet::BtVector3.new(timeStep, timeStep, timeStep)
142
141
 
143
- @garden.objects.each {|name, obj|
142
+ @object_manager.objects.each {|name, obj|
144
143
  if (obj.get_mass() > 0)
145
144
  newVel = obj.get_linear_velocity() + Vector3D.to_bullet(obj.get_acceleration()) * delta
146
145
  obj.set_linear_velocity(obj.limit_velocity(newVel))
@@ -6,6 +6,8 @@ module Teien
6
6
  end
7
7
 
8
8
  def self.get_component(name)
9
- return @@components[name]
9
+ component = @@components[name]
10
+ return component if component
11
+ raise RuntimeError, "There is no such component registered: '#{name}'."
10
12
  end
11
13
  end
@@ -50,12 +50,6 @@ class EventRouter
50
50
  EM.add_periodic_timer(tick_period) do
51
51
  if @last_time == 0
52
52
  @last_time = Time.now.to_f
53
- if ip == nil
54
- # dummy connection for alone
55
- Network::connections[nil] = RemoteInfo.new(nil)
56
- notify(:connection_binded, nil)
57
- notify(:connection_completed, nil)
58
- end
59
53
  else
60
54
  now = Time.now.to_f
61
55
  delta = now - @last_time
@@ -111,6 +105,38 @@ class EventRouter
111
105
  end
112
106
  end
113
107
  end
114
- end
115
108
 
109
+ def start_application(tick_period = 0.001)
110
+ notify(:setup)
111
+
112
+ @last_time = 0
113
+ EM.run do
114
+ EM.add_periodic_timer(tick_period) do
115
+ if @last_time == 0
116
+ @last_time = Time.now.to_f
117
+
118
+ # dummy connection for local
119
+ Network::add_dummy_connection(nil)
120
+ notify(:connection_binded, nil)
121
+ notify(:connection_completed, nil)
122
+ else
123
+ now = Time.now.to_f
124
+ delta = now - @last_time
125
+ @last_time = now
126
+
127
+ notify(:update, delta)
128
+
129
+ if @quit
130
+ EM.stop
131
+ Teien::get_component("base_object_manager").finalize()
132
+ end
133
+ end
134
+ end
135
+
136
+ Signal.trap("INT") { EM.stop; Teien::get_component("base_object_manager").finalize() }
137
+ Signal.trap("TERM") { EM.stop; Teien::get_component("base_object_manager").finalize() }
138
+ end
139
+ end
140
+
141
+ end
116
142
  end
@@ -15,6 +15,10 @@ class Network < EM::Connection
15
15
  @@connections
16
16
  end
17
17
 
18
+ def self.add_dummy_connection(from)
19
+ @@connections[from] = RemoteInfo.new(from)
20
+ end
21
+
18
22
  include EM::P::ObjectProtocol
19
23
 
20
24
 
@@ -4,17 +4,15 @@ require 'teien/ui/view'
4
4
  module Teien
5
5
 
6
6
  class UserInterface
7
- # include Dispatcher
8
-
9
7
  attr_accessor :base_object_manager
10
8
  attr_accessor :debug_draw
11
9
 
12
- def initialize(event_router, base_object_manager)
10
+ def initialize()
13
11
  super()
14
12
 
15
- @event_router = event_router
13
+ @event_router = Teien::get_component("event_router")
16
14
  @event_router.register_receiver(self)
17
- @base_object_manager = base_object_manager
15
+ @base_object_manager = Teien::get_component("base_object_manager")
18
16
  @base_object_manager.register_receiver(self)
19
17
 
20
18
  @view = View.new()
data/lib/teien/ui/view.rb CHANGED
@@ -46,14 +46,17 @@ class View < Ogre::FrameListener
46
46
  def setup(base_object_manager)
47
47
  puts "view setup"
48
48
  @base_object_manager = base_object_manager
49
- @plugins_cfg = @base_object_manager.plugins_cfg ? @base_object_manager.plugins_cfg : "configs/plugins.cfg"
50
- @resources_cfg = @base_object_manager.resources_cfg ? @base_object_manager.resources_cfg : "configs/resources.cfg"
49
+ @plugins_cfg = @base_object_manager.plugins_cfg ? @base_object_manager.plugins_cfg : "config/plugins.cfg"
50
+ @resources_cfg = @base_object_manager.resources_cfg ? @base_object_manager.resources_cfg : "config/resources.cfg"
51
51
 
52
52
  @root = Ogre::Root.new("")
53
53
  load_plugins()
54
54
 
55
- # return false unless (@root.restoreConfig())
56
- return false unless (@root.show_config_dialog())
55
+ if File.exist?("ogre.cfg")
56
+ return false unless (@root.restore_config())
57
+ else
58
+ return false unless (@root.show_config_dialog())
59
+ end
57
60
 
58
61
  @window = @root.initialise(true, @window_title)
59
62
 
data/lib/teien/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Teien
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -0,0 +1,2 @@
1
+ teien lib/client.rb
2
+ #../../bin/teien lib/client.rb
@@ -0,0 +1,38 @@
1
+ require "teien"
2
+ require "teien/application/proxy_application"
3
+ require_relative 'ui'
4
+
5
+ include Teien
6
+
7
+ class Client < ProxyApplication
8
+ include Ui
9
+
10
+ def initialize
11
+ super
12
+
13
+ require 'teien/ui/user_interface'
14
+ @ui = Teien::UserInterface.new
15
+ Teien::register_component("user_interface", @ui )
16
+
17
+ @event_router.register_receiver(self)
18
+ @ui.register_receiver(self)
19
+ end
20
+
21
+ def setup()
22
+ ui_setup()
23
+ end
24
+
25
+ def connection_completed(from)
26
+ ui_connection_completed(from)
27
+ end
28
+
29
+ def update(delta)
30
+ ui_update(delta)
31
+ end
32
+
33
+ def receive_event(event, from)
34
+ ui_receive_event(event, from)
35
+ end
36
+ end
37
+
38
+ Client.new.connect_to_server("0.0.0.0", 11922)
@@ -1,4 +1,5 @@
1
- module Teien::Event::Browser
1
+ module Teien
2
+ module Event
2
3
  class KeyPressed
3
4
  attr_accessor :key
4
5
 
@@ -64,5 +65,5 @@ module Teien::Event::Browser
64
65
 
65
66
 
66
67
  end
67
-
68
+ end
68
69
 
@@ -0,0 +1,63 @@
1
+ require 'teien'
2
+ require "teien/application/local_application"
3
+ require_relative 'model'
4
+ require_relative 'ui'
5
+
6
+ include Teien
7
+
8
+ class Local < LocalApplication
9
+ include Model
10
+ include Ui
11
+
12
+ def initialize(sync_period = 0)
13
+ super(sync_period)
14
+
15
+ require 'teien/ui/user_interface'
16
+ @ui = Teien::UserInterface.new()
17
+ Teien::register_component("user_interface", @ui )
18
+
19
+ @event_router.register_receiver(self)
20
+ @ui.register_receiver(self)
21
+
22
+ @first_update = true
23
+ end
24
+
25
+ def setup()
26
+ model_setup()
27
+ ui_setup()
28
+ end
29
+
30
+ def connection_binded(from)
31
+ puts "connection_binded"
32
+ model_connection_binded(from)
33
+ end
34
+
35
+ def connection_unbinded(from)
36
+ puts "connection_unbinded"
37
+ model_connection_unbinded(from)
38
+ end
39
+
40
+ def connection_completed(from)
41
+ puts "connection_completed"
42
+ ui_connection_completed(from)
43
+ end
44
+
45
+ ##
46
+ # EventRouter handlers
47
+ #
48
+
49
+ def update(delta)
50
+ if @first_update
51
+ @first_update = false
52
+ end
53
+
54
+ ui_update(delta)
55
+ end
56
+
57
+ def receive_event(event, from)
58
+ model_receive_event(event, from)
59
+ ui_receive_event(event, from)
60
+ end
61
+ end
62
+
63
+ Local.new.start_application
@@ -1,15 +1,8 @@
1
- require_relative "../common/browser_event"
1
+ require_relative "event"
2
+ require_relative "sinbad"
2
3
 
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()
4
+ module Model
5
+ def model_setup()
13
6
  @remote_to_controllables = Hash.new
14
7
 
15
8
  @sync_period = 0.5
@@ -37,7 +30,10 @@ class ServerApplication < Teien::Application
37
30
  floor.set_position(Vector3D.new(0, 0, 0))
38
31
  end
39
32
 
40
- def connection_unbinded(from)
33
+ def model_connection_binded(from)
34
+ end
35
+
36
+ def model_connection_unbinded(from)
41
37
  actor = @remote_to_controllables[from]
42
38
  if actor
43
39
  @remote_to_controllables.delete(from)
@@ -46,9 +42,13 @@ class ServerApplication < Teien::Application
46
42
  end
47
43
  end
48
44
 
49
- def receive_event(event, from)
45
+ ##
46
+ # EventRouter handlers
47
+ #
48
+
49
+ def model_receive_event(event, from)
50
50
  case event
51
- when Teien::Event::Browser::ReadyToGo
51
+ when Teien::Event::ReadyToGo
52
52
  puts "ReadyToGo"
53
53
 
54
54
  remote_info = Network.connections[from]
@@ -61,7 +61,7 @@ class ServerApplication < Teien::Application
61
61
  event = Teien::Event::Actor::SyncActor.new(actor_info)
62
62
  @event_router.send_event(event)
63
63
 
64
- event = Teien::Event::Browser::ControllableActor.new(@sinbad.name)
64
+ event = Teien::Event::ControllableActor.new(@sinbad.name)
65
65
  @event_router.send_event(event, from)
66
66
 
67
67
  when Teien::Event::Actor::RequestSetForwardDirection
@@ -98,4 +98,3 @@ class ServerApplication < Teien::Application
98
98
  end
99
99
  end
100
100
  end
101
-
@@ -0,0 +1,37 @@
1
+ require 'teien'
2
+ require "teien/application/server_application"
3
+ require_relative 'model'
4
+
5
+ include Teien
6
+
7
+ class Server < ServerApplication
8
+ include Model
9
+
10
+ def initialize()
11
+ super(0.3)
12
+
13
+ @event_router.register_receiver(self)
14
+ end
15
+
16
+ def setup()
17
+ model_setup()
18
+ end
19
+
20
+ def connection_binded(from)
21
+ model_connection_binded(from)
22
+ end
23
+
24
+ def connection_unbinded(from)
25
+ model_connection_unbinded(from)
26
+ end
27
+
28
+ ##
29
+ # EventRouter handlers
30
+ #
31
+
32
+ def receive_event(event, from)
33
+ model_receive_event(event, from)
34
+ end
35
+ end
36
+
37
+ Server.new.start_server("0.0.0.0", 11922)
@@ -1,3 +1,4 @@
1
+ require "teien/actor/actor_factory"
1
2
  require "teien/actor/actor_info"
2
3
 
3
4
  class SinbadInfo < Teien::ActorInfo
@@ -1,3 +1,4 @@
1
+ require "teien/actor/actor"
1
2
  require_relative "sinbad/sinbad_state"
2
3
  require_relative "sinbad/sinbad_info"
3
4