- fixed errors with bge epydocs
[blender.git] / source / gameengine / PyDoc / KX_GameObject.py
1 # $Id$
2 # Documentation for game objects
3
4 # from SCA_IObject import *
5 # from SCA_ISensor import *
6 # from SCA_IController import *
7 # from SCA_IActuator import *
8
9
10 class KX_GameObject: # (SCA_IObject)
11         """
12         All game objects are derived from this class.
13         
14         Properties assigned to game objects are accessible as attributes of this class.
15
16         @ivar name: The object's name. (Read only)
17                 - note: Currently (Blender 2.49) the prefix "OB" is added to all objects name. This may change in blender 2.5.
18         @type name: string.
19         @ivar mass: The object's mass (provided the object has a physics controller). Read only.
20         @type mass: float
21         @ivar parent: The object's parent object. (Read only)
22         @type parent: L{KX_GameObject} or None
23         @ivar visible: visibility flag.
24                 - note: Game logic will still run for invisible objects.
25         @type visible: boolean
26         @ivar position: The object's position. 
27         @type position: list [x, y, z]
28         @ivar orientation: The object's orientation. 3x3 Matrix. You can also write a Quaternion or Euler vector.
29         @type orientation: 3x3 Matrix [[float]]
30         @ivar scaling: The object's scaling factor. list [sx, sy, sz]
31         @type scaling: list [sx, sy, sz]
32         @ivar timeOffset: adjust the slowparent delay at runtime.
33         @type timeOffset: float
34         @ivar state: the game object's state bitmask.
35         @type state: int
36         @ivar meshes: a list meshes for this object.
37                 - note: Most objects use only 1 mesh.
38                 - note: Changes to this list will not update the KX_GameObject.
39         @type meshes: list of L{KX_MeshProxy}
40         @ivar sensors: a list of L{SCA_ISensor} objects.
41                 - note: This attribute is experemental and may be removed (but probably wont be).
42                 - note: Changes to this list will not update the KX_GameObject.
43         @type sensors: list
44         @ivar controllers: a list of L{SCA_IController} objects.
45                 - note: This attribute is experemental and may be removed (but probably wont be).
46                 - note: Changes to this list will not update the KX_GameObject.
47         @type controllers: list of L{SCA_ISensor}.
48         @ivar actuators: a list of L{SCA_IActuator} objects.
49                 - note: This attribute is experemental and may be removed (but probably wont be).
50                 - note: Changes to this list will not update the KX_GameObject.
51         @type actuators: list
52         """
53         def endObject(visible):
54                 """
55                 Delete this object, can be used inpace of the EndObject Actuator.
56                 The actual removal of the object from the scene is delayed.
57                 """     
58         def replaceMesh(mesh_name):
59                 """
60                 Replace the mesh of this object with a new mesh. This works the same was as the actuator.
61                 @type mesh_name: string
62                 """     
63         def getVisible():
64                 """
65                 Gets the game object's visible flag. (B{deprecated})
66                 
67                 @rtype: boolean
68                 """     
69         def setVisible(visible, recursive):
70                 """
71                 Sets the game object's visible flag.
72                 
73                 @type visible: boolean
74                 @type recursive: boolean
75                 @param recursive: optional argument to set all childrens visibility flag too.
76                 """
77         def getState():
78                 """
79                 Gets the game object's state bitmask. (B{deprecated})
80                 
81                 @rtype: int
82                 @return: the objects state.
83                 """     
84         def setState(state):
85                 """
86                 Sets the game object's state flag. (B{deprecated}).
87                 The bitmasks for states from 1 to 30 can be set with (1<<0, 1<<1, 1<<2 ... 1<<29) 
88                 
89                 @type state: integer
90                 """
91         def setPosition(pos):
92                 """
93                 Sets the game object's position. (B{deprecated})
94                 Global coordinates for root object, local for child objects.
95                 
96                 
97                 @type pos: [x, y, z]
98                 @param pos: the new position, in local coordinates.
99                 """
100         def setWorldPosition(pos):
101                 """
102                 Sets the game object's position in world coordinates regardless if the object is root or child.
103                 
104                 @type pos: [x, y, z]
105                 @param pos: the new position, in world coordinates.
106                 """
107         def getPosition():
108                 """
109                 Gets the game object's position. (B{deprecated})
110                 
111                 @rtype: list [x, y, z]
112                 @return: the object's position in world coordinates.
113                 """
114         def setOrientation(orn):
115                 """
116                 Sets the game object's orientation. (B{deprecated})
117                 
118                 @type orn: 3x3 rotation matrix, or Quaternion.
119                 @param orn: a rotation matrix specifying the new rotation.
120                 @note: When using this matrix with Blender.Mathutils.Matrix() types, it will need to be transposed.
121                 """
122         def alignAxisToVect(vect, axis):
123                 """
124                 Aligns any of the game object's axis along the given vector.
125                 
126                 @type vect: 3d vector.
127                 @param vect: a vector to align the axis.
128                 @type axis: integer.
129                 @param axis:The axis you want to align
130                                         - 0: X axis
131                                         - 1: Y axis
132                                         - 2: Z axis (default) 
133                 """
134         def getAxisVect(vect):
135                 """
136                 Returns the axis vector rotates by the objects worldspace orientation.
137                 This is the equivalent if multiplying the vector by the orientation matrix.
138                 
139                 @type vect: 3d vector.
140                 @param vect: a vector to align the axis.
141                 @rtype: 3d vector.
142                 @return: The vector in relation to the objects rotation.
143
144                 """
145         def getOrientation():
146                 """
147                 Gets the game object's orientation. (B{deprecated})
148                 
149                 @rtype: 3x3 rotation matrix
150                 @return: The game object's rotation matrix
151                 @note: When using this matrix with Blender.Mathutils.Matrix() types, it will need to be transposed.
152                 """
153         def applyMovement(movement, local = 0):
154                 """
155                 Sets the game object's movement.
156                 
157                 @type movement: 3d vector.
158                 @param movement: movement vector.
159                 @type local: boolean
160                 @param local: - False: you get the "global" movement ie: relative to world orientation (default).
161                               - True: you get the "local" movement ie: relative to object orientation.
162                 """     
163         def applyRotation(rotation, local = 0):
164                 """
165                 Sets the game object's rotation.
166                 
167                 @type rotation: 3d vector.
168                 @param rotation: rotation vector.
169                 @type local: boolean
170                 @param local: - False: you get the "global" rotation ie: relative to world orientation (default).
171                                           - True: you get the "local" rotation ie: relative to object orientation.
172                 """     
173         def applyForce(force, local = 0):
174                 """
175                 Sets the game object's force.
176                 
177                 This requires a dynamic object.
178                 
179                 @type force: 3d vector.
180                 @param force: force vector.
181                 @type local: boolean
182                 @param local: - False: you get the "global" force ie: relative to world orientation (default).
183                                           - True: you get the "local" force ie: relative to object orientation.
184                 """     
185         def applyTorque(torque, local = 0):
186                 """
187                 Sets the game object's torque.
188                 
189                 This requires a dynamic object.
190                 
191                 @type torque: 3d vector.
192                 @param torque: torque vector.
193                 @type local: boolean
194                 @param local: - False: you get the "global" torque ie: relative to world orientation (default).
195                                           - True: you get the "local" torque ie: relative to object orientation.
196                 """
197         def getLinearVelocity(local = 0):
198                 """
199                 Gets the game object's linear velocity.
200                 
201                 This method returns the game object's velocity through it's centre of mass,
202                 ie no angular velocity component.
203                 
204                 @type local: boolean
205                 @param local: - False: you get the "global" velocity ie: relative to world orientation (default).
206                               - True: you get the "local" velocity ie: relative to object orientation.
207                 @rtype: list [vx, vy, vz]
208                 @return: the object's linear velocity.
209                 """
210         def setLinearVelocity(velocity, local = 0):
211                 """
212                 Sets the game object's linear velocity.
213                 
214                 This method sets game object's velocity through it's centre of mass,
215                 ie no angular velocity component.
216                 
217                 This requires a dynamic object.
218                 
219                 @type velocity: 3d vector.
220                 @param velocity: linear velocity vector.
221                 @type local: boolean
222                 @param local: - False: you get the "global" velocity ie: relative to world orientation (default).
223                               - True: you get the "local" velocity ie: relative to object orientation.
224                 """
225         def getAngularVelocity(local = 0):
226                 """
227                 Gets the game object's angular velocity.
228                 
229                 @type local: boolean
230                 @param local: - False: you get the "global" velocity ie: relative to world orientation (default).
231                               - True: you get the "local" velocity ie: relative to object orientation.
232                 @rtype: list [vx, vy, vz]
233                 @return: the object's angular velocity.
234                 """
235         def setAngularVelocity(velocity, local = 0):
236                 """
237                 Sets the game object's angular velocity.
238                 
239                 This requires a dynamic object.
240                 
241                 @type velocity: 3d vector.
242                 @param velocity: angular velocity vector.
243                 @type local: boolean
244                 @param local: - False: you get the "global" velocity ie: relative to world orientation (default).
245                               - True: you get the "local" velocity ie: relative to object orientation.
246                 """
247         def getVelocity(point):
248                 """
249                 Gets the game object's velocity at the specified point.
250                 
251                 Gets the game object's velocity at the specified point, including angular
252                 components.
253                 
254                 @type point: list [x, y, z]
255                 @param point: the point to return the velocity for, in local coordinates. (optional: default = [0, 0, 0])
256                 @rtype: list [vx, vy, vz]
257                 @return: the velocity at the specified point.
258                 """
259         def getMass():
260                 """
261                 Gets the game object's mass. (B{deprecated})
262                 
263                 @rtype: float
264                 @return: the object's mass.
265                 """
266         def getReactionForce():
267                 """
268                 Gets the game object's reaction force.
269                 
270                 The reaction force is the force applied to this object over the last simulation timestep.
271                 This also includes impulses, eg from collisions.
272                 
273                 @rtype: list [fx, fy, fz]
274                 @return: the reaction force of this object.
275                 """
276         def applyImpulse(point, impulse):
277                 """
278                 Applies an impulse to the game object.
279                 
280                 This will apply the specified impulse to the game object at the specified point.
281                 If point != getPosition(), applyImpulse will also change the object's angular momentum.
282                 Otherwise, only linear momentum will change.
283                 
284                 @type point: list [x, y, z]
285                 @param point: the point to apply the impulse to (in world coordinates)
286                 """
287         def suspendDynamics():
288                 """
289                 Suspends physics for this object.
290                 """
291         def restoreDynamics():
292                 """
293                 Resumes physics for this object.
294                 @Note: The objects linear velocity will be applied from when the dynamics were suspended.
295                 """
296         def enableRigidBody():
297                 """
298                 Enables rigid body physics for this object.
299                 
300                 Rigid body physics allows the object to roll on collisions.
301                 @Note: This is not working with bullet physics yet.
302                 """
303         def disableRigidBody():
304                 """
305                 Disables rigid body physics for this object.
306                 @Note: This is not working with bullet physics yet. The angular is removed but rigid body physics can still rotate it later.
307                 """
308         def getParent():
309                 """
310                 Gets this object's parent. (B{deprecated})
311                 
312                 @rtype: L{KX_GameObject}
313                 @return: this object's parent object, or None if this object has no parent.
314                 """
315         def setParent(parent):
316                 """
317                 Sets this object's parent.
318                 
319                 @type parent: L{KX_GameObject}
320                 @param parent: new parent object.
321                 """
322         def removeParent():
323                 """
324                 Removes this objects parent.
325                 """
326         def getChildren():
327                 """
328                 Return a list of immediate children of this object.
329                 @rtype: list
330                 @return: a list of all this objects children.
331                 """
332         def getChildrenRecursive():
333                 """
334                 Return a list of children of this object, including all their childrens children.
335                 @rtype: list
336                 @return: a list of all this objects children recursivly.
337                 """
338         def getMesh(mesh):
339                 """
340                 Gets the mesh object for this object.
341                 
342                 @type mesh: integer
343                 @param mesh: the mesh object to return (optional: default mesh = 0)
344                 @rtype: L{KX_MeshProxy}
345                 @return: the first mesh object associated with this game object, or None if this object has no meshs.
346                 """
347         def getPhysicsId():
348                 """
349                 Returns the user data object associated with this game object's physics controller.
350                 """
351         def getPropertyNames():
352                 """
353                 Gets a list of all property names.
354                 @rtype: list
355                 @return: All property names for this object.
356                 """
357         def getDistanceTo(other):
358                 """
359                 Returns the distance to another object or point.
360                 
361                 @param other: a point or another L{KX_GameObject} to measure the distance to.
362                 @type other: L{KX_GameObject} or list [x, y, z]
363                 @rtype: float
364                 """
365         def getVectTo(other):
366                 """
367                 Returns the vector and the distance to another object or point.
368                 The vector is normalized unless the distance is 0, in which a NULL vector is returned.
369                 
370                 @param other: a point or another L{KX_GameObject} to get the vector and distance to.
371                 @type other: L{KX_GameObject} or list [x, y, z]
372                 @rtype: 3-tuple (float, 3-tuple (x,y,z), 3-tuple (x,y,z))
373                 @return: (distance, globalVector(3), localVector(3))
374                 """
375         def rayCastTo(other,dist,prop):
376                 """
377                 Look towards another point/object and find first object hit within dist that matches prop.
378
379                 The ray is always casted from the center of the object, ignoring the object itself.
380                 The ray is casted towards the center of another object or an explicit [x,y,z] point.
381                 Use rayCast() if you need to retrieve the hit point 
382
383                 @param other: [x,y,z] or object towards which the ray is casted
384                 @type other: L{KX_GameObject} or 3-tuple
385                 @param dist: max distance to look (can be negative => look behind); 0 or omitted => detect up to other
386                 @type dist: float
387                 @param prop: property name that object must have; can be omitted => detect any object
388                 @type prop: string
389                 @rtype: L{KX_GameObject}
390                 @return: the first object hit or None if no object or object does not match prop
391                 """
392         def rayCast(objto,objfrom,dist,prop,face,xray,poly):
393                 """
394                 Look from a point/object to another point/object and find first object hit within dist that matches prop.
395                 if poly is 0, returns a 3-tuple with object reference, hit point and hit normal or (None,None,None) if no hit.
396                 if poly is 1, returns a 4-tuple with in addition a L{KX_PolyProxy} as 4th element.
397                 
398                 Ex::
399                         # shoot along the axis gun-gunAim (gunAim should be collision-free)
400                         ob,point,normal = gun.rayCast(gunAim,None,50)
401                         if ob:
402                                 # hit something
403
404                 Notes:                          
405                 The ray ignores the object on which the method is called.
406                 It is casted from/to object center or explicit [x,y,z] points.
407                 
408                 The face paremeter determines the orientation of the normal:: 
409                   0 => hit normal is always oriented towards the ray origin (as if you casted the ray from outside)
410                   1 => hit normal is the real face normal (only for mesh object, otherwise face has no effect)
411                   
412                 The ray has X-Ray capability if xray parameter is 1, otherwise the first object hit (other than self object) stops the ray.
413                 The prop and xray parameters interact as follow::
414                     prop off, xray off: return closest hit or no hit if there is no object on the full extend of the ray.
415                     prop off, xray on : idem.
416                     prop on,  xray off: return closest hit if it matches prop, no hit otherwise.
417                     prop on,  xray on : return closest hit matching prop or no hit if there is no object matching prop on the full extend of the ray.
418                 The L{KX_PolyProxy} 4th element of the return tuple when poly=1 allows to retrieve information on the polygon hit by the ray.
419                 If there is no hit or the hit object is not a static mesh, None is returned as 4th element. 
420                 
421                 The ray ignores collision-free objects and faces that dont have the collision flag enabled, you can however use ghost objects.
422
423                 @param objto: [x,y,z] or object to which the ray is casted
424                 @type objto: L{KX_GameObject} or 3-tuple
425                 @param objfrom: [x,y,z] or object from which the ray is casted; None or omitted => use self object center
426                 @type objfrom: L{KX_GameObject} or 3-tuple or None
427                 @param dist: max distance to look (can be negative => look behind); 0 or omitted => detect up to to
428                 @type dist: float
429                 @param prop: property name that object must have; can be omitted => detect any object
430                 @type prop: string
431                 @param face: normal option: 1=>return face normal; 0 or omitted => normal is oriented towards origin
432                 @type face: int
433                 @param xray: X-ray option: 1=>skip objects that don't match prop; 0 or omitted => stop on first object
434                 @type xray: int
435                 @param poly: polygon option: 1=>return value is a 4-tuple and the 4th element is a L{KX_PolyProxy}
436                 @type poly: int
437                 @rtype:    3-tuple (L{KX_GameObject}, 3-tuple (x,y,z), 3-tuple (nx,ny,nz))
438                         or 4-tuple (L{KX_GameObject}, 3-tuple (x,y,z), 3-tuple (nx,ny,nz), L{KX_PolyProxy})
439                 @return: (object,hitpoint,hitnormal) or (object,hitpoint,hitnormal,polygon)
440                          If no hit, returns (None,None,None) or (None,None,None,None)
441                          If the object hit is not a static mesh, polygon is None
442                 """
443
444