added 3dengfx into the repo, probably not the correct version for this
[summerhack] / src / 3dengfx / libs / lib3ds / node.h
diff --git a/src/3dengfx/libs/lib3ds/node.h b/src/3dengfx/libs/lib3ds/node.h
new file mode 100644 (file)
index 0000000..7021a10
--- /dev/null
@@ -0,0 +1,188 @@
+/* -*- c -*- */
+#ifndef INCLUDED_LIB3DS_NODE_H
+#define INCLUDED_LIB3DS_NODE_H
+/*
+ * The 3D Studio File Format Library
+ * Copyright (C) 1996-2001 by J.E. Hoffmann <je-h@gmx.net>
+ * All rights reserved.
+ *
+ * This program is  free  software;  you can redistribute it and/or modify it
+ * under the terms of the  GNU Lesser General Public License  as published by 
+ * the  Free Software Foundation;  either version 2.1 of the License,  or (at 
+ * your option) any later version.
+ *
+ * This  program  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 Lesser General Public  
+ * License for more details.
+ *
+ * You should  have received  a copy of the GNU Lesser General Public License
+ * along with  this program;  if not, write to the  Free Software Foundation,
+ * Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * $Id: node.h,v 1.9 2004/12/31 16:17:15 reed Exp $
+ */
+
+#ifndef INCLUDED_LIB3DS_TRACKS_H
+#include <lib3ds/tracks.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*!
+ * Scene graph ambient color node data
+ * \ingroup node
+ */
+typedef struct _Lib3dsAmbientData {
+    Lib3dsRgb col;
+    Lib3dsLin3Track col_track;
+} Lib3dsAmbientData;
+
+/*!
+ * Scene graph object instance node data
+ * \ingroup node
+ */
+typedef struct _Lib3dsObjectData {
+    Lib3dsVector pivot;
+    char instance[64];
+    Lib3dsVector bbox_min;
+    Lib3dsVector bbox_max;
+    Lib3dsVector pos;
+    Lib3dsLin3Track pos_track;
+    Lib3dsQuat rot;
+    Lib3dsQuatTrack rot_track;
+    Lib3dsVector scl;
+    Lib3dsLin3Track scl_track;
+    Lib3dsFloat morph_smooth;
+    char morph[64];
+    Lib3dsMorphTrack morph_track;
+    Lib3dsBool hide;
+    Lib3dsBoolTrack hide_track;
+} Lib3dsObjectData;
+
+/*!
+ * Scene graph camera node data
+ * \ingroup node
+ */
+typedef struct _Lib3dsCameraData {
+    Lib3dsVector pos;
+    Lib3dsLin3Track pos_track;
+    Lib3dsFloat fov;
+    Lib3dsLin1Track fov_track;
+    Lib3dsFloat roll;
+    Lib3dsLin1Track roll_track;
+} Lib3dsCameraData;
+
+/*!
+ * Scene graph camera target node data
+ * \ingroup node
+ */
+typedef struct _Lib3dsTargetData {
+    Lib3dsVector pos;
+    Lib3dsLin3Track pos_track;
+} Lib3dsTargetData;
+
+/*!
+ * Scene graph light node data
+ * \ingroup node
+ */
+typedef struct _Lib3dsLightData {
+    Lib3dsVector pos;
+    Lib3dsLin3Track pos_track;
+    Lib3dsRgb col;
+    Lib3dsLin3Track col_track;
+    Lib3dsFloat hotspot;
+    Lib3dsLin1Track hotspot_track;
+    Lib3dsFloat falloff;
+    Lib3dsLin1Track falloff_track;
+    Lib3dsFloat roll;
+    Lib3dsLin1Track roll_track;
+} Lib3dsLightData;
+
+/*!
+ * Scene graph spotlight target node data
+ * \ingroup node
+ */
+typedef struct _Lib3dsSpotData {
+    Lib3dsVector pos;
+    Lib3dsLin3Track pos_track;
+} Lib3dsSpotData;
+
+/*!
+ * Scene graph node data union
+ * \ingroup node
+ */
+typedef union _Lib3dsNodeData {
+    Lib3dsAmbientData ambient;
+    Lib3dsObjectData object;
+    Lib3dsCameraData camera;
+    Lib3dsTargetData target;
+    Lib3dsLightData light;
+    Lib3dsSpotData spot;
+} Lib3dsNodeData;
+
+/*!
+ * \ingroup node
+ */
+#define LIB3DS_NO_PARENT 65535
+
+/*!
+ * Scene graph node
+ * \ingroup node
+ */
+struct _Lib3dsNode {
+    Lib3dsUserData user;
+    Lib3dsNode *next;\
+    Lib3dsNode *childs;\
+    Lib3dsNode *parent;\
+    Lib3dsNodeTypes type;\
+    Lib3dsWord node_id;\
+    char name[64];\
+    Lib3dsWord flags1;\
+    Lib3dsWord flags2;\
+    Lib3dsWord parent_id;
+    Lib3dsMatrix matrix;
+    Lib3dsNodeData data;
+};
+
+/*!
+ * Node flags
+ * \ingroup node
+ */
+typedef enum {
+  LIB3DS_HIDDEN = 0x800
+} Lib3dsNodeFlags1;
+
+/*!
+ * Node flags
+ * \ingroup node
+ */
+typedef enum {
+  LIB3DS_SHOW_PATH = 0x1,
+  LIB3DS_SMOOTHING = 0x2,
+  LIB3DS_MOTION_BLUR = 0x10,
+  LIB3DS_MORPH_MATERIALS = 0x40
+} Lib3dsNodeFlags2;
+
+extern LIB3DSAPI Lib3dsNode* lib3ds_node_new_ambient();
+extern LIB3DSAPI Lib3dsNode* lib3ds_node_new_object();
+extern LIB3DSAPI Lib3dsNode* lib3ds_node_new_camera();
+extern LIB3DSAPI Lib3dsNode* lib3ds_node_new_target();
+extern LIB3DSAPI Lib3dsNode* lib3ds_node_new_light();
+extern LIB3DSAPI Lib3dsNode* lib3ds_node_new_spot();
+extern LIB3DSAPI void lib3ds_node_free(Lib3dsNode *node);
+extern LIB3DSAPI void lib3ds_node_eval(Lib3dsNode *node, Lib3dsFloat t);
+extern LIB3DSAPI Lib3dsNode* lib3ds_node_by_name(Lib3dsNode *node, const char* name,
+  Lib3dsNodeTypes type);
+extern LIB3DSAPI Lib3dsNode* lib3ds_node_by_id(Lib3dsNode *node, Lib3dsWord node_id);
+extern LIB3DSAPI void lib3ds_node_dump(Lib3dsNode *node, Lib3dsIntd level);
+extern LIB3DSAPI Lib3dsBool lib3ds_node_read(Lib3dsNode *node, Lib3dsFile *file, Lib3dsIo *io);
+extern LIB3DSAPI Lib3dsBool lib3ds_node_write(Lib3dsNode *node, Lib3dsFile *file, Lib3dsIo *io);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+