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
1.3.2