/********************************************************************* *< FILE: bipedapi.h DESCRIPTION: These are functions that are exported in biped.dlc CREATED BY: Ravi Karra HISTORY: Created 21 June 1999 Modified July 2002 by Michael Zyracki *> Copyright (c) 2002 All Rights Reserved. **********************************************************************/ #ifndef __BIPEDAPI__ #define __BIPEDAPI__ #include "BipExp.h" // Interfaces -work similarly to the biped export interface #define I_BIPMASTER 0x9165 #define I_BIPFOOTSTEP 0x9166 #define GetBipMasterInterface(anim) ((IBipMaster*)(anim)->GetInterface(I_BIPMASTER)) #define GetBipFSInterface(anim) ((IBipFootStep*)(anim)->GetInterface(I_BIPFOOTSTEP)) // Biped modes #define BMODE_FIGURE (1<<0) #define BMODE_FOOTSTEP (1<<1) #define BMODE_MOTIONFLOW (1<<2) #define BMODE_BUFFER (1<<3) #define BMODE_BENDLINKS (1<<4) #define BMODE_RUBBERBAND (1<<5) #define BMODE_SCALESTRIDE (1<<6) #define BMODE_INPLACE (1<<7) #define BMODE_INPLACE_X (1<<8) #define BMODE_INPLACE_Y (1<<9) #define BMODE_MIXER (1<<10) #define BMODE_MOVEALL (1<<11) #define BMODE_ALL (BMODE_FIGURE|BMODE_FOOTSTEP|BMODE_MOTIONFLOW| \ BMODE_BUFFER|BMODE_BENDLINKS|BMODE_RUBBERBAND| \ BMODE_SCALESTRIDE|BMODE_INPLACE|BMODE_MIXER|BMODE_MOVEALL) // Display settings #define BDISP_BONES (1<<0) #define BDISP_OBJECTS (1<<1) #define BDISP_FOOTSTEPS (1<<2) #define BDISP_FOOTSTEPNUM (1<<3) #define BDISP_TRAJ (1<<4) // Biped Gait Flags #define WALKGAIT 1 #define RUNGAIT 2 #define JUMPGAIT 3 //Copy/Paste types #define COPY_POSTURE 0 #define COPY_POSE 1 #define COPY_TRACK 2 // Body types #define BTYPE_SKELETON 0 #define BTYPE_MALE 1 #define BTYPE_FEMALE 2 #define BTYPE_CLASSIC 3 #define NUMPIVOTS 27 // Max number of pivot points that can exiss for an object class IBipMaster; class IMoFlow; class IMixer; class MocapManager; class MixerManager; class MultFprintParams; // Create a new biped with the given options BIPExport IBipMaster* CreateNewBiped(float height, float angle, const Point3& wpos, BOOL arms=TRUE, BOOL triPelvis=TRUE, int nnecklinks=1, int nspinelinks=4, int nleglinks=3, int ntaillinks=0, int npony1links=0, int npony2links=0, int numfingers=5, int nfinglinks=3, int numtoes=5, int ntoelinks=3, float ankleAttach=0.2, BOOL prop1exists = FALSE,BOOL prop2exists = FALSE, BOOL prop3exists = FALSE, int forearmTwistLinks = 0); // The ticks per frame used by the biped (Currently same as GetTicksPerFrame()). BIPExport int BipGetTicksPerFrame(); #define MB_FSJUMP 0 #define MB_FFMODE 1 #define MB_RCNTFIG 2 bool GetMsgBoxStatus(int which); void SetMsgBoxStatus(int which, bool hide); // Global object that contains the Mocap Interface extern BIPExport MocapManager TheMocapManager; // Global object that contains the Mixer Interface extern BIPExport MixerManager TheMixerManager; //structs for loading and saving subanim controllers in .bip files. post cs4.2 change //Note that the type is pos = 0, rot = 1, scale = 2 struct SaveSubAnimInfo { INode *node; int type; }; struct LoadSubAnimInfo { TCHAR name[256]; int type; }; // Interface into the biped master controller class IBipMaster { public: // Track selection, only work when the UI is showing up in command panel. The #defines are in tracks.h virtual void SetTrackSelection(int track)=0; virtual int GetTrackSelection()=0; // File I/O methods //These functions pop-up the dialog for file selection. virtual void SaveBipFileDlg() = 0; virtual void LoadBipFileDlg() = 0; virtual int SaveFigfile (TCHAR *fname)=0; virtual int SaveStpfile (TCHAR *fname)=0; //These functions don't pop-up a dialog for I/O virtual int SaveBipfile(TCHAR *fname, BOOL SaveListCntrls,BOOL SaveMaxObjects,Tab *selectedControlers =NULL, Tab *selectedNodes = NULL) = 0; virtual int SaveBipfileSegment(TCHAR *filenamebuf,int StartSeg,int EndSeg,int SegKeyPerFrame, BOOL SaveListCntrls, BOOL SaveMaxObjects,Tab *selectedControlers =NULL, Tab *selectedNodes = NULL) = 0; virtual int LoadFigfile (TCHAR *fname, BOOL redraw = false, BOOL msgs = false)=0; virtual int LoadBipStpfile(TCHAR *fname, BOOL redraw, BOOL msgs, BOOL MatchFile = false, BOOL ZeroHgt = false, BOOL loadMaxObjects = false, BOOL promptForDuplicates = false, BOOL retargetHeight = false, BOOL retargetLimbSizes = false, BOOL scaleIKObjectSize = false, BOOL loadSubAnimControllers = false,Tab *selectedNodes = NULL, Tab *selectedControllers = NULL) =0; virtual int LoadMocapfile (TCHAR *fname, BOOL redraw = false, BOOL msgs = false, BOOL prompt = false)=0; // General+Modes virtual BOOL IsCreating()=0; //will return TRUE if creating virtual void BeginModes(DWORD modes, int redraw=TRUE)=0; virtual void EndModes(DWORD modes, int redraw=TRUE)=0; virtual DWORD GetActiveModes()=0; virtual BOOL CanSwitchMode(DWORD mode)=0; //returns TRUE if we can switch to that mode from our current mode virtual void ConvertToFreeForm(bool keyPerFrame=false)=0; virtual void ConvertToFootSteps(bool keyPerFrame=false, bool flattenToZ=true)=0; // Display properties virtual DWORD GetDisplaySettings()=0; virtual void SetDisplaySettings(DWORD disp)=0; virtual BOOL DoDisplayPrefDlg(HWND hParent)=0; // Body types virtual int GetBodyType() =0; virtual void SetBodyType(int bodytype) =0; // Anim properties virtual int GetDynamicsType()=0; virtual void SetDynamicsType(int dyn)=0; virtual float GetGravAccel()=0; virtual void SetGravAccel(float grav)=0; virtual TCHAR* GetRootName()=0; virtual void SetRootName(TCHAR *rootname, bool incAll=true)=0; virtual BOOL GetAdaptLocks(int id)=0; virtual void SetAdaptLocks(int id, BOOL onOff)=0; virtual BOOL GetSeparateTracks(int id)=0; virtual void SeparateTracks(int id, BOOL separate)=0; virtual void SetBodySpaceNeckRotation(BOOL val)=0; virtual BOOL GetBodySpaceNeckRotation()=0; // Structure properties virtual BOOL GetHasArms()=0; virtual void SetHasArms(BOOL arms)=0; virtual int GetNumLinks(int keytrack)=0; virtual void SetNumLinks(int keytrack, int n)=0; virtual int GetNumFingers()=0; virtual void SetNumFingers(int n)=0; virtual int GetNumToes()=0; virtual void SetNumToes(int n)=0; virtual float GetAnkleAttach()=0; virtual void SetAnkleAttach(float aa)=0; virtual float GetHeight()=0; virtual void SetHeight(float h, BOOL KeepFeetOnGround = TRUE)=0; virtual BOOL GetTrianglePelvis()=0; virtual void SetTrianglePelvis(BOOL tri)=0; virtual BOOL GetProp1Exists()=0; virtual void SetProp1Exists(BOOL prop)=0; virtual BOOL GetProp2Exists()=0; virtual void SetProp2Exists(BOOL prop)=0; virtual BOOL GetProp3Exists()=0; virtual void SetProp3Exists(BOOL prop)=0; // mocap params virtual BOOL ConvertFromBuffer()=0; virtual BOOL PasteFromBuffer()=0; virtual BOOL GetDispBuffer()=0; virtual void SetDispBuffer(BOOL onOff)=0; virtual BOOL GetDispBufferTraj()=0; virtual void SetDispBufferTraj(BOOL onOff)=0; virtual BOOL GetTalentFigMode()=0; virtual void SetTalentFigMode(BOOL onOff)=0; virtual void AdjustTalentPose()=0; virtual void SaveTalentFigFile(TCHAR *fname)=0; virtual void SaveTalentPoseFile(TCHAR *fname)=0; // footstep creation/operations virtual BOOL GetFSAppendState()=0; virtual void SetFSAppendState(BOOL onOff)=0; virtual BOOL GetFSInsertState()=0; virtual void SetFSInsertState(BOOL onOff)=0; virtual int GetGaitMode()=0; virtual void SetGaitMode(int mode)=0; virtual int GetGroundDur()=0; virtual void SetGroundDur(int val)=0; virtual int GetAirDur()=0; virtual void SetAirDur(int val)=0; virtual void DoMultipleFSDlg()=0; virtual int AddFootprint(Point3 pos, float dir, Matrix3 mtx, int appendFS)=0; virtual void AddFootprints(MultFprintParams *Params)=0; virtual void NewFprintKeys()=0; virtual void BendFootprints(float angle)=0; virtual void ScaleFootprints(float scale)=0; // motion flow interface virtual IMoFlow* GetMoFlow()=0; virtual void UnifyMotion()=0; virtual TCHAR* GetClipAtTime(TimeValue t)=0; //returns the current clip // mixer interface virtual IMixer* GetMixer()=0; // IK objects //this set's the ik object for the current selected body part virtual void SetAttachNode(INode *node)=0; virtual INode* GetAttachNode()=0; //head target virtual void SetHeadTarget(INode *node)=0; virtual INode * GetHeadTarget() =0; // Anim,controls,nodes.... virtual bool IsNodeDeleted()=0; //test to see if the interface's node has been deleted. virtual Interval GetCurrentRange()=0; virtual int GetMaxNodes()=0; virtual int GetMaxLinks()=0; virtual INode* GetNode(int id, int link=0)=0; virtual BOOL GetIdLink(INode *node, int &id, int &link)=0; virtual Control * GetHorizontalControl()=0; virtual Control * GetVerticalControl()=0; virtual Control * GetTurnControl()=0; //get set keys and transforms. (in world space) virtual void SetBipedKey(TimeValue t,INode *node = NULL, BOOL setHor = TRUE, BOOL setVer = TRUE,BOOL setTurn = TRUE)=0; virtual void SetPlantedKey(TimeValue t,INode *node = NULL)=0; virtual void SetSlidingKey(TimeValue t,INode *node = NULL)=0; virtual void SetFreeKey(TimeValue t,INode *node = NULL)=0; virtual ScaleValue GetBipedScale(TimeValue t, INode *node)=0; virtual Point3 GetBipedPos(TimeValue t, INode *node)=0; virtual Quat GetBipedRot(TimeValue t, INode *node,BOOL local = FALSE)=0; //note that this set's a relative scale! virtual void SetBipedScale(BOOL relative,const ScaleValue &scale, TimeValue t, INode *node)=0; virtual void SetBipedPos(const Point3 &p, TimeValue t, INode *node,BOOL setKey =TRUE)=0; virtual void SetBipedRot(const Quat &q, TimeValue t, INode *node,BOOL setKey = TRUE)=0; virtual void SetMultipleKeys()=0; virtual void DoSetMultipleKeysDlg()=0; //reset's the limb ik pivots. useful when using subanim scale and there's some wierdness like sub-frame popping. virtual void ResetAllLimbKeys() = 0; //collapse the move all mode down virtual void CollapseMoveAllMode(BOOL msg) =0; //Biped Internal structures get/sets. These functions deal with internal biped structures and hierarchy. virtual INode* GetRotParentNode(int id,int link)=0; //the parent node where the rotation is inherited from virtual INode* GetPosParentNode(int id,int link)=0; //the parent node where the position is inherited from virtual Quat GetParentNodeRot(TimeValue t,int id,int link)=0; //rotation value of the parent virtual Point3 GetParentNodePos(TimeValue t,int id,int link)=0; //position value of the parent. virtual void GetClavicleVals(TimeValue t, int id, float &val1,float &val2)=0; //this is valid for KEY_RARM & KEY_LARM or virtual void GetHingeVal(TimeValue t,int id, float &val)=0; //this is valid for KEY_RARM & KEY_LARM & KEY_RLEG & KEY_LLEG. it get's the elbow/knee angle virtual void GetHorseAnkleVal(TimeValue, int id, float &val)=0; //this is valid only if you have a horse leg and KEY_RLEG and KEY_LLEG virtual void GetPelvisVal(TimeValue t, float &val) =0; //get's the pelvis angle virtual void GetFingerVal(TimeValue t,int id,int link, float &val) = 0;//get the finger rotation value for the finger segements with 1 DOF virtual BOOL GetIKActive(TimeValue t,int id) = 0;//Fuction to see if a biped limb is effect by ik at a particular time // Layers. virtual int NumLayers()=0; virtual void CreateLayer(int index, TCHAR* name)=0; virtual void DeleteLayer(int index)=0; virtual bool CollapseAtLayer(int index)=0; //only works if all layers under this layer are active, returns true if successul virtual bool GetLayerActive(int index)=0; virtual void SetLayerActive(int index, bool onOff)=0; virtual TCHAR* GetLayerName(int index)=0; virtual void SetLayerName(int index, TCHAR* name)=0; virtual int GetCurrentLayer()=0; virtual void SetCurrentLayer(int index)=0; virtual void UpdateLayers()=0; // need to call this after changes made to layers virtual void SetSnapKey(TimeValue t,INode *node = NULL)=0; //layer display info virtual int GetVisibleBefore()=0; virtual void SetVisibleBefore(int val)=0; virtual int GetVisibleAfter()=0; virtual void SetVisibleAfter(int val)=0; virtual bool GetKeyHighlight()=0; virtual void SetKeyHighlight(bool onOff)=0; // preferred clips for use with biped crowd. virtual void ClearPreferredClips()=0; virtual bool AddPreferredClip(TCHAR *clipname, int prob = 100)=0; virtual bool DeletePreferredClip(TCHAR *clipname)=0; virtual int IsPreferredClip(TCHAR *clipname)=0; virtual TCHAR* GetCurrentClip()=0; virtual int NumPreferredClips()=0; virtual TCHAR* GetPreferredClip(int i)=0; virtual int GetPreferredClipProbability(int i)=0; //Biped Subanims virtual bool GetEnableSubAnims()=0; virtual void SetEnableSubAnims(bool onOff)=0; virtual bool GetManipSubAnims()=0; virtual void SetManipSubAnims(bool onOff)=0; //Trackbar stuff //this is post CS4.2 virtual bool GetShowAllTracksInTV()=0; virtual void SetShowAllTracksInTV(bool onOff)=0; //doesn't workvirtual bool GetShowSubanimInTrackBar()=0; //virtual void SetShowSubanimInTrackBar(bool onOff)=0; virtual bool GetShowBipedInTrackBar()=0; virtual void SetShowBipedInTrackBar(bool onOff)=0; virtual void Mirror() =0; virtual void ClearAllAnimation() =0; virtual void ClearSelectedAnimation() =0; //These functions will clone the 'controlToClone' control and put it in each appropiate BipedSubAnim::List, //and make that control the active control. If 'checkIfOneExists' is TRUE it will first check to see //if a controller of the same type already exists in the subanim list, in which case it will just //set that one as active,and not clone a new one. virtual void CreatePosSubAnims(Control *controlToClone, BOOL checkIfOneExists)=0; virtual void CreateRotSubAnims(Control *controlToClone, BOOL checkIfOneExists)=0; virtual void CreateScaleSubAnims(Control *controlToClone, BOOL checkIfOneExists)=0; //these functions Set a key for the appropiate active controller in the list controller for the //specified node. If 'absolute' is true the value used to set the key is the total combined value //of the underlying biped value plus the subanim value. Thus the subanim value will be calculating //by subtracting out the biped value. If 'absolute' is false the value is the exact subanim key value //that will be set. Due to the limitation in defining a global 'biped scale', the scale type of this //function has no absolute parameter and always just sets the key with the specified value virtual void SetPosSubAnim(const Point3 &p, TimeValue t, INode *node,BOOL absolute)=0; virtual void SetRotSubAnim(const Quat &q, TimeValue t, INode *node,BOOL absolute) = 0; virtual void SetScaleSubAnim(const ScaleValue &s, TimeValue t, INode *node) = 0; //these function calls collapse the specified subAnims.. virtual void CollapseAllPosSubAnims(BOOL perFrame,BOOL keep) = 0; virtual void CollapseAllRotSubAnims(BOOL perFrame,BOOL keep) = 0; virtual void CollapseRotSubAnims(BOOL perFrame,BOOL keep,INode *node) = 0; virtual void CollapsePosSubAnims(BOOL perFrame,BOOL keep,INode *node) = 0; //Copy/Paste exposure virtual char * CopyPosture(int copyType,BOOL copyHor,BOOL copyVer,BOOL copyTurn) = 0; virtual BOOL PastePosture(int copyType,int opposite,char *name) = 0; virtual void DeleteAllCopies(int copyType, BOOL holdIt = true) = 0; virtual int NumCopies(int copyType) = 0; virtual void DeleteCopy(int copyType,char *name) = 0; virtual TCHAR *GetCopyName(int copyType,int which) = 0; virtual void SetCopyName(int copyType,int oldIndex, char *newName) = 0; virtual BOOL SaveCopyPasteFile(char *fname) = 0; virtual BOOL LoadCopyPasteFile(char *fname) = 0; }; //Interface to the biped footstep class IBipFootStep { public: virtual void SetFreeFormMode(BOOL mode)=0; virtual BOOL GetFreeFormMode()=0; virtual void SetDispNumType(int type)=0; virtual int GetDispNumType()=0; virtual void SetDispAirDur(BOOL onOff)=0; virtual BOOL GetDispAirDur()=0; virtual void SetDispNoSupport(BOOL onOff)=0; virtual BOOL GetDispNoSupport()=0; virtual void UpdateEditTrackUI()=0; virtual void UpdateFootSteps(TimeValue t){} }; // defines for mocap key reduction settings #define KRS_ALL 0 #define KRS_HORZ 1 #define KRS_VERT 2 #define KRS_ROT 3 #define KRS_PLV 4 #define KRS_SPN 5 #define KRS_NCK 6 #define KRS_LARM 7 #define KRS_RARM 8 #define KRS_LLEG 9 #define KRS_RLEG 10 #define KRS_TAIL 11 // defines for mocap GetLimbOrientation/SetLimbOrientation #define LIMB_KNEE 0 #define LIMB_ELBOW 1 #define LIMB_FOOT 2 #define LIMB_HAND 3 #define ANGLE_ALIGN 0 #define POINT_ALIGN 1 #define AUTO_ALIGN 2 //The mocap manager class. class MocapManager { public: // import dialog properties BIPExport TCHAR* GetTalentFigStrucFile(); BIPExport void SetTalentFigStrucFile(const TCHAR *fname); BIPExport BOOL GetUseTalentFigStrucFile() const; BIPExport void SetUseTalentFigStrucFile(BOOL onOff); BIPExport TCHAR* GetTalentPoseAdjFile() const; BIPExport void SetTalentPoseAdjFile(const TCHAR *fname); BIPExport BOOL GetUseTalentPoseAdjFile() const; BIPExport void SetUseTalentPoseAdjFile(BOOL onOff); BIPExport int GetFSExtractionMode() const; BIPExport void SetFSExtractionMode(int mode); BIPExport int GetFSConversionMode() const; BIPExport void SetFSConversionMode(int mode); // 0 - x, 1 - y, 2 - z BIPExport int GetUpVector() const; BIPExport void SetUpVector(int axis); BIPExport float GetScaleFactor() const; BIPExport void SetScaleFactor(float val); BIPExport float GetFSExtractionTol() const; BIPExport void SetFSExtractionTol(float val); BIPExport float GetFSSlidingDist() const; BIPExport void SetFSSlidingDist(float val); BIPExport float GetFSSlidingAngle() const; BIPExport void SetFSSlidingAngle(float val); BIPExport float GetFSVerticalTol() const; BIPExport void SetFSVerticalTol(float val); BIPExport float GetFSZLevel() const; BIPExport void SetFSZLevel(float val); BIPExport BOOL GetFSUseVerticalTol() const; BIPExport void SetFSUseVerticalTol(BOOL val); BIPExport BOOL GetFSUseFlatten() const; BIPExport void SetFSUseFlatten(BOOL val); BIPExport int GetStartFrame() const; BIPExport void SetStartFrame(int val); BIPExport int GetEndFrame() const; BIPExport void SetEndFrame(int val); BIPExport BOOL GetUseLoopFrame() const; BIPExport void SetUseLoopFrame(BOOL val); BIPExport int GetLoopFrameCount() const; BIPExport void SetLoopFrameCount(int val); BIPExport float GetKeyReductionTol(int part) const; BIPExport void SetKeyReductionTol(int part, float val); BIPExport int GetKeyReductionSpacing(int part) const; BIPExport void SetKeyReductionSpacing(int part, float val); BIPExport BOOL GetKeyReductionFilter(int part) const; BIPExport void SetKeyReductionFilter(int part, BOOL onOff); BIPExport int GetLimbOrientation(int limb) const; BIPExport void SetLimbOrientation(int limb, int val); BIPExport int LoadMocapParameters(const TCHAR *fname); BIPExport int SaveMocapParameters(const TCHAR *fname); // marker name dialog BIPExport TCHAR* GetMarkerNameFile() const; BIPExport bool LoadMarkerNameFile(const TCHAR *fname); BIPExport BOOL GetUseMarkerNameFile() const; BIPExport void SetUseMarkerNameFile(BOOL onOff); BIPExport TCHAR* GetJointNameFile() const; BIPExport bool LoadJointNameFile(const TCHAR *fname); BIPExport BOOL GetUseJointNameFile() const; BIPExport void SetUseJointNameFile(BOOL onOff); BIPExport int BatchConvert(TCHAR* inDir, TCHAR* outDir, TCHAR* ext); BIPExport BOOL GetDispKnownMarkers() const; BIPExport void SetDispKnownMarkers(BOOL onOff); BIPExport int GetDispKnownMarkersType() const; // 0 - Sel objects, 1 - all BIPExport void SetDispKnownMarkersType(int type); // 0 - Sel objects, 1 - all BIPExport BOOL GetDispUnKnownMarkers() const; BIPExport void SetDispUnKnownMarkers(BOOL onOff); BIPExport BOOL GetDispPropMarkers() const; BIPExport void SetDispPropMarkers(BOOL onOff); }; //The mixer manager class. class MixerManager { public: BIPExport BOOL GetSnapFrames(); BIPExport void SetSnapFrames(BOOL onOff); BIPExport BOOL GetShowTgRangebars(); BIPExport void SetShowTgRangebars(BOOL onOff); BIPExport BOOL GetShowWgtCurves(); BIPExport void SetShowWgtCurves(BOOL onOff); BIPExport BOOL GetShowTimeWarps(); BIPExport void SetShowTimeWarps(BOOL onOff); BIPExport BOOL GetShowClipBounds(); BIPExport void SetShowClipBounds(BOOL onOff); BIPExport BOOL GetShowGlobal(); BIPExport void SetShowGlobal(BOOL onOff); BIPExport BOOL GetShowClipNames(); BIPExport void SetShowClipNames(BOOL onOff); BIPExport BOOL GetShowClipScale(); BIPExport void SetShowClipScale(BOOL onOff); BIPExport BOOL GetShowTransStart(); BIPExport void SetShowTransStart(BOOL onOff); BIPExport BOOL GetShowTransEnd(); BIPExport void SetShowTransEnd(BOOL onOff); BIPExport BOOL GetShowBalance(); BIPExport void SetShowBalance(BOOL onOff); BIPExport BOOL GetSnapToClips(); BIPExport void SetSnapToClips(BOOL onOff); BIPExport BOOL GetLockTransitions(); BIPExport void SetLockTransitions(BOOL onOff); BIPExport void SetAnimationRange(); BIPExport void ZoomExtents(); BIPExport void UpdateDisplay(); BIPExport void AddBipedToMixerDisplay(IBipMaster *mc); BIPExport void RemoveBipedFromMixerDisplay(IBipMaster *mc); BIPExport void ShowMixer(); BIPExport void HideMixer(); }; // Base Biped Key. For pelvis, spine, neck, tail, pony1, pony2 keys class IBipedKey : public IKey { public: float tens, cont, bias, easeIn, easeOut; int type; }; // Biped COM Vertical Key class IBipedVertKey : public IBipedKey { public: float z, dynBlend, ballTens; }; // Biped COM Horizontal Key class IBipedHorzKey : public IBipedKey { public: float x, y, balFac; }; // Biped COM Turn Key class IBipedTurnKey : public IBipedKey { public: Quat q; }; // Biped Body Key for the Arm and Leg Keys. contains ik blend and pivot point info. // IK spaces #define BODYSPACE 0 #define WORLDSPACE 1 // Currently not valid #define OBJECTSPACE 2 class IBipedBodyKey : public IBipedKey { public: float ik_blend, ik_ankle_ten; int ik_space, ik_joined_pivot, ik_pivot_index, ik_num_pivots; Point3 ik_pivot_pts[NUMPIVOTS]; }; // Biped Head Key class IBipedHeadKey : public IBipedKey { public : float head_blend; }; // Biped Prop Key #define WORLD_PROP 0 #define BODY_PROP 1 #define RHAND_PROP 2 #define LHAND_PROP 3 class IBipedPropKey : public IBipedKey { public: int pos_space; int rot_space; }; //Biped FootStep Key #define FS_LSEL (1<<0) #define FS_RSEL (1<<1) #define FS_LFT 1 #define FS_RGT 0 class IBipedFSKey : public IKey { public: DWORD edgeSel; BOOL active; Matrix3 mat; int side; // LFT, RGT TimeValue duration; }; // Multiple footstep params. One will be created to store each gait's paramters (walk, run, jump) class MultFprintParams { public: int numnewfprints; float aswid; float pswid; float aslen; float pslen; float ashgt; int cycle; float aslen2; float pslen2; float ashgt2; int cycle2; int AutoTiming; int InterpTiming; int Alternate; int MultiInsertInTime; MultFprintParams(int gait) {init(gait);} BIPExport void init(int gait); }; // returns multiple footsteps parameters for different types of gaits (walk, run, jump) BIPExport MultFprintParams* GetMultFprintParams(int gait); // Start Left/Start Right radio buttons in "Create Mutliple Footsteps Dialog" BIPExport int GetFSAddSide(); BIPExport void SetFSAddSide(int side); #endif // __BIPEDAPI__