]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - tools/heretic2/h2data/joints.h
tools/heretic2: move heretic2 stuff to its own directory
[xonotic/netradiant.git] / tools / heretic2 / h2data / joints.h
diff --git a/tools/heretic2/h2data/joints.h b/tools/heretic2/h2data/joints.h
new file mode 100644 (file)
index 0000000..f8e64bf
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+   Copyright (C) 1999-2007 id Software, Inc. and contributors.
+   For a list of contributors, see the accompanying CONTRIBUTORS file.
+
+   This file is part of GtkRadiant.
+
+   GtkRadiant 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 2 of the License, or
+   (at your option) any later version.
+
+   GtkRadiant 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 GtkRadiant; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#ifndef JOINTS_H
+#define JOINTS_H
+
+#include "globaldefs.h"
+
+#ifdef _HERETIC2_
+#include "angles.h"
+#endif
+
+//typedef float vec3_t[3];
+//typedef unsigned char byte;
+
+#if !GDEF_OS_WINDOWS
+#define stricmp strcasecmp
+#define strcmpi strcasecmp
+#endif
+
+typedef struct Placement_s
+{
+       vec3_t origin;
+       vec3_t direction;
+       vec3_t up;
+} Placement_t;
+
+#if 1
+typedef struct QDataJoint_s
+{
+       Placement_t placement;
+       vec3_t rotation;
+} QDataJoint_t;
+#endif
+
+typedef struct ArrayedListNode_s
+{
+       int data;
+       int next;
+       int inUse;
+} ArrayedListNode_t;
+
+#define ARRAYEDLISTNODE_NULL -1
+
+typedef struct JointAngles_s
+{
+       float angles[3];
+       int children;
+       int created;
+} JointAngles_t;
+
+typedef struct JointAngles2_s
+{
+       float angles[3];
+       int children;
+       int changed[3];
+       int inUse;
+} JointAngles2_t;
+
+#define MAX_MODELJOINTS         256
+#define MAX_MODELJOINTNODES     255
+
+extern JointAngles_t jointAngles[MAX_MODELJOINTS];
+extern JointAngles2_t jointAngles2[MAX_MODELJOINTS];
+
+extern ArrayedListNode_t jointAngleNodes[MAX_MODELJOINTNODES];
+
+// Skeletal structures enums
+enum {
+       SKEL_RAVEN = 0,
+       SKEL_BOX,
+       NUM_SKELETONS
+};
+
+// Raven Skeletal structures enums
+enum {
+       RAVEN_WAIST1 = 0,
+       RAVEN_WAIST2 = 1,
+       RAVEN_HEAD = 2,
+       NUM_JOINTS_RAVEN
+};
+
+// Box Skeletal structures enums
+enum {
+       BOX_CENTER = 0,
+       NUM_JOINTS_BOX
+};
+
+extern int numJointsForSkeleton[];
+extern char *RAVEN_SKEL_NAMES[];
+
+#define J_NEW_SKELETON      0x00001000
+#define J_YAW_CHANGED       0x00002000
+#define J_PITCH_CHANGED     0x00004000
+#define J_ROLL_CHANGED      0x00008000
+#define MAX_JOINTS          0x00000fff
+/*
+   inline int GetFreeNode(ArrayedListNode_t *nodeArray, int max)
+   {   // 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
+    int i;
+
+    for(i = 0; i < max; ++i)
+    {
+        if(!nodeArray[i].inUse)
+        {
+            nodeArray[i].inUse = 1;
+            return i;
+        }
+    }
+
+    assert(0);
+    return -1;
+   }
+
+   inline void FreeNode(ArrayedListNode_t *nodeArray, int index)
+   {
+    nodeArray[index].inUse = 0;
+   }
+ */
+int CreateSkeleton( int structure );
+void CreateSkeletonAtIndex( int structure, int index );
+void FreeSkeleton( int structure, int index );
+void SetJointAngle( int jointIndex, int angleIndex, float angle );
+float ModifyJointAngle( int jointIndex, int angleIndex, float deltaAngle );
+int ZeroJointAngle( int jointIndex, int angleIndex, float angVel );
+int ApplyAngVelToJoint( int jointIndex, int angleIndex, float angVel, float destAng );
+
+#endif