1 #include "loadbody.hpp" 2 3 #include "esmreader.hpp" 4 #include "esmwriter.hpp" 5 #include "defs.hpp" 6 7 namespace ESM 8 { 9 unsigned int BodyPart::sRecordId = REC_BODY; 10 load(ESMReader & esm,bool & isDeleted)11 void BodyPart::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<'M','O','D','L'>::value: 27 mModel = esm.getHString(); 28 break; 29 case ESM::FourCC<'F','N','A','M'>::value: 30 mRace = esm.getHString(); 31 break; 32 case ESM::FourCC<'B','Y','D','T'>::value: 33 esm.getHT(mData, 4); 34 hasData = true; 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 BYDT subrecord"); 50 } 51 save(ESMWriter & esm,bool isDeleted) const52 void BodyPart::save(ESMWriter &esm, bool isDeleted) const 53 { 54 esm.writeHNCString("NAME", mId); 55 56 if (isDeleted) 57 { 58 esm.writeHNCString("DELE", ""); 59 return; 60 } 61 62 esm.writeHNCString("MODL", mModel); 63 esm.writeHNOCString("FNAM", mRace); 64 esm.writeHNT("BYDT", mData, 4); 65 } 66 blank()67 void BodyPart::blank() 68 { 69 mData.mPart = 0; 70 mData.mVampire = 0; 71 mData.mFlags = 0; 72 mData.mType = 0; 73 74 mModel.clear(); 75 mRace.clear(); 76 } 77 } 78