123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- /*
- ===========================================================================
- Doom 3 GPL Source Code
- Copyright (C) 1999-2011 id Software LLC, a ZeniMax Media company.
- This file is part of the Doom 3 GPL Source Code (?Doom 3 Source Code?).
- Doom 3 Source Code is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
- Doom 3 Source Code is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with Doom 3 Source Code. If not, see <http://www.gnu.org/licenses/>.
- In addition, the Doom 3 Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 Source Code. If not, please request a copy in writing from id Software at the address below.
- If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.
- ===========================================================================
- */
- #ifndef __DECLAF_H__
- #define __DECLAF_H__
- /*
- ===============================================================================
- Articulated Figure
- ===============================================================================
- */
- class idDeclAF;
- typedef enum {
- DECLAF_CONSTRAINT_INVALID,
- DECLAF_CONSTRAINT_FIXED,
- DECLAF_CONSTRAINT_BALLANDSOCKETJOINT,
- DECLAF_CONSTRAINT_UNIVERSALJOINT,
- DECLAF_CONSTRAINT_HINGE,
- DECLAF_CONSTRAINT_SLIDER,
- DECLAF_CONSTRAINT_SPRING
- } declAFConstraintType_t;
- typedef enum {
- DECLAF_JOINTMOD_AXIS,
- DECLAF_JOINTMOD_ORIGIN,
- DECLAF_JOINTMOD_BOTH
- } declAFJointMod_t;
- typedef bool (*getJointTransform_t)( void *model, const idJointMat *frame, const char *jointName, idVec3 &origin, idMat3 &axis );
- class idAFVector {
- public:
- enum {
- VEC_COORDS = 0,
- VEC_JOINT,
- VEC_BONECENTER,
- VEC_BONEDIR
- } type;
- idStr joint1;
- idStr joint2;
- public:
- idAFVector( void );
- bool Parse( idLexer &src );
- bool Finish( const char *fileName, const getJointTransform_t GetJointTransform, const idJointMat *frame, void *model ) const;
- bool Write( idFile *f ) const;
- const char * ToString( idStr &str, const int precision = 8 );
- const idVec3 & ToVec3( void ) const { return vec; }
- idVec3 & ToVec3( void ) { return vec; }
- private:
- mutable idVec3 vec;
- bool negate;
- };
- class idDeclAF_Body {
- public:
- idStr name;
- idStr jointName;
- declAFJointMod_t jointMod;
- int modelType;
- idAFVector v1, v2;
- int numSides;
- float width;
- float density;
- idAFVector origin;
- idAngles angles;
- int contents;
- int clipMask;
- bool selfCollision;
- idMat3 inertiaScale;
- float linearFriction;
- float angularFriction;
- float contactFriction;
- idStr containedJoints;
- idAFVector frictionDirection;
- idAFVector contactMotorDirection;
- public:
- void SetDefault( const idDeclAF *file );
- };
- class idDeclAF_Constraint {
- public:
- idStr name;
- idStr body1;
- idStr body2;
- declAFConstraintType_t type;
- float friction;
- float stretch;
- float compress;
- float damping;
- float restLength;
- float minLength;
- float maxLength;
- idAFVector anchor;
- idAFVector anchor2;
- idAFVector shaft[2];
- idAFVector axis;
- enum {
- LIMIT_NONE = -1,
- LIMIT_CONE,
- LIMIT_PYRAMID
- } limit;
- idAFVector limitAxis;
- float limitAngles[3];
- public:
- void SetDefault( const idDeclAF *file );
- };
- class idDeclAF : public idDecl {
- friend class idAFFileManager;
- public:
- idDeclAF( void );
- virtual ~idDeclAF( void );
- virtual size_t Size( void ) const;
- virtual const char * DefaultDefinition( void ) const;
- virtual bool Parse( const char *text, const int textLength );
- virtual void FreeData( void );
- virtual void Finish( const getJointTransform_t GetJointTransform, const idJointMat *frame, void *model ) const;
- bool Save( void );
- void NewBody( const char *name );
- void RenameBody( const char *oldName, const char *newName );
- void DeleteBody( const char *name );
- void NewConstraint( const char *name );
- void RenameConstraint( const char *oldName, const char *newName );
- void DeleteConstraint( const char *name );
- static int ContentsFromString( const char *str );
- static const char * ContentsToString( const int contents, idStr &str );
- static declAFJointMod_t JointModFromString( const char *str );
- static const char * JointModToString( declAFJointMod_t jointMod );
- public:
- bool modified;
- idStr model;
- idStr skin;
- float defaultLinearFriction;
- float defaultAngularFriction;
- float defaultContactFriction;
- float defaultConstraintFriction;
- float totalMass;
- idVec2 suspendVelocity;
- idVec2 suspendAcceleration;
- float noMoveTime;
- float noMoveTranslation;
- float noMoveRotation;
- float minMoveTime;
- float maxMoveTime;
- int contents;
- int clipMask;
- bool selfCollision;
- idList<idDeclAF_Body *> bodies;
- idList<idDeclAF_Constraint *> constraints;
- private:
- bool ParseContents( idLexer &src, int &c ) const;
- bool ParseBody( idLexer &src );
- bool ParseFixed( idLexer &src );
- bool ParseBallAndSocketJoint( idLexer &src );
- bool ParseUniversalJoint( idLexer &src );
- bool ParseHinge( idLexer &src );
- bool ParseSlider( idLexer &src );
- bool ParseSpring( idLexer &src );
- bool ParseSettings( idLexer &src );
- bool WriteBody( idFile *f, const idDeclAF_Body &body ) const;
- bool WriteFixed( idFile *f, const idDeclAF_Constraint &c ) const;
- bool WriteBallAndSocketJoint( idFile *f, const idDeclAF_Constraint &c ) const;
- bool WriteUniversalJoint( idFile *f, const idDeclAF_Constraint &c ) const;
- bool WriteHinge( idFile *f, const idDeclAF_Constraint &c ) const;
- bool WriteSlider( idFile *f, const idDeclAF_Constraint &c ) const;
- bool WriteSpring( idFile *f, const idDeclAF_Constraint &c ) const;
- bool WriteConstraint( idFile *f, const idDeclAF_Constraint &c ) const;
- bool WriteSettings( idFile *f ) const;
- bool RebuildTextSource( void );
- };
- #endif /* !__DECLAF_H__ */
|