Class: Teien::BaseObject
- Inherits:
-
Bullet::BtMotionState
- Object
- Bullet::BtMotionState
- Teien::BaseObject
show all
- Includes:
- Dispatcher
- Defined in:
- lib/teien/base_object/base_object.rb
Constant Summary
collapse
- MODE_FREE =
0
- MODE_ATTACHED =
1
Instance Attribute Summary collapse
Instance Method Summary
collapse
-
#apply_impulse(imp, rel = Vector3D.new(0, 0, 0)) ⇒ Object
-
#attach_object_to_bone(bone_name, obj, offset_quat = Quaternion.new(1, 0, 0, 0), offset_pos = Vector3D.new(0, 0, 0)) ⇒ Object
-
#finalize ⇒ Object
-
#get_acceleration ⇒ Object
-
#get_activation_state ⇒ Object
-
#get_angular_velocity ⇒ Object
-
#get_collision_mask ⇒ Object
-
#get_gravity ⇒ Object
-
#get_inv_mass ⇒ Object
-
#get_linear_velocity ⇒ Object
-
#get_mass ⇒ Object
-
#get_orientation ⇒ Object
-
#get_position ⇒ Object
-
#get_rotation ⇒ Object
-
#get_world_transform(worldTrans) ⇒ Object
-
#initialize ⇒ BaseObject
constructor
A new instance of BaseObject.
-
#limit_velocity(vel) ⇒ Object
-
#rotate(quat) ⇒ Object
-
#set_acceleration(acc) ⇒ Object
Set the object’s acceleration.
-
#set_activation_state(state) ⇒ Object
-
#set_angular_velocity(vel) ⇒ Object
-
#set_angular_velocity_with_interpolation(vel) ⇒ Object
-
#set_collision_filter(filter) ⇒ Object
-
#set_damping(linear_damping, angular_damping) ⇒ Object
-
#set_gravity(grav) ⇒ Object
-
#set_linear_velocity(aVel) ⇒ Object
-
#set_linear_velocity_with_interpolation(vel) ⇒ Object
-
#set_max_horizontal_velocity(vel_len) ⇒ Object
Set a max horizontal velocity.
-
#set_max_vertical_velocity(vel_le) ⇒ Object
Set a max vertical velocity.
-
#set_position(aPos) ⇒ Object
-
#set_position_with_interpolation(pos) ⇒ Object
-
#set_rotation(quad) ⇒ Object
-
#set_rotation_with_interpolation(quad) ⇒ Object
-
#set_world_transform(worldTrans) ⇒ Object
-
#yaw(angle) ⇒ Object
def yaw(angle, relativeTo=Ogre::Node::TS_LOCAL).
Methods included from Dispatcher
#notify, #notify_reversely, #register_receiver
Constructor Details
Returns a new instance of BaseObject.
27
28
29
30
31
32
33
34
35
36
|
# File 'lib/teien/base_object/base_object.rb', line 27
def initialize()
super()
@id = -1
@mode = MODE_FREE
@attached_objects = Hash.new
@manager = nil
@physics_object = nil
end
|
Instance Attribute Details
#attached_objects ⇒ Object
Returns the value of attribute attached_objects.
19
20
21
|
# File 'lib/teien/base_object/base_object.rb', line 19
def attached_objects
@attached_objects
end
|
#id ⇒ Object
12
13
14
|
# File 'lib/teien/base_object/base_object.rb', line 12
def id
@id
end
|
#manager ⇒ Object
Returns the value of attribute manager.
21
22
23
|
# File 'lib/teien/base_object/base_object.rb', line 21
def manager
@manager
end
|
#mode ⇒ Object
Returns the value of attribute mode.
14
15
16
|
# File 'lib/teien/base_object/base_object.rb', line 14
def mode
@mode
end
|
#name ⇒ Object
Returns the value of attribute name.
13
14
15
|
# File 'lib/teien/base_object/base_object.rb', line 13
def name
@name
end
|
#object_info ⇒ Object
Returns the value of attribute object_info.
16
17
18
|
# File 'lib/teien/base_object/base_object.rb', line 16
def object_info
@object_info
end
|
#physics_info ⇒ Object
Returns the value of attribute physics_info.
17
18
19
|
# File 'lib/teien/base_object/base_object.rb', line 17
def physics_info
@physics_info
end
|
#physics_object ⇒ Object
Returns the value of attribute physics_object.
22
23
24
|
# File 'lib/teien/base_object/base_object.rb', line 22
def physics_object
@physics_object
end
|
Instance Method Details
#apply_impulse(imp, rel = Vector3D.new(0, 0, 0)) ⇒ Object
226
227
228
229
|
# File 'lib/teien/base_object/base_object.rb', line 226
def apply_impulse(imp, rel = Vector3D.new(0, 0, 0))
@physics_object.rigid_body.activate(true)
@physics_object.rigid_body.apply_impulse(imp, rel)
end
|
#attach_object_to_bone(bone_name, obj, offset_quat = Quaternion.new(1, 0, 0, 0), offset_pos = Vector3D.new(0, 0, 0)) ⇒ Object
252
253
254
255
256
257
258
|
# File 'lib/teien/base_object/base_object.rb', line 252
def attach_object_to_bone(bone_name, obj,
offset_quat = Quaternion.new(1, 0, 0, 0),
offset_pos = Vector3D.new(0, 0, 0))
attached_objects[bone_name] = AttachmentInfo.new(bone_name, obj.name, offset_quat, offset_pos)
obj.mode = MODE_ATTACHED
end
|
#finalize ⇒ Object
38
39
40
41
|
# File 'lib/teien/base_object/base_object.rb', line 38
def finalize()
notify(:finalize)
@physics_object.finalize()
end
|
#get_acceleration ⇒ Object
191
192
193
|
# File 'lib/teien/base_object/base_object.rb', line 191
def get_acceleration()
return @physics_object.acceleration
end
|
#get_activation_state ⇒ Object
162
163
164
|
# File 'lib/teien/base_object/base_object.rb', line 162
def get_activation_state()
@physics_object.rigid_body.get_activation_state()
end
|
#get_angular_velocity ⇒ Object
187
188
189
|
# File 'lib/teien/base_object/base_object.rb', line 187
def get_angular_velocity()
return @physics_object.rigid_body.get_angular_velocity()
end
|
#get_collision_mask ⇒ Object
174
175
176
|
# File 'lib/teien/base_object/base_object.rb', line 174
def get_collision_mask()
@physics_object.rigid_body.get_broadphase_handle().m_collisionFilterMask
end
|
#get_gravity ⇒ Object
195
196
197
|
# File 'lib/teien/base_object/base_object.rb', line 195
def get_gravity()
return @physics_object.rigid_body.get_gravity()
end
|
#get_inv_mass ⇒ Object
170
171
172
|
# File 'lib/teien/base_object/base_object.rb', line 170
def get_inv_mass()
return @physics_object.rigid_body.get_inv_mass()
end
|
#get_linear_velocity ⇒ Object
183
184
185
|
# File 'lib/teien/base_object/base_object.rb', line 183
def get_linear_velocity()
return @physics_object.rigid_body.get_linear_velocity()
end
|
#get_mass ⇒ Object
166
167
168
|
# File 'lib/teien/base_object/base_object.rb', line 166
def get_mass()
return 1.0 / @physics_object.rigid_body.get_inv_mass()
end
|
#get_orientation ⇒ Object
203
204
205
|
# File 'lib/teien/base_object/base_object.rb', line 203
def get_orientation()
return @physics_object.transform.get_rotation()
end
|
#get_position ⇒ Object
178
179
180
181
|
# File 'lib/teien/base_object/base_object.rb', line 178
def get_position()
newPos = @physics_object.transform.get_origin()
return newPos
end
|
#get_rotation ⇒ Object
199
200
201
|
# File 'lib/teien/base_object/base_object.rb', line 199
def get_rotation()
return @physics_object.transform.get_rotation()
end
|
158
159
160
|
# File 'lib/teien/base_object/base_object.rb', line 158
def get_world_transform(worldTrans)
end
|
#limit_velocity(vel) ⇒ Object
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
|
# File 'lib/teien/base_object/base_object.rb', line 207
def limit_velocity(vel)
newVel = Bullet::BtVector3.new(vel.x, vel.y, vel.z)
hLen = Math::sqrt(vel.x * vel.x + vel.z * vel.z)
if (@physics_object.maxHorizontalVelocity != 0 && hLen > @physics_object.maxHorizontalVelocity)
newVel.x = vel.x / hLen * @physics_object.maxHorizontalVelocity
newVel.z = vel.z / hLen * @physics_object.maxHorizontalVelocity
end
vLen = vel.y
if (@physics_object.maxVerticalVelocity != 0 && vLen > @physics_object.maxVerticalVelocity)
newVel.y = @physics_object.maxVerticalVelocity
end
return newVel
end
|
#rotate(quat) ⇒ Object
239
240
241
242
243
244
245
246
247
248
249
250
|
# File 'lib/teien/base_object/base_object.rb', line 239
def rotate(quat)
qnorm = Quaternion.new()
qnorm.copy(quat)
qnorm.normalize()
transform = @physics_object.rigid_body.get_center_of_mass_transform()
curRot = transform.get_rotation()
@newRot = curRot * qnorm
transform.set_rotation(@newRot)
@physics_object.rigid_body.set_center_of_mass_transform(transform)
notify(:set_rotation, @newRot)
end
|
#set_acceleration(acc) ⇒ Object
Set the object’s acceleration.
115
116
117
|
# File 'lib/teien/base_object/base_object.rb', line 115
def set_acceleration(acc)
@physics_object.acceleration = acc
end
|
#set_activation_state(state) ⇒ Object
43
44
45
|
# File 'lib/teien/base_object/base_object.rb', line 43
def set_activation_state(state)
@physics_object.rigid_body.set_activation_state(state)
end
|
#set_angular_velocity(vel) ⇒ Object
Set an angular velocity.
Args
- vel: Vector3D
87
88
89
90
|
# File 'lib/teien/base_object/base_object.rb', line 87
def set_angular_velocity(vel)
@physics_object.rigid_body.activate(true)
@physics_object.rigid_body.set_angular_velocity(vel)
end
|
#set_angular_velocity_with_interpolation(vel) ⇒ Object
92
93
94
95
96
|
# File 'lib/teien/base_object/base_object.rb', line 92
def set_angular_velocity_with_interpolation(vel)
@physics_object.rigid_body.activate(true)
ip_vel = (get_angular_velocity() + Vector3D.to_bullet(vel)) / 2
@physics_object.rigid_body.set_angular_velocity(ip_vel)
end
|
#set_collision_filter(filter) ⇒ Object
145
146
147
148
149
|
# File 'lib/teien/base_object/base_object.rb', line 145
def set_collision_filter(filter)
@manager.physics.dynamicsWorld.remove_rigid_body(@physics_object.rigid_body)
@manager.physics.dynamicsWorld.add_rigid_body(@physics_object.rigid_body, filter.group, filter.mask)
physics_info.collisionFilter = filter
end
|
#set_damping(linear_damping, angular_damping) ⇒ Object
123
124
125
126
127
128
|
# File 'lib/teien/base_object/base_object.rb', line 123
def set_damping(linear_damping, angular_damping)
@physics_object.rigid_body.set_damping(linear_damping, angular_damping)
@physics_info.linear_damping = linear_damping
@physics_info.angular_damping = angular_damping
end
|
#set_gravity(grav) ⇒ Object
119
120
121
|
# File 'lib/teien/base_object/base_object.rb', line 119
def set_gravity(grav)
@physics_object.rigid_body.set_gravity(grav)
end
|
#set_linear_velocity(aVel) ⇒ Object
Set a linear velocity.
Args
- aVel: Vector3D
72
73
74
75
|
# File 'lib/teien/base_object/base_object.rb', line 72
def set_linear_velocity(aVel)
@physics_object.rigid_body.activate(true)
@physics_object.rigid_body.set_linear_velocity(aVel)
end
|
#set_linear_velocity_with_interpolation(vel) ⇒ Object
77
78
79
80
81
|
# File 'lib/teien/base_object/base_object.rb', line 77
def set_linear_velocity_with_interpolation(vel)
ip_vel = (get_linear_velocity() + Vector3D.to_bullet(vel)) / 2
@physics_object.rigid_body.activate(true)
@physics_object.rigid_body.set_linear_velocity(ip_vel)
end
|
#set_max_horizontal_velocity(vel_len) ⇒ Object
Set a max horizontal velocity.
Args
- vel: Vector3D
-
vel is the max velocity. 0 means there is no limit.
102
103
104
|
# File 'lib/teien/base_object/base_object.rb', line 102
def set_max_horizontal_velocity(vel_len)
@physics_object.maxHorizontalVelocity = vel_len
end
|
#set_max_vertical_velocity(vel_le) ⇒ Object
Set a max vertical velocity.
Args
- vel: Vector3D
-
vel is the max velocity. 0 means there is no limit.
110
111
112
|
# File 'lib/teien/base_object/base_object.rb', line 110
def set_max_vertical_velocity(vel_le)
@physics_object.maxVerticalVelocity = vel_len
end
|
#set_position(aPos) ⇒ Object
Set a position.
Args
- aPos: Vector3D
51
52
53
54
55
56
57
58
|
# File 'lib/teien/base_object/base_object.rb', line 51
def set_position(aPos)
@physics_object.transform.set_origin(Bullet::BtVector3.new(aPos.x, aPos.y, aPos.z))
if @physics_object.rigid_body != nil
@physics_object.rigid_body.set_center_of_mass_transform(@physics_object.transform)
end
notify(:set_position, aPos)
end
|
#set_position_with_interpolation(pos) ⇒ Object
60
61
62
63
64
65
66
|
# File 'lib/teien/base_object/base_object.rb', line 60
def set_position_with_interpolation(pos)
ip_pos = (get_position() + Vector3D.to_bullet(pos)) / 2
@physics_object.transform.set_origin(ip_pos)
if @physics_object.rigid_body != nil
@physics_object.rigid_body.set_center_of_mass_transform(@physics_object.transform)
end
end
|
#set_rotation(quad) ⇒ Object
130
131
132
133
134
135
|
# File 'lib/teien/base_object/base_object.rb', line 130
def set_rotation(quad)
@physics_object.rigid_body.activate(true)
@physics_object.transform = @physics_object.rigid_body.get_center_of_mass_transform()
@physics_object.transform.set_rotation(quad)
@physics_object.rigid_body.set_center_of_mass_transform(@physics_object.transform)
end
|
#set_rotation_with_interpolation(quad) ⇒ Object
137
138
139
140
141
142
143
|
# File 'lib/teien/base_object/base_object.rb', line 137
def set_rotation_with_interpolation(quad)
@physics_object.rigid_body.activate(true)
ip_quad = get_rotation().slerp(Quaternion.to_bullet(quad), 0.5)
@physics_object.transform = @physics_object.rigid_body.get_center_of_mass_transform()
@physics_object.transform.set_rotation(ip_quad)
@physics_object.rigid_body.set_center_of_mass_transform(@physics_object.transform)
end
|
151
152
153
154
155
156
|
# File 'lib/teien/base_object/base_object.rb', line 151
def set_world_transform(worldTrans)
@physics_object.transform = Bullet::BtTransform.new(worldTrans)
notify(:set_world_transform, @physics_object.transform)
end
|
#yaw(angle) ⇒ Object
def yaw(angle, relativeTo=Ogre::Node::TS_LOCAL)
235
236
237
|
# File 'lib/teien/base_object/base_object.rb', line 235
def yaw(angle)
rotate(Quaternion.new(Vector3D.new(0, 1.0, 0), angle))
end
|