2 fegdk: FE Game Development Kit
3 Copyright (C) 2001-2008 Alexey "waker" Yakovenko
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version.
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details.
15 You should have received a copy of the GNU Library General Public
16 License along with this library; if not, write to the Free
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 waker@users.sourceforge.net
23 #ifndef __F_EXPMODEL_H
24 #define __F_EXPMODEL_H
29 #include "f_sceneobject.h"
30 #include "f_animation.h"
32 #include "f_helpers.h"
39 UNKNOWN_OBJECT_CLASS_ID
,
41 ENTITY_OBJECT_CLASS_ID
,
53 class expObject
: public baseObject
57 typedef std::vector
< smartPtr
<expObject
> > childrenList
;
66 childrenList mChildren
;
70 bool baseLoad (charParser
&p
, const char *fname
);
71 void recalcWorldTransforms (void);
73 virtual ~expObject (void)
80 // constructor & destructor
81 expObject (expObject
*parent
);
83 objClassID
getClassID (void) const { return mClassID
; }
85 const matrix4
&getMatrix (void) const
90 const matrix4
&getWorldMatrix (void) const
95 void setMatrix (const matrix4
&m
);
96 void setWorldMatrix (const matrix4
&m
);
97 virtual void load (charParser
&p
, const char *fname
) = 0;
98 virtual void render (const smartPtr
<expScene
> &scene
) const;
99 const childrenList
& children (void) const { return mChildren
; }
100 void addChild (const smartPtr
<expObject
> &child
);
101 void removeChild (const smartPtr
<expObject
> &child
);
102 void setParent (expObject
*parent
);
103 smartPtr
<expObject
> getParent (void) { return mpParent
; }
105 float frameRate (void) const { return mFrameRate
; }
107 typedef smartPtr
<expObject
> expObjectPtr
;
109 class expScene
: public baseObject
114 typedef std::vector
<materialPtr
> materialList
;
118 expObjectPtr mpSceneRoot
;
119 std::vector
<cStr
> mMtlNameList
;
120 std::vector
<cStr
> mBoneList
;
121 materialList mMtlList
;
123 void load (charParser
&p
);
124 expObjectPtr
loadObject (charParser
&p
);
132 int load (const char *fname
);
134 expObjectPtr
getRootNode (void) { return mpSceneRoot
; }
136 std::vector
<cStr
>& mtlNameList (void) { return mMtlNameList
; }
137 materialList
& mtlList (void) { return mMtlList
; }
139 virtual void render (void);
142 typedef smartPtr
<expScene
> expScenePtr
;
144 class expTriObject
: public expObject
149 std::vector
<vector3
> mVerts
;
150 std::vector
<vector3
> mColors
;
151 std::vector
<vector3
> mNormals
;
152 std::vector
<vector2
> mTexCoords
;
153 std::vector
<vector2
> mLightmapTexCoords
;
154 std::vector
<expFace
> mFaces
;
155 std::vector
<expFace
> mColorFaces
;
156 std::vector
<expFace
> mNormalFaces
;
157 std::vector
<expFace
> mTexCoordFaces
;
158 std::vector
<expFace
> mLightmapTexCoordFaces
;
159 std::vector
<int> mMtlIndex
;
160 std::vector
<vector3
> mTangents
;
161 std::vector
<vector3
> mBinormals
;
162 std::vector
<expFace
> mTSFaces
;
168 typedef std::vector
<boneInfl
> vertexInfl
;
169 std::vector
<vertexInfl
> mVertexInfluences
;
171 void flush (expScene
*scene
, int mtl
, int firstFace
, int numFaces
);
173 ~expTriObject (void) {}
177 expTriObject (expObject
*parent
);
179 virtual void load (charParser
&p
, const char *fname
);
180 void transformIntoWorldSpace (void);
182 std::vector
<vector3
>& verts () { return mVerts
; }
183 std::vector
<vector3
>& colors () { return mColors
; }
184 std::vector
<vector3
>& normals () { return mNormals
; }
185 std::vector
<vector2
>& texCoords () { return mTexCoords
; }
186 std::vector
<vector2
>& lightmapTexCoords () { return mLightmapTexCoords
; }
187 std::vector
<expFace
>& faces () { return mFaces
; }
188 std::vector
<expFace
>& colorFaces () { return mColorFaces
; }
189 std::vector
<expFace
>& normalFaces () { return mNormalFaces
; }
190 std::vector
<expFace
>& texCoordFaces () { return mTexCoordFaces
; }
191 std::vector
<expFace
>& lightmapTexCoordFaces () { return mLightmapTexCoordFaces
; }
192 std::vector
<int>& mtlIndex () { return mMtlIndex
; }
193 std::vector
<vector3
>& tangents () { return mTangents
; }
194 std::vector
<vector3
>& binormals () { return mBinormals
; }
195 std::vector
<expFace
>& tsFaces () { return mTSFaces
; }
197 const std::vector
<vector3
>& verts () const { return mVerts
; }
198 const std::vector
<vector3
>& colors () const { return mColors
; }
199 const std::vector
<vector3
>& normals () const { return mNormals
; }
200 const std::vector
<vector2
>& texCoords () const { return mTexCoords
; }
201 const std::vector
<vector2
>& lightmapTexCoords () const { return mLightmapTexCoords
; }
202 const std::vector
<expFace
>& faces () const { return mFaces
; }
203 const std::vector
<expFace
>& colorFaces () const { return mColorFaces
; }
204 const std::vector
<expFace
>& normalFaces () const { return mNormalFaces
; }
205 const std::vector
<expFace
>& texCoordFaces () const { return mTexCoordFaces
; }
206 const std::vector
<expFace
>& lightmapTexCoordFaces () const { return mLightmapTexCoordFaces
; }
207 const std::vector
<int>& mtlIndex () const { return mMtlIndex
; }
208 const std::vector
<vector3
>& tangents () const { return mTangents
; }
209 const std::vector
<vector3
>& binormals () const { return mBinormals
; }
210 const std::vector
<expFace
>& tsFaces () const { return mTSFaces
; }
212 virtual void render (expScene
*scene
);
215 typedef smartPtr
<expTriObject
> expTriObjectPtr
;
217 class expModel
: public sceneObject
236 bool mbLightmaps
, mbTangents
;
238 std::vector
< subset
> mSubSets
;
239 std::vector
< drawVertex_t
> mVerts
;
240 std::vector
< face
> mFaces
;
241 std::vector
< int > mMtlIndex
;
245 void saveGeometry (FILE *fp
) const;
249 expModel (expModel
*parent
);
251 void convertFrom (const expScenePtr
&s
, const expObjectPtr
&o
);
252 void save (const char *fname
, const expScenePtr
&s
) const;
255 class expEntityObject
: public expObject
261 std::map
<cStr
, cStr
> mProps
;
265 virtual void load (charParser
&p
, const char *fname
);
267 // constructor & destructor
268 expEntityObject (expObject
*parent
);
269 virtual void render (expScene
*scene
);
272 virtual ~expEntityObject () {};
275 class expRefObject
: public expObject
279 cStr mRefObjFileName
; // imported .mdl filename
280 expScene
* mpScene
; // imported scene ptr
284 virtual void load (charParser
&p
, const char *fname
);
286 // constructor & destructor
287 expRefObject (expObject
*parent
);
288 virtual void render (expScene
*scene
);
292 virtual ~expRefObject () {};
296 class expDummyObject
: public expObject
301 expDummyObject (expObject
*parent
);
302 virtual void load (charParser
&p
, const char *fname
);
303 virtual void render (expScene
*scene
);
308 #endif // __F_EXPMODEL_H