teien 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/teien +3 -3
- data/lib/teien/animation_operator.rb +45 -45
- data/lib/teien/camera.rb +2 -2
- data/lib/teien/camera_mover.rb +43 -41
- data/lib/teien/garden.rb +7 -7
- data/lib/teien/garden_object.rb +50 -50
- data/lib/teien/light_object.rb +6 -6
- data/lib/teien/object_factory.rb +96 -90
- data/lib/teien/physics.rb +17 -17
- data/lib/teien/smooth_mover.rb +13 -13
- data/lib/teien/ui_listener.rb +14 -14
- data/lib/teien/user_interface.rb +159 -159
- data/lib/teien/version.rb +1 -1
- data/lib/teien/view.rb +58 -58
- data/lib/teien.rb +6 -6
- metadata +8 -8
data/bin/teien
CHANGED
@@ -15,15 +15,15 @@ end
|
|
15
15
|
# RUBYLIB and LD_LIBRARY_PATH. (check sample code)
|
16
16
|
#
|
17
17
|
require 'rbconfig'
|
18
|
-
require '
|
18
|
+
require 'ogre_config'
|
19
19
|
|
20
20
|
$topDir = File.dirname(File.dirname(File.expand_path(__FILE__)))
|
21
21
|
libPath = $topDir + "/lib"
|
22
|
-
extPath = OgreConfig::
|
22
|
+
extPath = OgreConfig::get_deps_lib_path
|
23
23
|
|
24
24
|
# needed by dynamic library.
|
25
25
|
if (/mingw/ =~ RUBY_PLATFORM)
|
26
|
-
ldLibPath = extPath + ";" + OgreConfig::
|
26
|
+
ldLibPath = extPath + ";" + OgreConfig::get_lib + ";" + libPath
|
27
27
|
if (ENV["PATH"] == nil)
|
28
28
|
ENV["PATH"] = ldLibPath
|
29
29
|
exec("ruby #{$0} #{ARGV.join(" ")}")
|
@@ -17,28 +17,28 @@ class AnimationOperator
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def init(name, loop)
|
20
|
-
|
20
|
+
initialize_all_animations()
|
21
21
|
play(name, loop)
|
22
22
|
end
|
23
23
|
|
24
|
-
def
|
25
|
-
set = @entity.
|
26
|
-
set.
|
27
|
-
state.
|
28
|
-
state.
|
29
|
-
state.
|
24
|
+
def initialize_all_animations()
|
25
|
+
set = @entity.get_all_animation_states()
|
26
|
+
set.each_animation_state {|state|
|
27
|
+
state.set_enabled(false)
|
28
|
+
state.set_weight(0)
|
29
|
+
state.set_time_position(0)
|
30
30
|
}
|
31
31
|
end
|
32
32
|
|
33
|
-
def
|
33
|
+
def set_enabled(bl)
|
34
34
|
# @blender.getSource().setEnabled(bl)
|
35
35
|
end
|
36
36
|
|
37
|
-
def
|
37
|
+
def set_blending_mode(mode)
|
38
38
|
@mode = mode
|
39
39
|
end
|
40
40
|
|
41
|
-
def
|
41
|
+
def set_blenging_duration(duration)
|
42
42
|
@duration = duration
|
43
43
|
end
|
44
44
|
|
@@ -46,28 +46,28 @@ class AnimationOperator
|
|
46
46
|
@loop = loop
|
47
47
|
|
48
48
|
unless @state
|
49
|
-
@state = @entity.
|
50
|
-
@state.
|
51
|
-
@state.
|
52
|
-
@state.
|
53
|
-
@state.
|
49
|
+
@state = @entity.get_animation_state(name)
|
50
|
+
@state.set_enabled(true)
|
51
|
+
@state.set_weight(1)
|
52
|
+
@state.set_time_position(0)
|
53
|
+
@state.set_loop(loop)
|
54
54
|
return
|
55
55
|
end
|
56
56
|
|
57
57
|
case @mode
|
58
58
|
when BL_MODE_SWITCH
|
59
|
-
@state.
|
60
|
-
@state = @entity.
|
61
|
-
@state.
|
62
|
-
@state.
|
63
|
-
@state.
|
59
|
+
@state.set_enabled(false)
|
60
|
+
@state = @entity.get_animation_state(name)
|
61
|
+
@state.set_enabled(true)
|
62
|
+
@state.set_weight(1)
|
63
|
+
@state.set_time_position(0)
|
64
64
|
@timeLeft = 0
|
65
65
|
else
|
66
|
-
newState = @entity.
|
66
|
+
newState = @entity.get_animation_state(name)
|
67
67
|
if @timeLeft > 0
|
68
|
-
if newState.
|
68
|
+
if newState.get_animation_name == @nextState.get_animation_name
|
69
69
|
return
|
70
|
-
elsif newState.
|
70
|
+
elsif newState.get_animation_name == @state.get_animation_name
|
71
71
|
# going back to the source state
|
72
72
|
@state = @nextState
|
73
73
|
@nextState = newState
|
@@ -75,22 +75,22 @@ class AnimationOperator
|
|
75
75
|
else
|
76
76
|
if @timeLeft < @duration * 0.5
|
77
77
|
# simply replace the target with this one
|
78
|
-
@nextState.
|
79
|
-
@nextState.
|
78
|
+
@nextState.set_enabled(false)
|
79
|
+
@nextState.set_weight(0)
|
80
80
|
else
|
81
81
|
# old target becomes new source
|
82
|
-
@state.
|
83
|
-
@state.
|
82
|
+
@state.set_enabled(false)
|
83
|
+
@state.set_weight(0)
|
84
84
|
@state = @nextState
|
85
85
|
end
|
86
86
|
|
87
87
|
@nextState = newState
|
88
|
-
@nextState.
|
89
|
-
@nextState.
|
90
|
-
@nextState.
|
88
|
+
@nextState.set_enabled(true)
|
89
|
+
@nextState.set_weight( 1.0 - @timeLeft / @duration )
|
90
|
+
@nextState.set_time_position(0)
|
91
91
|
end
|
92
92
|
else
|
93
|
-
return if newState.
|
93
|
+
return if newState.get_animation_name == @state.get_animation_name
|
94
94
|
|
95
95
|
# assert( target == 0, "target should be 0 when not blending" )
|
96
96
|
# @state.setEnabled(true)
|
@@ -98,44 +98,44 @@ class AnimationOperator
|
|
98
98
|
# mTransition = transition;
|
99
99
|
@timeLeft = @duration
|
100
100
|
@nextState = newState
|
101
|
-
@nextState.
|
102
|
-
@nextState.
|
103
|
-
@nextState.
|
101
|
+
@nextState.set_enabled(true)
|
102
|
+
@nextState.set_weight(0)
|
103
|
+
@nextState.set_time_position(0)
|
104
104
|
end
|
105
105
|
end
|
106
106
|
# @blender.blend(name, Ogrelet::AnimationBlender::BlendWhileAnimating, 0.2, loop)
|
107
107
|
end
|
108
108
|
|
109
|
-
def
|
109
|
+
def add_time(delta)
|
110
110
|
if @state
|
111
111
|
if @timeLeft > 0
|
112
112
|
@timeLeft -= delta
|
113
113
|
|
114
114
|
if @timeLeft < 0
|
115
|
-
@state.
|
116
|
-
@state.
|
115
|
+
@state.set_enabled(false)
|
116
|
+
@state.set_weight(0)
|
117
117
|
@state = @nextState
|
118
|
-
@state.
|
119
|
-
@state.
|
118
|
+
@state.set_enabled(true)
|
119
|
+
@state.set_weight(1)
|
120
120
|
@nextState = nil
|
121
121
|
else
|
122
122
|
# still blending, advance weights
|
123
|
-
@state.
|
124
|
-
@nextState.
|
123
|
+
@state.set_weight(@timeLeft / @duration)
|
124
|
+
@nextState.set_weight(1.0 - @timeLeft / @duration)
|
125
125
|
if(@mode == BL_MODE_CONCURRENT)
|
126
|
-
@nextState.
|
126
|
+
@nextState.add_time(delta)
|
127
127
|
end
|
128
128
|
end
|
129
129
|
end
|
130
130
|
|
131
|
-
if @state.
|
131
|
+
if @state.get_time_position() >= @state.get_length()
|
132
132
|
@complete = true
|
133
133
|
else
|
134
134
|
@complete = false
|
135
135
|
end
|
136
136
|
|
137
|
-
@state.
|
138
|
-
@state.
|
137
|
+
@state.add_time(delta)
|
138
|
+
@state.set_loop(@loop)
|
139
139
|
end
|
140
140
|
# @blender.addTime(delta)
|
141
141
|
end
|
data/lib/teien/camera.rb
CHANGED
@@ -14,11 +14,11 @@ class Camera
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def get_position
|
17
|
-
return Vector3D.to_self(@camera.
|
17
|
+
return Vector3D.to_self(@camera.get_position())
|
18
18
|
end
|
19
19
|
|
20
20
|
def get_direction
|
21
|
-
return Vector3D.to_self(@camera.
|
21
|
+
return Vector3D.to_self(@camera.get_direction())
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
data/lib/teien/camera_mover.rb
CHANGED
@@ -14,22 +14,22 @@ class CameraMover
|
|
14
14
|
|
15
15
|
def initialize(cam)
|
16
16
|
@camera = cam
|
17
|
-
@camera.
|
18
|
-
@camera.
|
17
|
+
@camera.set_position(0, 0, 0)
|
18
|
+
@camera.set_near_clip_distance(0.1)
|
19
19
|
|
20
20
|
@style = CS_FREELOOK
|
21
21
|
|
22
22
|
# CS_FREELOOK, CS_ORBIT, CS_MANUAL
|
23
|
-
@sdk_camera_man =
|
23
|
+
@sdk_camera_man = Ogrebites::SdkCameraMan.new(@camera)
|
24
24
|
@evt_frame = Ogre::FrameEvent.new
|
25
25
|
|
26
26
|
# CS_TPS
|
27
27
|
@height = CAM_HEIGHT
|
28
|
-
@camera_pivot = cam.
|
29
|
-
@camera_goal = @camera_pivot.
|
28
|
+
@camera_pivot = cam.get_scene_manager().get_root_scene_node().create_child_scene_node()
|
29
|
+
@camera_goal = @camera_pivot.create_child_scene_node(Ogre::Vector3.new(0, 0, 5))
|
30
30
|
|
31
|
-
@camera_pivot.
|
32
|
-
@camera_goal.
|
31
|
+
@camera_pivot.set_fixed_yaw_axis(true)
|
32
|
+
@camera_goal.set_fixed_yaw_axis(true)
|
33
33
|
|
34
34
|
@pivot_pitch = 0
|
35
35
|
|
@@ -39,31 +39,31 @@ class CameraMover
|
|
39
39
|
@style = style
|
40
40
|
case @style
|
41
41
|
when CS_FREELOOK
|
42
|
-
@sdk_camera_man.
|
42
|
+
@sdk_camera_man.set_style(Ogrebites::CS_FREELOOK)
|
43
43
|
when CS_ORBIT
|
44
|
-
@sdk_camera_man.
|
44
|
+
@sdk_camera_man.set_style(Ogrebites::CS_ORBIT)
|
45
45
|
else # CS_MANUAL, CS_TPS
|
46
|
-
@sdk_camera_man.
|
46
|
+
@sdk_camera_man.set_style(Ogrebites::CS_MANUAL)
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
50
|
def set_target(target)
|
51
51
|
@target = target
|
52
52
|
if @style == CS_TPS
|
53
|
-
@camera.
|
54
|
-
@camera.
|
53
|
+
@camera.set_auto_tracking(false)
|
54
|
+
@camera.move_relative(Ogre::Vector3.new(0, 0, 0))
|
55
55
|
update_camera(1.0)
|
56
56
|
else
|
57
|
-
@sdk_camera_man.
|
57
|
+
@sdk_camera_man.set_target(target.pivotSceneNode)
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
61
|
def set_position(pos)
|
62
|
-
@camera.
|
62
|
+
@camera.set_position(Vector3D.to_ogre(pos)) if @style == CS_FREELOOK
|
63
63
|
end
|
64
64
|
|
65
65
|
def look_at(pos)
|
66
|
-
@camera.
|
66
|
+
@camera.look_at(Vector3D.to_ogre(pos)) if @style == CS_FREELOOK
|
67
67
|
end
|
68
68
|
|
69
69
|
def set_yaw_pitch_dist(yaw, pitch, dist)
|
@@ -71,38 +71,38 @@ class CameraMover
|
|
71
71
|
end
|
72
72
|
|
73
73
|
def move_forward(bl)
|
74
|
-
evt =
|
74
|
+
evt = Ois::KeyEvent.new(nil, Ois::KC_W, 0)
|
75
75
|
if bl
|
76
|
-
@sdk_camera_man.
|
76
|
+
@sdk_camera_man.inject_key_down(evt)
|
77
77
|
else
|
78
|
-
@sdk_camera_man.
|
78
|
+
@sdk_camera_man.inject_key_up(evt)
|
79
79
|
end
|
80
80
|
end
|
81
81
|
|
82
82
|
def move_backward(bl)
|
83
|
-
evt =
|
83
|
+
evt = Ois::KeyEvent.new(nil, Ois::KC_S, 0)
|
84
84
|
if bl
|
85
|
-
@sdk_camera_man.
|
85
|
+
@sdk_camera_man.inject_key_down(evt)
|
86
86
|
else
|
87
|
-
@sdk_camera_man.
|
87
|
+
@sdk_camera_man.inject_key_up(evt)
|
88
88
|
end
|
89
89
|
end
|
90
90
|
|
91
91
|
def move_left(bl)
|
92
|
-
evt =
|
92
|
+
evt = Ois::KeyEvent.new(nil, Ois::KC_A, 0)
|
93
93
|
if bl
|
94
|
-
@sdk_camera_man.
|
94
|
+
@sdk_camera_man.inject_key_down(evt)
|
95
95
|
else
|
96
|
-
@sdk_camera_man.
|
96
|
+
@sdk_camera_man.inject_key_up(evt)
|
97
97
|
end
|
98
98
|
end
|
99
99
|
|
100
100
|
def move_right(bl)
|
101
|
-
evt =
|
101
|
+
evt = Ois::KeyEvent.new(nil, Ois::KC_D, 0)
|
102
102
|
if bl
|
103
|
-
@sdk_camera_man.
|
103
|
+
@sdk_camera_man.inject_key_down(evt)
|
104
104
|
else
|
105
|
-
@sdk_camera_man.
|
105
|
+
@sdk_camera_man.inject_key_up(evt)
|
106
106
|
end
|
107
107
|
end
|
108
108
|
|
@@ -112,7 +112,7 @@ class CameraMover
|
|
112
112
|
update_camera(delta)
|
113
113
|
else
|
114
114
|
@evt_frame.timeSinceLastFrame = delta
|
115
|
-
@sdk_camera_man.
|
115
|
+
@sdk_camera_man.frame_rendering_queued(@evt_frame)
|
116
116
|
end
|
117
117
|
end
|
118
118
|
|
@@ -122,28 +122,30 @@ class CameraMover
|
|
122
122
|
#
|
123
123
|
def update_camera(deltaTime)
|
124
124
|
# place the camera pivot roughly at the character's shoulder
|
125
|
-
@camera_pivot.
|
125
|
+
@camera_pivot.set_position(Vector3D::to_ogre(@target.get_position()) + Ogre::Vector3.UNIT_Y * @height)
|
126
126
|
# move the camera smoothly to the goal
|
127
|
-
goalOffset = @camera_goal.
|
127
|
+
goalOffset = @camera_goal._get_derived_position() - @camera.get_position()
|
128
128
|
@camera.move(goalOffset * deltaTime * 9.0)
|
129
129
|
# always look at the pivot
|
130
|
-
@camera.
|
130
|
+
@camera.look_at(@camera_pivot._get_derived_position())
|
131
131
|
end
|
132
132
|
|
133
133
|
def mouse_moved(evt)
|
134
|
-
|
134
|
+
# puts "#{evt.state.X.rel}, #{evt.state.X.abs}"
|
135
|
+
# puts "#{evt.state.Y.rel}, #{evt.state.Y.abs}"
|
136
|
+
# puts ""
|
135
137
|
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
end
|
138
|
+
# deal with a warp.
|
139
|
+
if evt.state.X.rel.abs > 300
|
140
|
+
return true
|
141
|
+
end
|
141
142
|
|
143
|
+
if @style == CS_TPS
|
142
144
|
update_camera_goal(-0.05 * evt.state.X.rel,
|
143
145
|
-0.05 * evt.state.Y.rel,
|
144
146
|
-0.0005 * evt.state.Z.rel)
|
145
147
|
else
|
146
|
-
@sdk_camera_man.
|
148
|
+
@sdk_camera_man.inject_mouse_move(evt)
|
147
149
|
end
|
148
150
|
return true
|
149
151
|
end
|
@@ -165,7 +167,7 @@ class CameraMover
|
|
165
167
|
@camera_pivot.pitch(Ogre::Radian.new(Ogre::Degree.new(deltaPitch)), Ogre::Node::TS_LOCAL)
|
166
168
|
@pivot_pitch += deltaPitch;
|
167
169
|
end
|
168
|
-
dist = @camera_goal.
|
170
|
+
dist = @camera_goal._get_derived_position().distance(@camera_pivot._get_derived_position())
|
169
171
|
distChange = deltaZoom * dist;
|
170
172
|
|
171
173
|
# puts "dist: #{dist}:#{distChange}"
|
@@ -179,12 +181,12 @@ class CameraMover
|
|
179
181
|
end
|
180
182
|
|
181
183
|
def mouse_pressed(mouseEvent, mouseButtonID)
|
182
|
-
@sdk_camera_man.
|
184
|
+
@sdk_camera_man.inject_mouse_down(mouseEvent, mouseButtonID) if @style == CS_ORBIT
|
183
185
|
return true
|
184
186
|
end
|
185
187
|
|
186
188
|
def mouse_released(mouseEvent, mouseButtonID)
|
187
|
-
@sdk_camera_man.
|
189
|
+
@sdk_camera_man.inject_mouse_up(mouseEvent, mouseButtonID) if @style == CS_ORBIT
|
188
190
|
return true
|
189
191
|
end
|
190
192
|
|
data/lib/teien/garden.rb
CHANGED
@@ -63,18 +63,18 @@ class Garden
|
|
63
63
|
# _color_:: : set a color(Color).
|
64
64
|
#
|
65
65
|
def set_ambient_light(color)
|
66
|
-
@view.scene_mgr.
|
66
|
+
@view.scene_mgr.set_ambient_light(color)
|
67
67
|
end
|
68
68
|
|
69
69
|
def set_sky_dome(enable, materialName, curvature = 10, tiling = 8, distance = 4000)
|
70
|
-
@view.scene_mgr.
|
70
|
+
@view.scene_mgr.set_sky_dome(enable, materialName, curvature, tiling, distance)
|
71
71
|
end
|
72
72
|
|
73
73
|
def set_debug_draw(bl)
|
74
74
|
if (bl)
|
75
75
|
@debug_draw = bl
|
76
|
-
@debug_drawer =
|
77
|
-
@physics.dynamicsWorld.
|
76
|
+
@debug_drawer = Teienlib::DebugDrawer.new(@view.scene_mgr)
|
77
|
+
@physics.dynamicsWorld.set_debug_drawer(@debug_drawer)
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
@@ -160,7 +160,7 @@ class Garden
|
|
160
160
|
|
161
161
|
|
162
162
|
def update(delta)
|
163
|
-
@physics.dynamics_world.
|
163
|
+
@physics.dynamics_world.debug_draw_world() if @debug_draw
|
164
164
|
|
165
165
|
return @view.update(delta)
|
166
166
|
end
|
@@ -168,7 +168,7 @@ class Garden
|
|
168
168
|
# called from view.update()
|
169
169
|
# This function is divided from update() by the purpose of an optimization,
|
170
170
|
# which archives to run in parallel with GPU process.
|
171
|
-
def
|
171
|
+
def update_in_frame_rendering_queued(delta)
|
172
172
|
return false unless @physics.update(delta)
|
173
173
|
|
174
174
|
@objects.each_value {|obj|
|
@@ -188,7 +188,7 @@ class Garden
|
|
188
188
|
# clear all managers.
|
189
189
|
def finalize()
|
190
190
|
@physics.finalize()
|
191
|
-
@view.root.
|
191
|
+
@view.root.save_config()
|
192
192
|
@view.finalize()
|
193
193
|
@objects = {}
|
194
194
|
end
|