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