1 #include "loadsndg.hpp" 2 3 #include "esmreader.hpp" 4 #include "esmwriter.hpp" 5 #include "defs.hpp" 6 7 namespace ESM 8 { 9 unsigned int SoundGenerator::sRecordId = REC_SNDG; 10 load(ESMReader & esm,bool & isDeleted)11 void SoundGenerator::load(ESMReader &esm, bool &isDeleted) 12 { 13 isDeleted = false; 14 15 bool hasName = false; 16 bool hasData = false; 17 while (esm.hasMoreSubs()) 18 { 19 esm.getSubName(); 20 switch (esm.retSubName().intval) 21 { 22 case ESM::SREC_NAME: 23 mId = esm.getHString(); 24 hasName = true; 25 break; 26 case ESM::FourCC<'D','A','T','A'>::value: 27 esm.getHT(mType, 4); 28 hasData = true; 29 break; 30 case ESM::FourCC<'C','N','A','M'>::value: 31 mCreature = esm.getHString(); 32 break; 33 case ESM::FourCC<'S','N','A','M'>::value: 34 mSound = esm.getHString(); 35 break; 36 case ESM::SREC_DELE: 37 esm.skipHSub(); 38 isDeleted = true; 39 break; 40 default: 41 esm.fail("Unknown subrecord"); 42 break; 43 } 44 } 45 46 if (!hasName) 47 esm.fail("Missing NAME subrecord"); 48 if (!hasData && !isDeleted) 49 esm.fail("Missing DATA subrecord"); 50 } save(ESMWriter & esm,bool isDeleted) const51 void SoundGenerator::save(ESMWriter &esm, bool isDeleted) const 52 { 53 esm.writeHNCString("NAME", mId); 54 55 if (isDeleted) 56 { 57 esm.writeHNCString("DELE", ""); 58 return; 59 } 60 61 esm.writeHNT("DATA", mType, 4); 62 esm.writeHNOCString("CNAM", mCreature); 63 esm.writeHNOCString("SNAM", mSound); 64 65 } 66 blank()67 void SoundGenerator::blank() 68 { 69 mType = LeftFoot; 70 mCreature.clear(); 71 mSound.clear(); 72 } 73 } 74