Newer
Older
/* Copyright (c) 2006, NIF File Format Library and Tools
All rights reserved. Please see niflib.h for licence. */
#include <string>
#include <iostream>
#include "nif_enums.h"
namespace Niflib {
/* Template wrappers around Nif IO routines */
template <typename T> inline T ReadValue(istream& in);
template <typename T> inline void WriteValue( T val, ostream& out);
template <> inline int ReadValue<int> (istream& in) { return ReadInt( in ); }
template <> inline uint ReadValue<uint> (istream& in) { return ReadUInt( in ); }
template <> inline ushort ReadValue<ushort>(istream& in) { return ReadUShort( in ); }
template <> inline short ReadValue<short> (istream& in) { return ReadShort( in ); }
template <> inline byte ReadValue<byte> (istream& in) { return ReadByte( in ); }
template <> inline void WriteValue<int> ( int val, ostream& out) { WriteInt( val, out ); }
template <> inline void WriteValue<uint> ( uint val, ostream& out) { WriteUInt( val, out ); }
template <> inline void WriteValue<ushort>( ushort val, ostream& out) { WriteUShort( val, out ); }
template <> inline void WriteValue<short> ( short val, ostream& out) { WriteShort( val, out ); }
template <> inline void WriteValue<byte> ( byte val, ostream& out) { WriteByte( val, out ); }
/*!
* ForceType
*/
void NifStream( ForceType & val, istream& in, uint version ) { val = ForceType(ReadValue<uint>( in )); }
void NifStream( ForceType const & val, ostream& out, uint version ) { WriteValue<uint>( val, out ); }
ostream & operator<<( ostream & out, ForceType const & val ) {
switch ( val ) {
case FORCE_PLANAR: return out << "FORCE_PLANAR";
case FORCE_SPHERICAL: return out << "FORCE_SPHERICAL";
case FORCE_UNKNOWN: return out << "FORCE_UNKNOWN";
default: return out << "Invalid Value! - " << uint(val);
}
}
/*!
* PixelLayout
*/
void NifStream( PixelLayout & val, istream& in, uint version ) { val = PixelLayout(ReadValue<uint>( in )); }
void NifStream( PixelLayout const & val, ostream& out, uint version ) { WriteValue<uint>( val, out ); }
ostream & operator<<( ostream & out, PixelLayout const & val ) {
switch ( val ) {
case PIX_LAY_PALETTISED: return out << "PIX_LAY_PALETTISED";
case PIX_LAY_HIGH_COLOR_16: return out << "PIX_LAY_HIGH_COLOR_16";
case PIX_LAY_TRUE_COLOR_32: return out << "PIX_LAY_TRUE_COLOR_32";
case PIX_LAY_COMPRESSED: return out << "PIX_LAY_COMPRESSED";
case PIX_LAY_BUMPMAP: return out << "PIX_LAY_BUMPMAP";
case PIX_LAY_DEFAULT: return out << "PIX_LAY_DEFAULT";
default: return out << "Invalid Value! - " << uint(val);
}
}
/*!
* LightMode
*/
void NifStream( LightMode & val, istream& in, uint version ) { val = LightMode(ReadValue<uint>( in )); }
void NifStream( LightMode const & val, ostream& out, uint version ) { WriteValue<uint>( val, out ); }
ostream & operator<<( ostream & out, LightMode const & val ) {
switch ( val ) {
case LIGHT_MODE_EMISSIVE: return out << "LIGHT_MODE_EMISSIVE";
case LIGHT_MODE_EMI_AMB_DIF: return out << "LIGHT_MODE_EMI_AMB_DIF";
default: return out << "Invalid Value! - " << uint(val);
}
}
/*!
* MipMapFormat
*/
void NifStream( MipMapFormat & val, istream& in, uint version ) { val = MipMapFormat(ReadValue<uint>( in )); }
void NifStream( MipMapFormat const & val, ostream& out, uint version ) { WriteValue<uint>( val, out ); }
ostream & operator<<( ostream & out, MipMapFormat const & val ) {
switch ( val ) {
case MIP_FMT_NO: return out << "MIP_FMT_NO";
case MIP_FMT_YES: return out << "MIP_FMT_YES";
case MIP_FMT_DEFAULT: return out << "MIP_FMT_DEFAULT";
default: return out << "Invalid Value! - " << uint(val);
}
}
/*!
* AlphaFormat
*/
void NifStream( AlphaFormat & val, istream& in, uint version ) { val = AlphaFormat(ReadValue<uint>( in )); }
void NifStream( AlphaFormat const & val, ostream& out, uint version ) { WriteValue<uint>( val, out ); }
ostream & operator<<( ostream & out, AlphaFormat const & val ) {
switch ( val ) {
case ALPHA_NONE: return out << "ALPHA_NONE";
case ALPHA_BINARY: return out << "ALPHA_BINARY";
case ALPHA_SMOOTH: return out << "ALPHA_SMOOTH";
case ALPHA_DEFAULT: return out << "ALPHA_DEFAULT";
default: return out << "Invalid Value! - " << uint(val);
}
}
/*!
* TexFilterMode
*/
void NifStream( TexFilterMode & val, istream& in, uint version ) { val = TexFilterMode(ReadValue<uint>( in )); }
void NifStream( TexFilterMode const & val, ostream& out, uint version ) { WriteValue<uint>( val, out ); }
ostream & operator<<( ostream & out, TexFilterMode const & val ) {
switch ( val ) {
case FILTER_NEAREST: return out << "FILTER_NEAREST";
case FILTER_BILERP: return out << "FILTER_BILERP";
case FILTER_TRILERP: return out << "FILTER_TRILERP";
case FILTER_NEAREST_MIPNEAREST: return out << "FILTER_NEAREST_MIPNEAREST";
case FILTER_NEAREST_MIPLERP: return out << "FILTER_NEAREST_MIPLERP";
case FILTER_BILERP_MIPNEAREST: return out << "FILTER_BILERP_MIPNEAREST";
default: return out << "Invalid Value! - " << uint(val);
}
}
/*!
* MotionQuality
*/
void NifStream( MotionQuality & val, istream& in, uint version ) { val = MotionQuality(ReadValue<byte>( in )); }
void NifStream( MotionQuality const & val, ostream& out, uint version ) { WriteValue<byte>( val, out ); }
ostream & operator<<( ostream & out, MotionQuality const & val ) {
switch ( val ) {
case MO_QUAL_MOVING: return out << "MO_QUAL_MOVING";
case MO_QUAL_FIXED: return out << "MO_QUAL_FIXED";
case MO_QUAL_KEYFRAMED: return out << "MO_QUAL_KEYFRAMED";
case MO_QUAL_MOVING2: return out << "MO_QUAL_MOVING2";
case MO_QUAL_MOVING3: return out << "MO_QUAL_MOVING3";
case MO_QUAL_CRITICAL: return out << "MO_QUAL_CRITICAL";
case MO_QUAL_BULLET: return out << "MO_QUAL_BULLET";
case MO_QUAL_USER: return out << "MO_QUAL_USER";
case MO_QUAL_NULL: return out << "MO_QUAL_NULL";
default: return out << "Invalid Value! - " << uint(val);
}
}
/*!
* OblivionLayer
*/
void NifStream( OblivionLayer & val, istream& in, uint version ) { val = OblivionLayer(ReadValue<uint>( in )); }
void NifStream( OblivionLayer const & val, ostream& out, uint version ) { WriteValue<uint>( val, out ); }
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
ostream & operator<<( ostream & out, OblivionLayer const & val ) {
switch ( val ) {
case OL_UNIDENTIFIED: return out << "OL_UNIDENTIFIED";
case OL_STATIC: return out << "OL_STATIC";
case OL_ANIM_STATIC: return out << "OL_ANIM_STATIC";
case OL_TRANSPARENT: return out << "OL_TRANSPARENT";
case OL_CLUTTER: return out << "OL_CLUTTER";
case OL_WEAPON: return out << "OL_WEAPON";
case OL_PROJECTILE: return out << "OL_PROJECTILE";
case OL_SPELL: return out << "OL_SPELL";
case OL_BIPED: return out << "OL_BIPED";
case OL_TREES: return out << "OL_TREES";
case OL_PROPS: return out << "OL_PROPS";
case OL_WATER: return out << "OL_WATER";
case OL_TRIGGER: return out << "OL_TRIGGER";
case OL_TERRAIN: return out << "OL_TERRAIN";
case OL_TRAP: return out << "OL_TRAP";
case OL_NONCOLLIDABLE: return out << "OL_NONCOLLIDABLE";
case OL_CLOUD_TRAP: return out << "OL_CLOUD_TRAP";
case OL_GROUND: return out << "OL_GROUND";
case OL_PORTAL: return out << "OL_PORTAL";
case OL_STAIRS: return out << "OL_STAIRS";
case OL_CHAR_CONTROLLER: return out << "OL_CHAR_CONTROLLER";
case OL_AVOID_BOX: return out << "OL_AVOID_BOX";
case OL_UNKNOWN1: return out << "OL_UNKNOWN1";
case OL_UNKNOWN2: return out << "OL_UNKNOWN2";
case OL_CAMERA_PICK: return out << "OL_CAMERA_PICK";
case OL_ITEM_PICK: return out << "OL_ITEM_PICK";
case OL_LINE_OF_SIGHT: return out << "OL_LINE_OF_SIGHT";
case OL_PATH_PICK: return out << "OL_PATH_PICK";
case OL_CUSTOM_PICK_1: return out << "OL_CUSTOM_PICK_1";
case OL_CUSTOM_PICK_2: return out << "OL_CUSTOM_PICK_2";
case OL_SPELL_EXPLOSION: return out << "OL_SPELL_EXPLOSION";
case OL_DROPPING_PICK: return out << "OL_DROPPING_PICK";
case OL_OTHER: return out << "OL_OTHER";
case OL_HEAD: return out << "OL_HEAD";
case OL_BODY: return out << "OL_BODY";
case OL_SPINE1: return out << "OL_SPINE1";
case OL_SPINE2: return out << "OL_SPINE2";
case OL_L_UPPER_ARM: return out << "OL_L_UPPER_ARM";
case OL_L_FOREARM: return out << "OL_L_FOREARM";
case OL_L_HAND: return out << "OL_L_HAND";
case OL_L_THIGH: return out << "OL_L_THIGH";
case OL_L_CALF: return out << "OL_L_CALF";
case OL_L_FOOT: return out << "OL_L_FOOT";
case OL_R_UPPER_ARM: return out << "OL_R_UPPER_ARM";
case OL_R_FOREARM: return out << "OL_R_FOREARM";
case OL_R_HAND: return out << "OL_R_HAND";
case OL_R_THIGH: return out << "OL_R_THIGH";
case OL_R_CALF: return out << "OL_R_CALF";
case OL_R_FOOT: return out << "OL_R_FOOT";
case OL_TAIL: return out << "OL_TAIL";
case OL_SIDE_WEAPON: return out << "OL_SIDE_WEAPON";
case OL_SHEILD: return out << "OL_SHEILD";
case OL_QUIVER: return out << "OL_QUIVER";
case OL_BACK_WEAPON: return out << "OL_BACK_WEAPON";
case OL_BACK_WEAPON2: return out << "OL_BACK_WEAPON2";
case OL_PONYTAIL: return out << "OL_PONYTAIL";
case OL_WING: return out << "OL_WING";
case OL_NULL: return out << "OL_NULL";
default: return out << "Invalid Value! - " << uint(val);
}
}
/*!
* KeyType
*/
void NifStream( KeyType & val, istream& in, uint version ) { val = KeyType(ReadValue<uint>( in )); }
void NifStream( KeyType const & val, ostream& out, uint version ) { WriteValue<uint>( val, out ); }
ostream & operator<<( ostream & out, KeyType const & val ) {
switch ( val ) {
case LINEAR_KEY: return out << "LINEAR_KEY";
case QUADRATIC_KEY: return out << "QUADRATIC_KEY";
case TBC_KEY: return out << "TBC_KEY";
case XYZ_ROTATION_KEY: return out << "XYZ_ROTATION_KEY";
case UNKNOWN_KEY: return out << "UNKNOWN_KEY";
default: return out << "Invalid Value! - " << uint(val);
}
}
/*!
* VertMode
*/
void NifStream( VertMode & val, istream& in, uint version ) { val = VertMode(ReadValue<uint>( in )); }
void NifStream( VertMode const & val, ostream& out, uint version ) { WriteValue<uint>( val, out ); }
ostream & operator<<( ostream & out, VertMode const & val ) {
switch ( val ) {
case VERT_MODE_SRC_IGNORE: return out << "VERT_MODE_SRC_IGNORE";
case VERT_MODE_SRC_EMISSIVE: return out << "VERT_MODE_SRC_EMISSIVE";
case VERT_MODE_SRC_AMB_DIF: return out << "VERT_MODE_SRC_AMB_DIF";
default: return out << "Invalid Value! - " << uint(val);
}
}
/*!
* HavokMaterial
*/
void NifStream( HavokMaterial & val, istream& in, uint version ) { val = HavokMaterial(ReadValue<uint>( in )); }
void NifStream( HavokMaterial const & val, ostream& out, uint version ) { WriteValue<uint>( val, out ); }
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
ostream & operator<<( ostream & out, HavokMaterial const & val ) {
switch ( val ) {
case HAV_MAT_STONE: return out << "HAV_MAT_STONE";
case HAV_MAT_CLOTH: return out << "HAV_MAT_CLOTH";
case HAV_MAT_DIRT: return out << "HAV_MAT_DIRT";
case HAV_MAT_GLASS: return out << "HAV_MAT_GLASS";
case HAV_MAT_GRASS: return out << "HAV_MAT_GRASS";
case HAV_MAT_METAL: return out << "HAV_MAT_METAL";
case HAV_MAT_ORGANIC: return out << "HAV_MAT_ORGANIC";
case HAV_MAT_SKIN: return out << "HAV_MAT_SKIN";
case HAV_MAT_WATER: return out << "HAV_MAT_WATER";
case HAV_MAT_WOOD: return out << "HAV_MAT_WOOD";
case HAV_MAT_HEAVY_STONE: return out << "HAV_MAT_HEAVY_STONE";
case HAV_MAT_HEAVY_METAL: return out << "HAV_MAT_HEAVY_METAL";
case HAV_MAT_HEAVY_WOOD: return out << "HAV_MAT_HEAVY_WOOD";
case HAV_MAT_CHAIN: return out << "HAV_MAT_CHAIN";
case HAV_MAT_SNOW: return out << "HAV_MAT_SNOW";
case HAV_MAT_STONE_STAIRS: return out << "HAV_MAT_STONE_STAIRS";
case HAV_MAT_CLOTH_STAIRS: return out << "HAV_MAT_CLOTH_STAIRS";
case HAV_MAT_DIRT_STAIRS: return out << "HAV_MAT_DIRT_STAIRS";
case HAV_MAT_GLASS_STAIRS: return out << "HAV_MAT_GLASS_STAIRS";
case HAV_MAT_GRASS_STAIRS: return out << "HAV_MAT_GRASS_STAIRS";
case HAV_MAT_METAL_STAIRS: return out << "HAV_MAT_METAL_STAIRS";
case HAV_MAT_ORGANIC_STAIRS: return out << "HAV_MAT_ORGANIC_STAIRS";
case HAV_MAT_SKIN_STAIRS: return out << "HAV_MAT_SKIN_STAIRS";
case HAV_MAT_WATER_STAIRS: return out << "HAV_MAT_WATER_STAIRS";
case HAV_MAT_WOOD_STAIRS: return out << "HAV_MAT_WOOD_STAIRS";
case HAV_MAT_HEAVY_STONE_STAIRS: return out << "HAV_MAT_HEAVY_STONE_STAIRS";
case HAV_MAT_HEAVY_METAL_STAIRS: return out << "HAV_MAT_HEAVY_METAL_STAIRS";
case HAV_MAT_HEAVY_WOOD_STAIRS: return out << "HAV_MAT_HEAVY_WOOD_STAIRS";
case HAV_MAT_CHAIN_STAIRS: return out << "HAV_MAT_CHAIN_STAIRS";
case HAV_MAT_SNOW_STAIRS: return out << "HAV_MAT_SNOW_STAIRS";
case HAV_MAT_ELEVATOR: return out << "HAV_MAT_ELEVATOR";
default: return out << "Invalid Value! - " << uint(val);
}
}
/*!
* PixelFormat
*/
void NifStream( PixelFormat & val, istream& in, uint version ) { val = PixelFormat(ReadValue<uint>( in )); }
void NifStream( PixelFormat const & val, ostream& out, uint version ) { WriteValue<uint>( val, out ); }
ostream & operator<<( ostream & out, PixelFormat const & val ) {
switch ( val ) {
case PX_FMT_RGB8: return out << "PX_FMT_RGB8";
case PX_FMT_RGBA8: return out << "PX_FMT_RGBA8";
case PX_FMT_PAL8: return out << "PX_FMT_PAL8";
default: return out << "Invalid Value! - " << uint(val);
}
}
/*!
* CycleType
*/
void NifStream( CycleType & val, istream& in, uint version ) { val = CycleType(ReadValue<uint>( in )); }
void NifStream( CycleType const & val, ostream& out, uint version ) { WriteValue<uint>( val, out ); }
ostream & operator<<( ostream & out, CycleType const & val ) {
switch ( val ) {
case CYCLE_LOOP: return out << "CYCLE_LOOP";
case CYCLE_REVERSE: return out << "CYCLE_REVERSE";
case CYCLE_CLAMP: return out << "CYCLE_CLAMP";
default: return out << "Invalid Value! - " << uint(val);
}
}
/*!
* ApplyMode
*/
void NifStream( ApplyMode & val, istream& in, uint version ) { val = ApplyMode(ReadValue<uint>( in )); }
void NifStream( ApplyMode const & val, ostream& out, uint version ) { WriteValue<uint>( val, out ); }
ostream & operator<<( ostream & out, ApplyMode const & val ) {
switch ( val ) {
case APPLY_REPLACE: return out << "APPLY_REPLACE";
case APPLY_DECAL: return out << "APPLY_DECAL";
case APPLY_MODULATE: return out << "APPLY_MODULATE";
case APPLY_HILIGHT: return out << "APPLY_HILIGHT";
case APPLY_HILIGHT2: return out << "APPLY_HILIGHT2";
default: return out << "Invalid Value! - " << uint(val);
}
}
/*!
* FieldType
*/
void NifStream( FieldType & val, istream& in, uint version ) { val = FieldType(ReadValue<uint>( in )); }
void NifStream( FieldType const & val, ostream& out, uint version ) { WriteValue<uint>( val, out ); }
ostream & operator<<( ostream & out, FieldType const & val ) {
switch ( val ) {
case FIELD_WIND: return out << "FIELD_WIND";
case FIELD_POINT: return out << "FIELD_POINT";
default: return out << "Invalid Value! - " << uint(val);
}
}
/*!
* BillboardMode
*/
void NifStream( BillboardMode & val, istream& in, uint version ) { val = BillboardMode(ReadValue<ushort>( in )); }
void NifStream( BillboardMode const & val, ostream& out, uint version ) { WriteValue<ushort>( val, out ); }
ostream & operator<<( ostream & out, BillboardMode const & val ) {
switch ( val ) {
case ALWAYS_FACE_CAMERA: return out << "ALWAYS_FACE_CAMERA";
case ROTATE_ABOUT_UP: return out << "ROTATE_ABOUT_UP";
case RIGID_FACE_CAMERA: return out << "RIGID_FACE_CAMERA";
case ALWAYS_FACE_CENTER: return out << "ALWAYS_FACE_CENTER";
case RIGID_FACE_CENTER: return out << "RIGID_FACE_CENTER";
default: return out << "Invalid Value! - " << uint(val);
}
}
/*!
* TexType
*/
void NifStream( TexType & val, istream& in, uint version ) { val = TexType(ReadValue<uint>( in )); }
void NifStream( TexType const & val, ostream& out, uint version ) { WriteValue<uint>( val, out ); }
ostream & operator<<( ostream & out, TexType const & val ) {
switch ( val ) {
case BASE_MAP: return out << "BASE_MAP";
case DARK_MAP: return out << "DARK_MAP";
case DETAIL_MAP: return out << "DETAIL_MAP";
case GLOSS_MAP: return out << "GLOSS_MAP";
case GLOW_MAP: return out << "GLOW_MAP";
case BUMP_MAP: return out << "BUMP_MAP";
case DECAL_0_MAP: return out << "DECAL_0_MAP";
case DECAL_1_MAP: return out << "DECAL_1_MAP";
default: return out << "Invalid Value! - " << uint(val);
}
}
/*!
* TexClampMode
*/
void NifStream( TexClampMode & val, istream& in, uint version ) { val = TexClampMode(ReadValue<uint>( in )); }
void NifStream( TexClampMode const & val, ostream& out, uint version ) { WriteValue<uint>( val, out ); }
ostream & operator<<( ostream & out, TexClampMode const & val ) {
switch ( val ) {
case CLAMP_S_CLAMP_T: return out << "CLAMP_S_CLAMP_T";
case CLAMP_S_WRAP_T: return out << "CLAMP_S_WRAP_T";
case WRAP_S_CLAMP_T: return out << "WRAP_S_CLAMP_T";
case WRAP_S_WRAP_T: return out << "WRAP_S_WRAP_T";
default: return out << "Invalid Value! - " << uint(val);
}
}