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