Main Page | Alphabetical List | Compound List | File List | Compound Members | File Members

actor.h

Go to the documentation of this file.
00001 /****************************************************************************************/
00002 /*  ACTOR.H                                                                             */
00003 /*                                                                                      */
00004 /*  Author: Mike Sandige                                                                    */
00005 /*  Description:  Actor interface                                                               */
00006 /*                                                                                      */
00007 /*  The contents of this file are subject to the Genesis3D Public License               */
00008 /*  Version 1.01 (the "License"); you may not use this file except in                   */
00009 /*  compliance with the License. You may obtain a copy of the License at                */
00010 /*  http://www.genesis3d.com                                                            */
00011 /*                                                                                      */
00012 /*  Software distributed under the License is distributed on an "AS IS"                 */
00013 /*  basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See                */
00014 /*  the License for the specific language governing rights and limitations              */
00015 /*  under the License.                                                                  */
00016 /*                                                                                      */
00017 /*  The Original Code is Genesis3D, released March 25, 1999.                            */
00018 /*  Genesis3D Version 1.1 released November 15, 1999                                 */
00019 /*  Copyright (C) 1999 WildTangent, Inc. All Rights Reserved           */
00020 /*                                                                                      */
00021 /****************************************************************************************/
00022 /*   Actor
00023         
00024         This object is designed to support character animation.
00025         There are two basic objects to deal with.  
00026         
00027         Actor Definition (geActor_Def)
00028                 A geActor_Def embodies the geometry (polygon, and bone information), 
00029                 and a library of motions that can be applied to that geometry.
00030 
00031         Actor
00032                 A geActor is an instance of an actor definition.  The definition is used for 
00033                 the geometry, but all additional settings, such as the bone pose, lighting information,
00034                 and cuing information is unique for a geActor.
00035 // GENESIS_PRIVATE_API
00036         An Actor Definition is created either from an existing Actor Definition file, or from scratch by 
00037         first creating a geBody and geMotions and selecting these into an Actor.  If the Actor Definition
00038         is constructed from scratch, the objects selected into it (via SetBody and AddMotion) are
00039         then 'owned' by the actor and will be destroyed along with the Actor when it is destroyed.
00040     Of course, when the Actor is loaded from a file, the Body and Motion it creates as it is
00041         loaded are cleaned up when the Actor is destroyed.
00042 
00043         Once an Actor is created, prepare it for rendering and animating by calling 
00044         Actor_RenderPrep().  This must be called (and it must succeed) before any render or
00045         pose setting functions can be called.
00046 // GENESIS_PUBLIC_API
00047 
00048         There are two ways to use an Actor.
00049         Direct Control
00050                 One method is to directly control the skeleton configuration.  Use _SetPose() to set its 
00051                 skeleton using a geMotion animation.  The pose is positioned in world space relative to the 
00052                 transform given in SetPose().  Whenever a new skeleton pose is required, call _SetPose() 
00053                 to reposition the skeleton for a new point in time. 
00054 
00055                 More complex positioning can be achieved by blending more than one animation.  Use
00056                 _BlendPose() after a _SetPose() to blend the second geMotion into the first.  Additional
00057                 blends can be applied by additional _BlendPose() calls.  Each blend is performed on the
00058                 the existing skeleton (the results of any previous blends).
00059         Cuing
00060                 Another method is to 'cue' up motions that are applied with parameterized blending over time.
00061                 A cued motion takes effect 'now' in time.  The Actor advances in time and repositions itself
00062                 according to its currently cued motions with a call to _AnimationStep().  AnimationStep() 
00063                 redefines what the actor thinks 'now' is.  This causes historical cues to be forgotten, and 
00064                 motions that are no longer valid are cleaned up.  AnimationTestStep() can be used to position 
00065                 the actor for potential queries with its currently cued motions at some arbitrary future time 
00066                 - relative to the last AnimationTestStep() call.  AnimationNudge() applies a given transform 
00067                 'instantly' to the current actor's cue list.  This is usefull for moving the actor as a 
00068                 result of a collision with another object.
00069 
00070         If a motion contains joint information that does not exactly match the Actor's skeleton 
00071         joints, only the joints that match by name are applied.  So a geMotion can be applied to
00072         a portion of the Actor, or a geMotion that has more joint information than the skeleton can
00073         be applied and the extra joint information is ignored.  
00074          
00075         Examples of this:  If the Actor is a biped and has no tail, but the motion is for a 
00076         biped with a tail, the geMotion can be applied, but the tail information will be ignored.
00077         Also if there is a geMotion for only a left arm, it can be applied and it will only affect
00078         the left arm of the Actor, and consequently its left hand and fingers, but no other 
00079         bones that are not children of the affected bones will be changed.
00080 
00081                 
00082 */
00083 #ifndef GE_ACTOR_H
00084 #define GE_ACTOR_H
00085 
00086 #include "genesis.h"                            
00087 #include "basetype.h"
00088 #include "extbox.h"
00089 #include "bitmap.h"
00090 
00091 #include "Motion.h"
00092 
00093 #ifdef GE_WORLD_H
00094 #include "camera.h"
00095 #include "Frustum.h"
00096 #endif
00097 
00098 #include "Body.h"
00099 
00100 #ifdef __cplusplus
00101 extern "C" {
00102 #endif
00103 
00104 // GENESIS_PUBLIC_APIS
00105 
00106 #ifndef GE_ACTOR_ENUMS
00107 #define GE_ACTOR_ENUMS
00108 typedef enum 
00109 {
00110                 GE_ACTOR_BLEND_LINEAR,          // Treats the blending amount as a linear value
00111                 GE_ACTOR_BLEND_HERMITE          // Applies a parametric smoothing curve to the blending amount
00112                                                                         //  so that a linear change in BlendAmount parameters will
00113                                                                         //  result in a smooth (non-linear) change in blending.
00114 } geActor_BlendingType;
00115 
00116 #endif
00117 
00118 typedef struct geActor geActor;                 // an instance of an actor
00119 typedef struct geActor_Def geActor_Def;         // the deinition of an actor's geometry/bone structure
00120 
00121 
00122 // GENESIS_PRIVATE_APIS
00123 
00124 //---------------------------------------------------------------------------------
00125 //   Creation/Destruction functions
00126 //---------------------------------------------------------------------------------
00127         // Create an 'empty' Actor Definition.
00128 GENESISAPI geActor_Def *GENESISCC geActor_DefCreate(void);
00129 
00130         // Create an Actor Definition from a file image.
00131 GENESISAPI geActor_Def *GENESISCC geActor_DefCreateFromFile(geVFile *pFile);
00132 
00133         // Create an additional reference (owner) for the Actor_Definition
00134 GENESISAPI void GENESISCC geActor_DefCreateRef(geActor_Def *pActorDefinition);
00135 
00136         // Destroy a geActor_Def (its geBody and its geMotions)  Actors that rely on this definition become invalid.
00137         // can fail if there are actors still referencing this definition.
00138 GENESISAPI geBoolean GENESISCC geActor_DefDestroy(geActor_Def **pActorDefinition);
00139 
00140         // Create an Actor instance associated with the given Actor Definition 
00141 GENESISAPI geActor *GENESISCC geActor_Create(geActor_Def *ActorDefinition);
00142 
00143         // Create an additional reference (owner) for the Actor
00144 GENESISAPI void GENESISCC geActor_CreateRef(geActor *Actor);
00145 
00146         // Give the Actor Definition a Body.  geActor becomes responsible for its destruction.
00147         // sets up default materials as referenced by the Body.
00148 GENESISAPI geBoolean GENESISCC geActor_SetBody( geActor_Def *ActorDefinition, geBody *geBodyGeometry);
00149 
00150         // Adds a geMotion to the Actor Definition's library.  The ActorDefinition becomes responsible for its destruction.
00151         // returns the library index to the new geMotion.
00152 GENESISAPI geBoolean GENESISCC geActor_AddMotion(geActor_Def *ActorDefinition, geMotion *M, int *Index);
00153 
00154         // Destroy an Actor.  
00155 GENESISAPI geBoolean GENESISCC geActor_Destroy(geActor **pA);
00156 
00157 GENESISAPI geBoolean GENESISCC geActor_DestroyDirect(geActor **pA);
00158 
00159 GENESISAPI geBoolean GENESISCC geActor_DefIsValid(const geActor_Def *A);
00160 GENESISAPI geBoolean GENESISCC geActor_IsValid(const geActor *A);
00161 
00162 // GENESIS_PUBLIC_APIS
00163 //---------------------------------------------------------------------------------
00164 //   Queries 
00165 //---------------------------------------------------------------------------------
00166 // GENESIS_PRIVATE_APIS
00167 
00168         // In general: Objects retuned from Get functions should not not be destroyed. 
00169         // if ownership is desired, call the objects _CreateRef() function to create another owner. 
00170         // (An 'owner' has access to the object regardless of the number of other owners, and 
00171         // an owner must call the object's _Destroy() function to relinquish ownership )
00172 
00173         // Returns the Actor Definition associated with Actor A
00174 GENESISAPI geActor_Def *GENESISCC geActor_GetActorDef(const geActor *A);
00175 
00176         // Writes an existing geActor to a file image.  Returns GE_TRUE on success, GE_FALSE on failure.
00177 GENESISAPI geBoolean GENESISCC geActor_DefWriteToFile(const geActor_Def *A, geVFile *pFile);
00178         
00179         // Returns a geBody pointer from the geActor 
00180 GENESISAPI geBody *GENESISCC geActor_GetBody(const geActor_Def *ActorDefinition);
00181 
00182         // Returns GE_TRUE if the actor definition has a bone named 'Name'
00183 GENESISAPI geBoolean GENESISCC geActor_DefHasBoneNamed(const geActor_Def *Ad, const char *Name );
00184 
00185         // Selects a blending type.  BlendingType only affects the meaning of the 
00186         // BlendAmount parameter for the blend functions.  Can be changed anytime.
00187 GENESISAPI void GENESISCC geActor_SetBlendingType( geActor *A, geActor_BlendingType BlendingType );
00188 
00189 // GENESIS_PUBLIC_APIS
00190 
00191         // Returns the number of geMotions in the geActors geMotion library.
00192 GENESISAPI int GENESISCC geActor_GetMotionCount(const geActor_Def *ActorDefinition);
00193 
00194         // Returns a geMotion pointer from the geActors geMotion library
00195         //   This is an aliased pointer - Not a copy.  Changes to this motion will be reflected
00196         //   in the actor.  Destroying this return motion will confuse the actor.
00197         // Index must be in range [0..geActor_GetMotionCount-1]
00198 GENESISAPI geMotion *GENESISCC geActor_GetMotionByIndex(const geActor_Def *ActorDefinition, int Index );
00199 
00200         // Returns a geMotion pointer from the geActors geMotion library
00201         //   This is an aliased pointer - Not a copy.  Changes to this motion will be reflected
00202         //   in the actor.  Destroying this return motion will confuse the actor.
00203         // if there is no motion that matches the given name, the return value will be NULL
00204 GENESISAPI geMotion *GENESISCC geActor_GetMotionByName(const geActor_Def *ActorDefinition, const char *Name );
00205 
00206         // Returns a motion name given an ActorDef and a motion index.
00207 GENESISAPI const char *GENESISCC geActor_GetMotionName(const geActor_Def *ActorDefinition, int Index );
00208 
00209         // Returns the number of materials for an instance of an actor.
00210 GENESISAPI int GENESISCC geActor_GetMaterialCount(const geActor *A);
00211 
00212         // Returns the current material for an instance of an actor
00213 GENESISAPI geBoolean GENESISCC geActor_GetMaterial(const geActor *Actor, int MaterialIndex,
00214                                                                                 geBitmap **Bitmap, geFloat *Red, geFloat *Green, geFloat *Blue);
00215 
00216         // Allows a material to be overriden in an actor instance
00217 GENESISAPI geBoolean GENESISCC geActor_SetMaterial(geActor *Actor, int MaterialIndex,
00218                                                                                 geBitmap *Bitmap,  geFloat Red,  geFloat Green,  geFloat Blue);
00219 
00220 
00221 
00222         // Gets the current transform for a single bone in A.  (actor space->world space transform)
00223         // with a NULL BoneName, this returns the current 'root' transform
00224 GENESISAPI geBoolean GENESISCC geActor_GetBoneTransform(const geActor *A, const char *BoneName, geXForm3d *Transform);
00225         
00226         // Gets the extent box (axial-aligned bounding box) for a given bone (for the current pose)
00227         // if BoneName is NULL, gets the a general bounding box from the body of the actor if it has been set.
00228 GENESISAPI geBoolean GENESISCC geActor_GetBoneExtBox(const geActor *A,
00229                                                                                  const char *BoneName,geExtBox *ExtBox);
00230 
00231         // Gets the non-axial-aligned bounding box for a given bone (for the current pose)
00232         //  The box is specified by a corner, and
00233         //  a non-normalized orientation transform.  Add DX,DY,DZ components 
00234         //  of the orientation to get other corners of the box
00235         // if BoneName is NULL, gets the a general bounding box from the body of the actor if it has been set.
00236 GENESISAPI geBoolean GENESISCC geActor_GetBoneBoundingBox(const geActor *A,
00237                                                                                                                  const char *BoneName,
00238                                                                                                                  geVec3d *Corner,
00239                                                                                                                  geVec3d *DX,
00240                                                                                                                  geVec3d *DY,
00241                                                                                                                  geVec3d *DZ);
00242 
00243         // Gets the current axial-aligned bounding box for an actor's bone configuration
00244         // takes all bones into account
00245 GENESISAPI geBoolean GENESISCC geActor_GetDynamicExtBox( const geActor *A, geExtBox *ExtBox);
00246         
00247         // Gets an assigned general non changing bounding box from the actor
00248 GENESISAPI geBoolean GENESISCC geActor_GetExtBox(const geActor *A, geExtBox *ExtBox);
00249 
00250         // Sets an assigned general non changing bounding box from the actor
00251 GENESISAPI geBoolean GENESISCC geActor_SetExtBox(geActor *A, const geExtBox *ExtBox,
00252                                         const char *CenterBoxOnThisNamedBone);          // NULL uses root position of actor
00253 
00254         // Gets the rendering hint bounding box from the actor
00255         //   if the RenderHintExtBox is disabled, Enabled is GE_FALSE, and the box returned has zero dimensions, 
00256         //   centered at the root position of the actor.  If the RenderHintExtBox is enabled, Enabled is
00257         //   GE_TRUE, and the box returned is the one set with _SetRenderHintExtBox, offset by the 
00258         //   bone position of the bone named in _SetRenderHintExtBox().
00259 GENESISAPI geBoolean GENESISCC geActor_GetRenderHintExtBox(const geActor *A, geExtBox *Box, geBoolean *Enabled);
00260 
00261         // Sets a rendering hint bounding box from the actor.  Increases performance by 
00262         //   enabling the rendering of the actor to occur only if the box is visible.
00263         //   If the box is not visible, a detailed analysis of the actor's current geometry is avoided.
00264         //   This does allow errors to occur: 
00265         //   If the actor has a bit of geometry that extends outside this box for some
00266         //   animation, that extended geometry may not be drawn, if the box if off-screen.   
00267         //   If the render hint box is not set, the engine will make no conservative assumptions 
00268         //   about the visibility of an actor - it will always be drawn if any portion of it is
00269         //   visible.
00270         //   To attach the box to the 'root' bone, pass NULL for CenterBoxOnThisNamedBone
00271         //   For disabling the hint box: (disabled is default) pass Box with zero mins and maxs
00272 GENESISAPI geBoolean GENESISCC geActor_SetRenderHintExtBox(geActor *A, const geExtBox *Box,
00273                                                                                                 const char *CenterBoxOnThisNamedBone );
00274 
00275 
00276         // Returns the pointer which was set with geActor_SetUserData.  NULL if not set.
00277 GENESISAPI void *GENESISCC geActor_GetUserData(const geActor *A);
00278 
00279         // Sets the actors user data pointer to the given value.  For clients only.
00280 GENESISAPI void GENESISCC geActor_SetUserData(geActor *A, void *UserData);
00281 
00282 
00283 //--------------------------------------------------------------------------------
00284 //   Posing and Rendering
00285 //--------------------------------------------------------------------------------
00286 
00287 // GENESIS_PRIVATE_APIS
00288 
00289 #ifdef GE_WORLD_H
00290         // Prepares the geActor for rendering and posing.  Call Once once the actor is fully created.
00291         // Must be called prior to render/pose/setworldtransform 
00292 geBoolean GENESISCC geActor_RenderPrep( geActor *A, geWorld *World);
00293 
00294         // Draws the geActor.  (RenderPrep must be called first)
00295 geBoolean GENESISCC geActor_RenderThroughFrustum(const geActor *A, geEngine *Engine, geWorld *World, geCamera *Camera, Frustum_Info *FInfo);
00296 geBoolean GENESISCC geActor_Render(const geActor *A, geEngine *Engine, geWorld *World, geCamera *Camera);
00297 #endif
00298 
00299 // GENESIS_PUBLIC_APIS
00300 
00301         // Poses the actor in its default pose
00302         // Transform is where to position the root for this pose.
00303         //  if Transform is NULL, the root for the pose is assumed to be the root of the actor.
00304 GENESISAPI void GENESISCC geActor_ClearPose(geActor *A, const geXForm3d *Transform);
00305 
00306         // Poses the actor using given motion M at a time offset of Time
00307         // Transform is where to position the root for this pose.
00308         //  if Transform is NULL, the root for the pose is assumed to be the root of the actor.
00309 GENESISAPI void GENESISCC geActor_SetPose(geActor *A, const geMotion *Motion, geFloat Time, const geXForm3d *Transform);
00310 
00311         // Blends the current pose of the geActor with 
00312         //  a new pose using motion M at a time offset of Time
00313         // A BlendAmount of 0 will result in the existing pose, A BlendAmount of 1 will
00314         // result in the new pose from M.  The BlendingType set by _SetBlendingType() determines
00315         // the blending function between 0 and 1
00316         // Transform is where to position the root for this pose.
00317         //  if Transform is NULL, the root for the pose is assumed to be the root of the actor.
00318 GENESISAPI void GENESISCC geActor_BlendPose(geActor *A, const geMotion *Motion, geFloat Time,
00319                                                 const geXForm3d *Transform, geFloat BlendAmount);
00320 
00321 
00322 GENESISAPI geBoolean GENESISCC geActor_GetBoneAttachment(const geActor *A, const char *BoneName, geXForm3d *Transform);
00323 GENESISAPI geBoolean GENESISCC geActor_SetBoneAttachment(geActor *A, const char *BoneName, geXForm3d *Transform);
00324 
00325 // GENESIS_PRIVATE_APIS
00326 
00327 GENESISAPI geBoolean GENESISCC geActor_Attach( geActor *Slave,  const char *SlaveBoneName,
00328                                                 const geActor *Master, const char *MasterBoneName, 
00329                                                 const geXForm3d *Attachment);
00330 
00331 GENESISAPI void GENESISCC geActor_Detach(geActor *Slave);
00332 
00333 //Environmental mapping...
00334 GENESISAPI void GENESISCC geActor_SetEnvironOptions( geActor *A, geEnvironmentOptions *opts );
00335 
00336 GENESISAPI geEnvironmentOptions GENESISCC geActor_GetEnvironOptions( geActor *A );
00337 
00338 // GENESIS_PUBLIC_APIS
00339 GENESISAPI geBoolean GENESISCC geActor_SetLightingOptions(geActor *A,
00340                                                                         geBoolean UseFillLight,                         // GE_TRUE or GE_FALSE
00341                                                                         const geVec3d *FillLightNormal,         // normalized vector
00342                                                                         geFloat FillLightRed,                           // 0 .. 255
00343                                                                         geFloat FillLightGreen,                         // 0 .. 255
00344                                                                         geFloat FillLightBlue,                          // 0 .. 255
00345                                                                         geFloat AmbientLightRed,                        // 0 .. 255
00346                                                                         geFloat AmbientLightGreen,                      // 0 .. 255
00347                                                                         geFloat AmbientLightBlue,                       // 0 .. 255
00348                                                                         geBoolean AmbientLightFromFloor,        // GE_TRUE or GE_FALSE
00349                                                                         int MaximumDynamicLightsToUse,          // 0 for none
00350                                                                         const char *LightReferenceBoneName, //NULL for root
00351                                                                         geBoolean PerBoneLighting);                     
00352                                                                         // if GE_TRUE, then dynamic lighting attenuation and direction is computed
00353                                                                         // for each bone.  if GE_FALSE, then the computations are relative to the 
00354                                                                         // single bone named by the LightReferenceBoneName
00355 
00356 GENESISAPI geBoolean GENESISCC geActor_GetLightingOptions(const geActor *A,
00357                                                                         geBoolean *UseFillLight,                        // GE_TRUE or GE_FALSE
00358                                                                         geVec3d *FillLightNormal,                       // normalized vector
00359                                                                         geFloat *FillLightRed,                          // 0 .. 255
00360                                                                         geFloat *FillLightGreen,                        // 0 .. 255
00361                                                                         geFloat *FillLightBlue,                         // 0 .. 255
00362                                                                         geFloat *AmbientLightRed,                       // 0 .. 255
00363                                                                         geFloat *AmbientLightGreen,                     // 0 .. 255
00364                                                                         geFloat *AmbientLightBlue,                      // 0 .. 255
00365                                                                         geBoolean *UseAmbientLightFromFloor,// GE_TRUE or GE_FALSE
00366                                                                         int *MaximumDynamicLightsToUse,         
00367                                                                         const char **LightReferenceBoneName,
00368                                                                         geBoolean *PerBoneLighting);            // NULL for root
00369 
00370 
00371 GENESISAPI void GENESISCC geActor_SetScale(geActor *A, geFloat ScaleX,geFloat ScaleY,geFloat ScaleZ);
00372 
00373 // LWM_ACTOR_RENDERING:
00374 GENESISAPI geFloat GENESISCC geActor_GetAlpha(const geActor *A) ;
00375 // LWM_ACTOR_RENDERING:
00376 GENESISAPI void GENESISCC geActor_SetAlpha(geActor *A, geFloat Alpha) ;
00377 
00378 GENESISAPI geBoolean GENESISCC geActor_GetStaticLightingOptions(const geActor *Actor,   geBoolean *UseAmbientLightFromStaticLights,     geBoolean *TestRayCollision,    int *MaxStaticLightsToUse       );
00379 GENESISAPI geBoolean GENESISCC geActor_SetStaticLightingOptions(geActor    *A,
00380    geBoolean AmbientLightFromStaticLights,
00381    geBoolean TestRayCollision,
00382    int MaxStaticLightsToUse
00383    );
00384 
00385 GENESISAPI geBoolean GENESISCC geActor_SetShadow(geActor *A, 
00386                                                 geBoolean DoShadow, 
00387                                                 geFloat Radius,
00388                                                 const geBitmap *ShadowMap,
00389                                                 const char * BoneName);
00390 
00391 //  Animation Cuing API:
00392 // high level Actor animation:  The principle is that motions can be applied to an actor
00393 // and the actor will keep track of which motions are currently appropriate.  Call 
00394 //      _AnimationStep() to compute a new pose for an elapsed time interval.  The new pose
00395 //  will take into account all motions that are 'currently' cued up to be set or blended.
00396 
00397 
00398         // cue up a new motion.  The motion begins at the current time.  The motion can be 
00399         // blended in or out over time and time scaled.  If the return value is GE_FALSE, the 
00400         // animation was not cued up (failure implies Actor is incompletely initialized).
00401 GENESISAPI geBoolean GENESISCC geActor_AnimationCue( 
00402                 geActor *A,                                             // actor to apply animation to
00403                 geMotion *Motion,                               // motion to Cue
00404                 geFloat TimeScaleFactor,                // time scale to apply to cued motion
00405                 geFloat TimeIntoMotion,                 // time offset to begin motion with (Not TimeScaled)
00406                 geFloat BlendTime,                              // time to apply a blend. 
00407                 geFloat BlendFromAmount,                // blend value at current time
00408                 geFloat BlendToAmount,                  // blend value after BlendTime time has elapsed
00409                 const geXForm3d *MotionTransform);      // local transform to adjust motion by (NULL implies NO transform)
00410 
00411         // removes the last animation cue that was cued up.  Can be called repeatedly to successively
00412         // remove older and older cues.  Returns GE_TRUE when a cue was removed, GE_FALSE if there 
00413         // are no cues to remove.
00414 GENESISAPI geBoolean GENESISCC geActor_AnimationRemoveLastCue( geActor *A );
00415 
00416         // applies a time step to actor A.  re-poses the actor according to all currently applicable
00417         // Animation Cues. (failure implies Actor is incompletely initialized)
00418 GENESISAPI geBoolean GENESISCC geActor_AnimationStep(geActor *A, geFloat DeltaTime );
00419 
00420         // applies a 'temporary' time step to actor A.  re-poses the actor according to all 
00421         // currently appliciable cues.  (failure implies Actor is incompletely initialized)
00422         // DeltaTime is always relative to the the last AnimationStep()
00423 GENESISAPI geBoolean GENESISCC geActor_AnimationTestStep(geActor *A, geFloat DeltaTime);
00424 
00425         // optimized version of geActor_AnimationStep.  Limits calculations to the bone named BoneName, and it's 
00426         // parents.  BoneName will be correctly computed, but the other bones will be wrong.  This is usefull for 
00427         // moving and animating an actor that is not actually visible.  Rendering and queries will be 'optimized'
00428         // until the actor is given any pose or animation that doesn't go through geActor_AnimationStepBoneOptimized() or 
00429         //  geActor_AnimationTestStepBoneOptimized().  BoneName can be NULL to compute only 'root' bone.
00430 GENESISAPI geBoolean GENESISCC geActor_AnimationStepBoneOptimized(geActor *A, geFloat DeltaTime, const char *BoneName );
00431 
00432         // optimized version of geActor_AnimationTestStep.  Limits calculations to the bone named BoneName, and it's 
00433         // parents.  BoneName will be correctly computed, but the other bones will be wrong.  This is usefull for 
00434         // moving and animating an actor that is not actually visible.  Rendering and queries will be 'optimized'
00435         // until the actor is given any pose or animation that doesn't go through geActor_AnimationStepBoneOptimized() or 
00436         //  geActor_AnimationTestStepBoneOptimized().  BoneName can be NULL to compute only 'root' bone.
00437 GENESISAPI geBoolean GENESISCC geActor_AnimationTestStepBoneOptimized(geActor *A, geFloat DeltaTime, const char *BoneName);
00438 
00439 
00440         // applies an 'immediate' offset to the animated actor
00441 GENESISAPI geBoolean GENESISCC geActor_AnimationNudge(geActor *A, geXForm3d *Offset);
00442 
00443 
00444 GENESISAPI geBoolean GENESISCC geActor_GetAnimationEvent(geActor *A,                                            
00445         const char **ppEventString);            // Return data, if return value is GE_TRUE
00446 
00447         // returns number of actors that are currently created.
00448 GENESISAPI int GENESISCC geActor_GetCount(void);
00449 
00450 //      eaa3 07/21/2000 Mods for detailed collision detection
00451 
00452 GENESISAPI geBoolean GENESISCC geActor_GetBoneExtBoxByIndex(
00453         const geActor *A, 
00454         int BoneIndex,
00455         geExtBox *ExtBox);
00456 
00457 GENESISAPI geBoolean GENESISCC geActor_GetBoneTransformByIndex(const geActor *A, int BoneIndex, geXForm3d *Transform);
00458 
00459 GENESISAPI int geActor_GetBoneCount(const geActor *A);
00460 
00461 //MRB BEGIN     
00462 // Unlike geActor_GetExtBox, this gets the bounding box in non-world coordinates.       
00463 // Whatever you put in with geActor_SetExtBox, you get out with this function.
00464 GENESISAPI void GENESISCC geActor_GetNonWorldExtBox(const geActor *A, geExtBox *ExtBox);
00465 GENESISAPI void GENESISCC geActor_GetPosition(const geActor *A, geVec3d *Pos);
00466 //MRB END
00467 
00468 // GENESIS_PRIVATE_APIS
00469         // call setscale and setshadow after preparing the actor for rendering (renderprep)
00470 
00471 
00472 #ifdef __cplusplus
00473 }
00474 #endif
00475 
00476 
00477 #endif
00478 

Generated on Tue Sep 30 12:35:15 2003 for GTestAndEngine by doxygen 1.3.2