2 Copyright (C) 1999-2006 Id Software, Inc. and contributors.
3 For a list of contributors, see the accompanying CONTRIBUTORS file.
5 This file is part of GtkRadiant.
7 GtkRadiant is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 GtkRadiant is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GtkRadiant; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
29 //typedef float vec3_t[3];
30 //typedef unsigned char byte;
33 #define stricmp strcasecmp
34 #define strcmpi strcasecmp
37 typedef struct Placement_s
45 typedef struct QDataJoint_s
47 Placement_t placement;
52 typedef struct ArrayedListNode_s
59 #define ARRAYEDLISTNODE_NULL -1
61 typedef struct JointAngles_s
68 typedef struct JointAngles2_s
76 #define MAX_MODELJOINTS 256
77 #define MAX_MODELJOINTNODES 255
79 extern JointAngles_t jointAngles[MAX_MODELJOINTS];
80 extern JointAngles2_t jointAngles2[MAX_MODELJOINTS];
82 extern ArrayedListNode_t jointAngleNodes[MAX_MODELJOINTNODES];
84 // Skeletal structures enums
91 // Raven Skeletal structures enums
99 // Box Skeletal structures enums
105 extern int numJointsForSkeleton[];
106 extern char *RAVEN_SKEL_NAMES[];
108 #define J_NEW_SKELETON 0x00001000
109 #define J_YAW_CHANGED 0x00002000
110 #define J_PITCH_CHANGED 0x00004000
111 #define J_ROLL_CHANGED 0x00008000
112 #define MAX_JOINTS 0x00000fff
114 inline int GetFreeNode(ArrayedListNode_t *nodeArray, int max)
115 { // yeah, I know this is a sucky, inefficient way to do this, but I didn't feel like taking the time to write a real resource manager in C
118 for(i = 0; i < max; ++i)
120 if(!nodeArray[i].inUse)
122 nodeArray[i].inUse = 1;
131 inline void FreeNode(ArrayedListNode_t *nodeArray, int index)
133 nodeArray[index].inUse = 0;
136 int CreateSkeleton(int structure);
137 void CreateSkeletonAtIndex(int structure, int index);
138 void FreeSkeleton(int structure, int index);
139 void SetJointAngle(int jointIndex, int angleIndex, float angle);
140 float ModifyJointAngle(int jointIndex, int angleIndex, float deltaAngle);
141 int ZeroJointAngle(int jointIndex, int angleIndex, float angVel);
142 int ApplyAngVelToJoint(int jointIndex, int angleIndex, float angVel, float destAng);