dropped all dependencies apart from SDL into the libs subdir
[summerhack] / libs / lib3ds / node.h
1 /* -*- c -*- */
2 #ifndef INCLUDED_LIB3DS_NODE_H
3 #define INCLUDED_LIB3DS_NODE_H
4 /*
5  * The 3D Studio File Format Library
6  * Copyright (C) 1996-2001 by J.E. Hoffmann <je-h@gmx.net>
7  * All rights reserved.
8  *
9  * This program is  free  software;  you can redistribute it and/or modify it
10  * under the terms of the  GNU Lesser General Public License  as published by 
11  * the  Free Software Foundation;  either version 2.1 of the License,  or (at 
12  * your option) any later version.
13  *
14  * This  program  is  distributed in  the  hope that it will  be useful,  but
15  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16  * or  FITNESS FOR A  PARTICULAR PURPOSE.  See the  GNU Lesser General Public  
17  * License for more details.
18  *
19  * You should  have received  a copy of the GNU Lesser General Public License
20  * along with  this program;  if not, write to the  Free Software Foundation,
21  * Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22  *
23  * $Id: node.h,v 1.9 2004/12/31 16:17:15 reed Exp $
24  */
25
26 #ifndef INCLUDED_LIB3DS_TRACKS_H
27 #include <lib3ds/tracks.h>
28 #endif
29
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33
34 /*!
35  * Scene graph ambient color node data
36  * \ingroup node
37  */
38 typedef struct _Lib3dsAmbientData {
39     Lib3dsRgb col;
40     Lib3dsLin3Track col_track;
41 } Lib3dsAmbientData;
42
43 /*!
44  * Scene graph object instance node data
45  * \ingroup node
46  */
47 typedef struct _Lib3dsObjectData {
48     Lib3dsVector pivot;
49     char instance[64];
50     Lib3dsVector bbox_min;
51     Lib3dsVector bbox_max;
52     Lib3dsVector pos;
53     Lib3dsLin3Track pos_track;
54     Lib3dsQuat rot;
55     Lib3dsQuatTrack rot_track;
56     Lib3dsVector scl;
57     Lib3dsLin3Track scl_track;
58     Lib3dsFloat morph_smooth;
59     char morph[64];
60     Lib3dsMorphTrack morph_track;
61     Lib3dsBool hide;
62     Lib3dsBoolTrack hide_track;
63 } Lib3dsObjectData;
64
65 /*!
66  * Scene graph camera node data
67  * \ingroup node
68  */
69 typedef struct _Lib3dsCameraData {
70     Lib3dsVector pos;
71     Lib3dsLin3Track pos_track;
72     Lib3dsFloat fov;
73     Lib3dsLin1Track fov_track;
74     Lib3dsFloat roll;
75     Lib3dsLin1Track roll_track;
76 } Lib3dsCameraData;
77
78 /*!
79  * Scene graph camera target node data
80  * \ingroup node
81  */
82 typedef struct _Lib3dsTargetData {
83     Lib3dsVector pos;
84     Lib3dsLin3Track pos_track;
85 } Lib3dsTargetData;
86
87 /*!
88  * Scene graph light node data
89  * \ingroup node
90  */
91 typedef struct _Lib3dsLightData {
92     Lib3dsVector pos;
93     Lib3dsLin3Track pos_track;
94     Lib3dsRgb col;
95     Lib3dsLin3Track col_track;
96     Lib3dsFloat hotspot;
97     Lib3dsLin1Track hotspot_track;
98     Lib3dsFloat falloff;
99     Lib3dsLin1Track falloff_track;
100     Lib3dsFloat roll;
101     Lib3dsLin1Track roll_track;
102 } Lib3dsLightData;
103
104 /*!
105  * Scene graph spotlight target node data
106  * \ingroup node
107  */
108 typedef struct _Lib3dsSpotData {
109     Lib3dsVector pos;
110     Lib3dsLin3Track pos_track;
111 } Lib3dsSpotData;
112
113 /*!
114  * Scene graph node data union
115  * \ingroup node
116  */
117 typedef union _Lib3dsNodeData {
118     Lib3dsAmbientData ambient;
119     Lib3dsObjectData object;
120     Lib3dsCameraData camera;
121     Lib3dsTargetData target;
122     Lib3dsLightData light;
123     Lib3dsSpotData spot;
124 } Lib3dsNodeData;
125
126 /*!
127  * \ingroup node
128  */
129 #define LIB3DS_NO_PARENT 65535
130
131 /*!
132  * Scene graph node
133  * \ingroup node
134  */
135 struct _Lib3dsNode {
136     Lib3dsUserData user;
137     Lib3dsNode *next;\
138     Lib3dsNode *childs;\
139     Lib3dsNode *parent;\
140     Lib3dsNodeTypes type;\
141     Lib3dsWord node_id;\
142     char name[64];\
143     Lib3dsWord flags1;\
144     Lib3dsWord flags2;\
145     Lib3dsWord parent_id;
146     Lib3dsMatrix matrix;
147     Lib3dsNodeData data;
148 };
149
150 /*!
151  * Node flags
152  * \ingroup node
153  */
154 typedef enum {
155   LIB3DS_HIDDEN = 0x800
156 } Lib3dsNodeFlags1;
157
158 /*!
159  * Node flags
160  * \ingroup node
161  */
162 typedef enum {
163   LIB3DS_SHOW_PATH = 0x1,
164   LIB3DS_SMOOTHING = 0x2,
165   LIB3DS_MOTION_BLUR = 0x10,
166   LIB3DS_MORPH_MATERIALS = 0x40
167 } Lib3dsNodeFlags2;
168
169 extern LIB3DSAPI Lib3dsNode* lib3ds_node_new_ambient();
170 extern LIB3DSAPI Lib3dsNode* lib3ds_node_new_object();
171 extern LIB3DSAPI Lib3dsNode* lib3ds_node_new_camera();
172 extern LIB3DSAPI Lib3dsNode* lib3ds_node_new_target();
173 extern LIB3DSAPI Lib3dsNode* lib3ds_node_new_light();
174 extern LIB3DSAPI Lib3dsNode* lib3ds_node_new_spot();
175 extern LIB3DSAPI void lib3ds_node_free(Lib3dsNode *node);
176 extern LIB3DSAPI void lib3ds_node_eval(Lib3dsNode *node, Lib3dsFloat t);
177 extern LIB3DSAPI Lib3dsNode* lib3ds_node_by_name(Lib3dsNode *node, const char* name,
178   Lib3dsNodeTypes type);
179 extern LIB3DSAPI Lib3dsNode* lib3ds_node_by_id(Lib3dsNode *node, Lib3dsWord node_id);
180 extern LIB3DSAPI void lib3ds_node_dump(Lib3dsNode *node, Lib3dsIntd level);
181 extern LIB3DSAPI Lib3dsBool lib3ds_node_read(Lib3dsNode *node, Lib3dsFile *file, Lib3dsIo *io);
182 extern LIB3DSAPI Lib3dsBool lib3ds_node_write(Lib3dsNode *node, Lib3dsFile *file, Lib3dsIo *io);
183
184 #ifdef __cplusplus
185 }
186 #endif
187 #endif
188