1 /*
2   OpenMW - The completely unofficial reimplementation of Morrowind
3   Copyright (C) 2008-2010  Nicolay Korslund
4   Email: < korslund@gmail.com >
5   WWW: https://openmw.org/
6 
7   This file (record.h) is part of the OpenMW package.
8 
9   OpenMW is distributed as free software: you can redistribute it
10   and/or modify it under the terms of the GNU General Public License
11   version 3, as published by the Free Software Foundation.
12 
13   This program is distributed in the hope that it will be useful, but
14   WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16   General Public License for more details.
17 
18   You should have received a copy of the GNU General Public License
19   version 3 along with this program. If not, see
20   https://www.gnu.org/licenses/ .
21 
22  */
23 
24 #ifndef OPENMW_COMPONENTS_NIF_RECORD_HPP
25 #define OPENMW_COMPONENTS_NIF_RECORD_HPP
26 
27 #include <string>
28 
29 namespace Nif
30 {
31 
32 class NIFFile;
33 class NIFStream;
34 
35 enum RecordType
36 {
37   RC_MISSING = 0,
38   RC_NiNode,
39   RC_NiSwitchNode,
40   RC_NiLODNode,
41   RC_NiBillboardNode,
42   RC_AvoidNode,
43   RC_NiCollisionSwitch,
44   RC_NiTriShape,
45   RC_NiTriStrips,
46   RC_NiLines,
47   RC_NiParticles,
48   RC_NiBSParticleNode,
49   RC_NiCamera,
50   RC_NiTexturingProperty,
51   RC_NiFogProperty,
52   RC_NiMaterialProperty,
53   RC_NiZBufferProperty,
54   RC_NiAlphaProperty,
55   RC_NiVertexColorProperty,
56   RC_NiShadeProperty,
57   RC_NiDitherProperty,
58   RC_NiWireframeProperty,
59   RC_NiSpecularProperty,
60   RC_NiStencilProperty,
61   RC_NiVisController,
62   RC_NiGeomMorpherController,
63   RC_NiKeyframeController,
64   RC_NiAlphaController,
65   RC_NiRollController,
66   RC_NiUVController,
67   RC_NiPathController,
68   RC_NiMaterialColorController,
69   RC_NiBSPArrayController,
70   RC_NiParticleSystemController,
71   RC_NiFlipController,
72   RC_NiBSAnimationNode,
73   RC_NiLight,
74   RC_NiTextureEffect,
75   RC_NiVertWeightsExtraData,
76   RC_NiTextKeyExtraData,
77   RC_NiStringExtraData,
78   RC_NiGravity,
79   RC_NiPlanarCollider,
80   RC_NiParticleGrowFade,
81   RC_NiParticleColorModifier,
82   RC_NiParticleRotation,
83   RC_NiFloatData,
84   RC_NiTriShapeData,
85   RC_NiTriStripsData,
86   RC_NiLinesData,
87   RC_NiVisData,
88   RC_NiColorData,
89   RC_NiPixelData,
90   RC_NiMorphData,
91   RC_NiKeyframeData,
92   RC_NiSkinData,
93   RC_NiUVData,
94   RC_NiPosData,
95   RC_NiRotatingParticlesData,
96   RC_NiParticlesData,
97   RC_NiSequenceStreamHelper,
98   RC_NiSourceTexture,
99   RC_NiSkinInstance,
100   RC_RootCollisionNode,
101   RC_NiSphericalCollider,
102   RC_NiLookAtController,
103   RC_NiPalette,
104   RC_NiIntegerExtraData,
105   RC_NiIntegersExtraData,
106   RC_NiBinaryExtraData,
107   RC_NiBooleanExtraData,
108   RC_NiVectorExtraData,
109   RC_NiColorExtraData,
110   RC_NiFloatExtraData,
111   RC_NiFloatsExtraData,
112   RC_NiStringPalette,
113   RC_NiBoolData,
114   RC_NiSkinPartition,
115   RC_BSXFlags,
116   RC_BSBound,
117   RC_bhkBlendController,
118   RC_NiFloatInterpolator,
119   RC_NiPoint3Interpolator,
120   RC_NiBoolInterpolator,
121   RC_NiTransformInterpolator,
122   RC_NiColorInterpolator,
123   RC_BSShaderTextureSet,
124   RC_BSLODTriShape,
125   RC_BSShaderProperty,
126   RC_BSShaderPPLightingProperty,
127   RC_BSShaderNoLightingProperty
128 };
129 
130 /// Base class for all records
131 struct Record
132 {
133     // Record type and type name
134     int recType{RC_MISSING};
135     std::string recName;
136     unsigned int recIndex{~0u};
137 
138     Record() = default;
139 
140     /// Parses the record from file
141     virtual void read(NIFStream *nif) = 0;
142 
143     /// Does post-processing, after the entire tree is loaded
postNif::Record144     virtual void post(NIFFile *nif) {}
145 
~RecordNif::Record146     virtual ~Record() {}
147 };
148 
149 } // Namespace
150 #endif
151