teien 0.0.2 → 0.0.3
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.
- data/README.md +11 -6
- data/bin/teien +16 -2
- data/lib/teien/ai.rb +27 -0
- data/lib/teien/animation.rb +34 -0
- data/lib/teien/animation_operator.rb +6 -0
- data/lib/teien/controller.rb +30 -0
- data/lib/teien/dispatcher.rb +22 -0
- data/lib/teien/event.rb +60 -0
- data/lib/teien/event_router.rb +118 -0
- data/lib/teien/garden.rb +60 -172
- data/lib/teien/garden_base.rb +117 -0
- data/lib/teien/garden_object.rb +119 -136
- data/lib/teien/model.rb +34 -0
- data/lib/teien/network.rb +108 -0
- data/lib/teien/object_info.rb +21 -0
- data/lib/teien/physics.rb +47 -39
- data/lib/teien/physics_object.rb +57 -0
- data/lib/teien/physics_object_factory.rb +170 -0
- data/lib/teien/proxy_garden.rb +118 -0
- data/lib/teien/remote_info.rb +20 -0
- data/lib/teien/sky_dome.rb +15 -0
- data/lib/teien/smooth_mover.rb +31 -42
- data/lib/teien/synchronizer.rb +26 -0
- data/lib/teien/tools.rb +30 -2
- data/lib/teien/user_interface.rb +58 -5
- data/lib/teien/version.rb +1 -1
- data/lib/teien/view.rb +52 -33
- data/lib/teien/view_object.rb +67 -0
- data/lib/teien/view_object_factory.rb +210 -0
- data/lib/teien.rb +62 -14
- data/sample/actor/app/ais/actor_ai.rb +112 -0
- data/sample/actor/app/controllers/actor_controller.rb +182 -0
- data/sample/actor/app/helpers/sinbad/sinbad.rb +176 -0
- data/sample/actor/app/helpers/sinbad/sinbad_state.rb +224 -0
- data/sample/actor/app/helpers/user_event.rb +75 -0
- data/sample/actor/app/models/actor_model.rb +108 -0
- data/sample/actor/config/plugins.cfg +19 -0
- data/sample/actor/config/resources.cfg +24 -0
- data/sample/hello_garden/app/controllers/hello_garden_controller.rb +90 -0
- data/sample/hello_garden/app/helpers/user_event.rb +12 -0
- data/sample/{standalone/hello_garden/hello_garden.rb → hello_garden/app/models/hello_garden_model.rb} +29 -83
- data/sample/{standalone/hello_garden → hello_garden/config}/plugins.cfg +0 -0
- data/sample/{standalone/hello_garden → hello_garden/config}/resources.cfg +0 -0
- data/sample/hello_garden/run +6 -0
- data/teien.gemspec +2 -1
- metadata +52 -15
- data/lib/teien/light_object.rb +0 -36
- data/lib/teien/object_factory.rb +0 -308
- data/sample/standalone/hello_garden/run +0 -5
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'teien/event.rb'
|
2
|
+
|
3
|
+
module Event
|
4
|
+
class RequestControllable
|
5
|
+
def initialize()
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
class ControllableObject
|
10
|
+
attr_accessor :actor_name
|
11
|
+
attr_accessor :object_name
|
12
|
+
|
13
|
+
def initialize(actor_name, object_name)
|
14
|
+
@actor_name = actor_name
|
15
|
+
@object_name = object_name
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class SyncSinbad
|
20
|
+
attr_accessor :actor_name
|
21
|
+
attr_accessor :object_name
|
22
|
+
|
23
|
+
def initialize(actor)
|
24
|
+
@actor_name = actor.name
|
25
|
+
@object_name = actor.object.name
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class SetForwardDirection
|
30
|
+
attr_accessor :actor_name
|
31
|
+
attr_accessor :dir
|
32
|
+
|
33
|
+
def initialize(name, dir)
|
34
|
+
@actor_name = name
|
35
|
+
@dir = dir
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
module Action
|
40
|
+
attr_accessor :actor_name
|
41
|
+
attr_accessor :forward
|
42
|
+
attr_accessor :backward
|
43
|
+
attr_accessor :left
|
44
|
+
attr_accessor :right
|
45
|
+
attr_accessor :jump
|
46
|
+
|
47
|
+
def reset()
|
48
|
+
@forward = false
|
49
|
+
@backward = false
|
50
|
+
@left = false
|
51
|
+
@right = false
|
52
|
+
@jump = false
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
class EnableAction
|
58
|
+
include Action
|
59
|
+
|
60
|
+
def initialize(name)
|
61
|
+
@actor_name = name
|
62
|
+
reset()
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
class DisableAction
|
67
|
+
include Action
|
68
|
+
|
69
|
+
def initialize(name)
|
70
|
+
@actor_name = name
|
71
|
+
reset()
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
@@ -0,0 +1,108 @@
|
|
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
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# Defines plugins to load
|
2
|
+
|
3
|
+
# Define plugin folder
|
4
|
+
#PluginFolder=../../../lib/x86-linux/OGRE/
|
5
|
+
#PluginFolder=/var/lib/gems/1.9.1/gems/ruby-ogre-0.0.1-x86-linux/lib/OGRE/
|
6
|
+
PluginFolder=<SystemPluginFolder>
|
7
|
+
|
8
|
+
# Define plugins
|
9
|
+
# Plugin=RenderSystem_Direct3D9
|
10
|
+
# Plugin=RenderSystem_Direct3D10
|
11
|
+
# Plugin=RenderSystem_Direct3D11
|
12
|
+
Plugin=RenderSystem_GL
|
13
|
+
# Plugin=RenderSystem_GLES
|
14
|
+
Plugin=Plugin_ParticleFX
|
15
|
+
Plugin=Plugin_BSPSceneManager
|
16
|
+
Plugin=Plugin_CgProgramManager
|
17
|
+
Plugin=Plugin_PCZSceneManager
|
18
|
+
Plugin=Plugin_OctreeZone
|
19
|
+
Plugin=Plugin_OctreeSceneManager
|
@@ -0,0 +1,24 @@
|
|
1
|
+
ResourceFolder=<SystemResourceFolder>
|
2
|
+
|
3
|
+
# Resources required by the sample browser and most samples.
|
4
|
+
[Essential]
|
5
|
+
Zip=packs/SdkTrays.zip
|
6
|
+
FileSystem=/thumbnails/
|
7
|
+
|
8
|
+
# Resource locations to be added to the default path
|
9
|
+
[General]
|
10
|
+
Zip=packs/skybox.zip
|
11
|
+
Zip=packs/Sinbad.zip
|
12
|
+
Zip=packs/dragon.zip
|
13
|
+
FileSystem=fonts
|
14
|
+
FileSystem=models/
|
15
|
+
FileSystem=materials/scripts/
|
16
|
+
FileSystem=materials/textures/
|
17
|
+
FileSystem=materials/textures/nvidia/
|
18
|
+
FileSystem=materials/programs/
|
19
|
+
FileSystem=particle
|
20
|
+
FileSystem=DeferredShadingMedia
|
21
|
+
FileSystem=PCZAppMedia
|
22
|
+
FileSystem=RTShaderLib
|
23
|
+
FileSystem=RTShaderLib/materials
|
24
|
+
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require_relative '../helpers/user_event'
|
2
|
+
|
3
|
+
include Teien
|
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")
|
11
|
+
|
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"
|
16
|
+
|
17
|
+
@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
|
+
|
22
|
+
@camera_mover.set_position(Vector3D.new(50, 50, 50))
|
23
|
+
@camera_mover.look_at(Vector3D.new(0, 0, 0))
|
24
|
+
|
25
|
+
@ui.show_frame_stats(UI::TL_BOTTOMLEFT)
|
26
|
+
@ui.show_logo(UI::TL_BOTTOMRIGHT)
|
27
|
+
@ui.hide_cursor()
|
28
|
+
end
|
29
|
+
|
30
|
+
def update(delta)
|
31
|
+
@camera_mover.update(delta)
|
32
|
+
return !@quit
|
33
|
+
end
|
34
|
+
|
35
|
+
# handlers of UserInterface
|
36
|
+
def key_pressed(keyEvent)
|
37
|
+
if (keyEvent.key == UI::KC_E)
|
38
|
+
@camera_mover.move_forward(true)
|
39
|
+
elsif (keyEvent.key == UI::KC_D)
|
40
|
+
@camera_mover.move_backward(true)
|
41
|
+
elsif (keyEvent.key == UI::KC_S)
|
42
|
+
@camera_mover.move_left(true)
|
43
|
+
elsif (keyEvent.key == UI::KC_F)
|
44
|
+
@camera_mover.move_right(true)
|
45
|
+
elsif (keyEvent.key == UI::KC_G)
|
46
|
+
if @ui.debug_draw
|
47
|
+
@ui.set_debug_draw(false)
|
48
|
+
else
|
49
|
+
@ui.set_debug_draw(true)
|
50
|
+
end
|
51
|
+
elsif (keyEvent.key == UI::KC_ESCAPE)
|
52
|
+
@garden.quit()
|
53
|
+
end
|
54
|
+
return true
|
55
|
+
end
|
56
|
+
|
57
|
+
def key_released(keyEvent)
|
58
|
+
if (keyEvent.key == UI::KC_ESCAPE)
|
59
|
+
@quit =true
|
60
|
+
elsif (keyEvent.key == UI::KC_E)
|
61
|
+
@camera_mover.move_forward(false)
|
62
|
+
elsif (keyEvent.key == UI::KC_D)
|
63
|
+
@camera_mover.move_backward(false)
|
64
|
+
elsif (keyEvent.key == UI::KC_S)
|
65
|
+
@camera_mover.move_left(false)
|
66
|
+
elsif (keyEvent.key == UI::KC_F)
|
67
|
+
@camera_mover.move_right(false)
|
68
|
+
end
|
69
|
+
return true
|
70
|
+
end
|
71
|
+
|
72
|
+
def mouse_moved(mouseEvent)
|
73
|
+
@camera_mover.mouse_moved(mouseEvent)
|
74
|
+
return true
|
75
|
+
end
|
76
|
+
|
77
|
+
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)
|
82
|
+
return true
|
83
|
+
end
|
84
|
+
|
85
|
+
def mouse_released(mouseEvent, mouseButtonID)
|
86
|
+
@camera_mover.mouse_released(mouseEvent, mouseButtonID)
|
87
|
+
return true
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
@@ -1,35 +1,26 @@
|
|
1
1
|
require 'teien'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
class HelloGarden
|
6
|
-
attr_accessor :info
|
7
|
-
|
8
|
-
def initialize(garden)
|
9
|
-
@garden = garden
|
3
|
+
require_relative '../helpers/user_event'
|
10
4
|
|
11
|
-
|
5
|
+
include Teien
|
12
6
|
|
7
|
+
class HelloGardenModel < Teien::Model
|
8
|
+
def setup(garden)
|
9
|
+
puts "model setup"
|
13
10
|
@quit = false
|
14
|
-
|
15
|
-
# set config files.
|
16
|
-
fileDir = File.dirname(File.expand_path(__FILE__))
|
17
|
-
@garden.plugins_cfg = "#{fileDir}/plugins.cfg"
|
18
|
-
@garden.resources_cfg = "#{fileDir}/resources.cfg"
|
19
|
-
end
|
20
|
-
|
21
|
-
def setup()
|
22
|
-
@ui = @garden.create_user_interface()
|
11
|
+
@shot_num = 0
|
23
12
|
|
24
13
|
@garden.set_ambient_light(Color.new(0.1, 0.1, 0.1))
|
25
14
|
@garden.set_sky_dome(true, "Examples/CloudySky", 5, 8)
|
26
15
|
@garden.set_gravity(Vector3D.new(0.0, -9.8, 0.0))
|
27
16
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
17
|
+
# create a light
|
18
|
+
object_info = LightObjectInfo.new(LightObjectInfo::DIRECTIONAL)
|
19
|
+
object_info.diffuse_color = Color.new(1.0, 1.0, 1.0)
|
20
|
+
object_info.specular_color = Color.new(0.25, 0.25, 0)
|
21
|
+
object_info.direction = Vector3D.new( -1, -1, -1 )
|
22
|
+
light = @garden.create_object("light", object_info, PhysicsInfo.new(0))
|
23
|
+
light.set_position(Vector3D.new(0, 0, 0))
|
33
24
|
|
34
25
|
# create a floor.
|
35
26
|
object_info = FloorObjectInfo.new(50, 50, 0.5, 1, 1, 5, 5)
|
@@ -75,81 +66,36 @@ class HelloGarden
|
|
75
66
|
pen = @garden.create_object("pen", object_info, PhysicsInfo.new(10))
|
76
67
|
pen.set_position(Vector3D.new(1, 15, 0))
|
77
68
|
|
69
|
+
=begin
|
78
70
|
# create a mesh object
|
79
71
|
object_info = MeshObjectInfo.new("penguin.mesh")
|
80
72
|
object_info.scale = Vector3D.new(1.0 / 20.0, 1.0 / 20.0, 1.0 / 20.0)
|
81
73
|
pen = @garden.create_object("penpen", object_info, PhysicsInfo.new(10))
|
82
74
|
pen.set_position(Vector3D.new(1, 20, 0))
|
83
|
-
|
84
|
-
@ui.set_controller(self)
|
85
|
-
|
86
|
-
@camera_mover = @ui.get_camera().get_mover()
|
87
|
-
# @camera_mover.set_style(CameraMover::CS_FREELOOK)
|
88
|
-
# @camera_mover.set_style(CameraMover::CS_ORBIT)
|
89
|
-
@camera_mover.set_style(CameraMover::CS_TPS)
|
90
|
-
@camera_mover.set_target(floor)
|
91
|
-
@camera_mover.set_yaw_pitch_dist(Radian.new(Degree.new(0)), Radian.new(Degree.new(45)), 30.0)
|
92
|
-
# @camera_mover.set_position(Vector3D.new(20, 20, 20))
|
93
|
-
# @camera_mover.look_at(Vector3D.new(0, 0, 0))
|
94
|
-
|
95
|
-
@ui.show_frame_stats(UI::TL_BOTTOMLEFT)
|
96
|
-
@ui.show_logo(UI::TL_BOTTOMRIGHT)
|
97
|
-
@ui.hide_cursor()
|
75
|
+
=end
|
98
76
|
end
|
99
77
|
|
100
78
|
def update(delta)
|
101
79
|
# print "Garden tick is called: ", evt.timeSinceLastFrame * 1000, "\n"
|
102
|
-
return
|
103
|
-
|
104
|
-
@camera_mover.update(delta)
|
105
|
-
|
106
|
-
return true
|
80
|
+
return !@quit
|
107
81
|
end
|
108
82
|
|
109
|
-
def
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
@camera_mover.move_backward(true)
|
114
|
-
elsif (keyEvent.key == UI::KC_S)
|
115
|
-
@camera_mover.move_left(true)
|
116
|
-
elsif (keyEvent.key == UI::KC_F)
|
117
|
-
@camera_mover.move_right(true)
|
83
|
+
def receive_event(event, from)
|
84
|
+
case event
|
85
|
+
when Event::ShotBox
|
86
|
+
shot_box(event.pos, event.dir)
|
118
87
|
end
|
119
|
-
return true
|
120
88
|
end
|
121
89
|
|
122
|
-
def
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
elsif (keyEvent.key == UI::KC_F)
|
132
|
-
@camera_mover.move_right(false)
|
133
|
-
end
|
134
|
-
return true
|
135
|
-
end
|
136
|
-
|
137
|
-
def mouse_moved(mouseEvent)
|
138
|
-
@camera_mover.mouse_moved(mouseEvent)
|
139
|
-
return true
|
140
|
-
end
|
141
|
-
|
142
|
-
def mouse_pressed(mouseEvent, mouseButtonID)
|
143
|
-
@camera_mover.mouse_pressed(mouseEvent, mouseButtonID)
|
144
|
-
return true
|
145
|
-
end
|
146
|
-
|
147
|
-
def mouse_released(mouseEvent, mouseButtonID)
|
148
|
-
@camera_mover.mouse_released(mouseEvent, mouseButtonID)
|
149
|
-
return true
|
90
|
+
def shot_box(pos, dir)
|
91
|
+
object_info = BoxObjectInfo.new(Vector3D.new(1, 1, 1))
|
92
|
+
object_info.material_name = "Examples/SphereMappedRustySteel"
|
93
|
+
box = @garden.create_object("shotBox#{@shot_num}", object_info, PhysicsInfo.new(1.0))
|
94
|
+
box.set_position(pos + (dir * 5.0))
|
95
|
+
@shot_num += 1
|
96
|
+
force = dir * Vector3D.new(100.0, 100.0, 100.0)
|
97
|
+
box.apply_impulse(force, Vector3D.new(0.0, 0.0, 0.0))
|
98
|
+
@garden.send_event(Event::SyncObject.new(box))
|
150
99
|
end
|
151
100
|
end
|
152
101
|
|
153
|
-
|
154
|
-
garden = create_garden(HelloGarden)
|
155
|
-
garden.run()
|
File without changes
|
File without changes
|
data/teien.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |gem|
|
|
8
8
|
gem.authors = ["abexsoft works"]
|
9
9
|
gem.email = ["abexsoft@gmail.com"]
|
10
10
|
gem.description = %q{An easy 3D world maker.}
|
11
|
-
gem.summary = %q{An easy 3D world maker. You can create your 3D world with ruby scripts.}
|
11
|
+
gem.summary = %q{An easy 3D world maker. You can create your 3D world connected by network with ruby scripts.}
|
12
12
|
gem.homepage = "https://github.com/abexsoft/teien"
|
13
13
|
|
14
14
|
gem.files = `git ls-files`.split($/)
|
@@ -16,6 +16,7 @@ Gem::Specification.new do |gem|
|
|
16
16
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
17
17
|
gem.require_paths = ["lib"]
|
18
18
|
|
19
|
+
gem.add_dependency 'eventmachine'
|
19
20
|
gem.add_dependency 'ruby-ogre'
|
20
21
|
gem.add_dependency 'ruby-bullet'
|
21
22
|
gem.add_dependency 'teienlib'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: teien
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-01-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: eventmachine
|
16
|
+
requirement: &79258170 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *79258170
|
14
25
|
- !ruby/object:Gem::Dependency
|
15
26
|
name: ruby-ogre
|
16
|
-
requirement: &
|
27
|
+
requirement: &79257660 !ruby/object:Gem::Requirement
|
17
28
|
none: false
|
18
29
|
requirements:
|
19
30
|
- - ! '>='
|
@@ -21,10 +32,10 @@ dependencies:
|
|
21
32
|
version: '0'
|
22
33
|
type: :runtime
|
23
34
|
prerelease: false
|
24
|
-
version_requirements: *
|
35
|
+
version_requirements: *79257660
|
25
36
|
- !ruby/object:Gem::Dependency
|
26
37
|
name: ruby-bullet
|
27
|
-
requirement: &
|
38
|
+
requirement: &79257300 !ruby/object:Gem::Requirement
|
28
39
|
none: false
|
29
40
|
requirements:
|
30
41
|
- - ! '>='
|
@@ -32,10 +43,10 @@ dependencies:
|
|
32
43
|
version: '0'
|
33
44
|
type: :runtime
|
34
45
|
prerelease: false
|
35
|
-
version_requirements: *
|
46
|
+
version_requirements: *79257300
|
36
47
|
- !ruby/object:Gem::Dependency
|
37
48
|
name: teienlib
|
38
|
-
requirement: &
|
49
|
+
requirement: &79309410 !ruby/object:Gem::Requirement
|
39
50
|
none: false
|
40
51
|
requirements:
|
41
52
|
- - ! '>='
|
@@ -43,7 +54,7 @@ dependencies:
|
|
43
54
|
version: '0'
|
44
55
|
type: :runtime
|
45
56
|
prerelease: false
|
46
|
-
version_requirements: *
|
57
|
+
version_requirements: *79309410
|
47
58
|
description: An easy 3D world maker.
|
48
59
|
email:
|
49
60
|
- abexsoft@gmail.com
|
@@ -59,26 +70,51 @@ files:
|
|
59
70
|
- Rakefile
|
60
71
|
- bin/teien
|
61
72
|
- lib/teien.rb
|
73
|
+
- lib/teien/ai.rb
|
74
|
+
- lib/teien/animation.rb
|
62
75
|
- lib/teien/animation_operator.rb
|
63
76
|
- lib/teien/camera.rb
|
64
77
|
- lib/teien/camera_mover.rb
|
78
|
+
- lib/teien/controller.rb
|
79
|
+
- lib/teien/dispatcher.rb
|
80
|
+
- lib/teien/event.rb
|
81
|
+
- lib/teien/event_router.rb
|
65
82
|
- lib/teien/garden.rb
|
83
|
+
- lib/teien/garden_base.rb
|
66
84
|
- lib/teien/garden_object.rb
|
67
|
-
- lib/teien/
|
68
|
-
- lib/teien/
|
85
|
+
- lib/teien/model.rb
|
86
|
+
- lib/teien/network.rb
|
69
87
|
- lib/teien/object_info.rb
|
70
88
|
- lib/teien/physics.rb
|
71
89
|
- lib/teien/physics_info.rb
|
90
|
+
- lib/teien/physics_object.rb
|
91
|
+
- lib/teien/physics_object_factory.rb
|
92
|
+
- lib/teien/proxy_garden.rb
|
93
|
+
- lib/teien/remote_info.rb
|
94
|
+
- lib/teien/sky_dome.rb
|
72
95
|
- lib/teien/smooth_mover.rb
|
96
|
+
- lib/teien/synchronizer.rb
|
73
97
|
- lib/teien/tools.rb
|
74
98
|
- lib/teien/ui_listener.rb
|
75
99
|
- lib/teien/user_interface.rb
|
76
100
|
- lib/teien/version.rb
|
77
101
|
- lib/teien/view.rb
|
78
|
-
-
|
79
|
-
-
|
80
|
-
- sample/
|
81
|
-
- sample/
|
102
|
+
- lib/teien/view_object.rb
|
103
|
+
- lib/teien/view_object_factory.rb
|
104
|
+
- sample/actor/app/ais/actor_ai.rb
|
105
|
+
- sample/actor/app/controllers/actor_controller.rb
|
106
|
+
- sample/actor/app/helpers/sinbad/sinbad.rb
|
107
|
+
- sample/actor/app/helpers/sinbad/sinbad_state.rb
|
108
|
+
- sample/actor/app/helpers/user_event.rb
|
109
|
+
- sample/actor/app/models/actor_model.rb
|
110
|
+
- sample/actor/config/plugins.cfg
|
111
|
+
- sample/actor/config/resources.cfg
|
112
|
+
- sample/hello_garden/app/controllers/hello_garden_controller.rb
|
113
|
+
- sample/hello_garden/app/helpers/user_event.rb
|
114
|
+
- sample/hello_garden/app/models/hello_garden_model.rb
|
115
|
+
- sample/hello_garden/config/plugins.cfg
|
116
|
+
- sample/hello_garden/config/resources.cfg
|
117
|
+
- sample/hello_garden/run
|
82
118
|
- teien.gemspec
|
83
119
|
homepage: https://github.com/abexsoft/teien
|
84
120
|
licenses: []
|
@@ -103,5 +139,6 @@ rubyforge_project:
|
|
103
139
|
rubygems_version: 1.8.11
|
104
140
|
signing_key:
|
105
141
|
specification_version: 3
|
106
|
-
summary: An easy 3D world maker. You can create your 3D world
|
142
|
+
summary: An easy 3D world maker. You can create your 3D world connected by network
|
143
|
+
with ruby scripts.
|
107
144
|
test_files: []
|
data/lib/teien/light_object.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
require "teien/tools.rb"
|
2
|
-
|
3
|
-
class LightObject
|
4
|
-
POINT = Ogre::Light::LT_POINT
|
5
|
-
DIRECTIONAL = Ogre::Light::LT_DIRECTIONAL
|
6
|
-
SPOTLIGHT = Ogre::Light::LT_SPOTLIGHT
|
7
|
-
|
8
|
-
attr_accessor :name
|
9
|
-
attr_accessor :light
|
10
|
-
|
11
|
-
def initialize(garden, name)
|
12
|
-
@garden = garden
|
13
|
-
@name = name
|
14
|
-
@light = @garden.view.scene_mgr.create_light(@name);
|
15
|
-
end
|
16
|
-
|
17
|
-
def set_type(type)
|
18
|
-
@light.set_type(type)
|
19
|
-
end
|
20
|
-
|
21
|
-
def set_diffuse_color(color)
|
22
|
-
@light.set_diffuse_colour(color);
|
23
|
-
end
|
24
|
-
|
25
|
-
def set_specular_color(color)
|
26
|
-
@light.set_specular_colour(color)
|
27
|
-
end
|
28
|
-
|
29
|
-
def set_position(vec)
|
30
|
-
@light.set_position(Vector3D.to_ogre(vec));
|
31
|
-
end
|
32
|
-
|
33
|
-
def set_direction(vec)
|
34
|
-
@light.set_direction(Vector3D.to_ogre(vec));
|
35
|
-
end
|
36
|
-
end
|