Merge remote-tracking branch 'scrawl/master'

This commit is contained in:
Marc Zinnschlag 2015-03-12 10:29:39 +01:00
commit 056bc66c6c
56 changed files with 457 additions and 406 deletions

View file

@ -15,6 +15,7 @@ namespace ESM {
mAiPackage.mList.clear();
mInventory.mList.clear();
mSpells.mList.clear();
mTransport.mList.clear();
mScale = 1.f;
mHasAI = false;
@ -59,6 +60,10 @@ namespace ESM {
esm.getHExact(&mAiData, sizeof(mAiData));
mHasAI = true;
break;
case ESM::FourCC<'D','O','D','T'>::value:
case ESM::FourCC<'D','N','A','M'>::value:
mTransport.add(esm);
break;
case AI_Wander:
case AI_Activate:
case AI_Escort:
@ -94,6 +99,7 @@ namespace ESM {
if (mHasAI) {
esm.writeHNT("AIDT", mAiData, sizeof(mAiData));
}
mTransport.save(esm);
mAiPackage.save(esm);
}
@ -120,5 +126,11 @@ namespace ESM {
mAiData.blank();
mAiData.mServices = 0;
mAiPackage.mList.clear();
mTransport.mList.clear();
}
const std::vector<Transport::Dest>& Creature::getTransport() const
{
return mTransport.mList;
}
}

View file

@ -6,6 +6,7 @@
#include "loadcont.hpp"
#include "spelllist.hpp"
#include "aipackage.hpp"
#include "transport.hpp"
namespace ESM
{
@ -92,6 +93,9 @@ struct Creature
bool mHasAI;
AIData mAiData;
AIPackageList mAiPackage;
Transport mTransport;
const std::vector<Transport::Dest>& getTransport() const;
void load(ESMReader &esm);
void save(ESMWriter &esm) const;

View file

@ -12,7 +12,7 @@ class ESMReader;
class ESMWriter;
/*
* Game setting, with automatic cleaning of "dirty" entries.
* Game setting
*
*/

View file

@ -14,7 +14,7 @@ namespace ESM
mSpells.mList.clear();
mInventory.mList.clear();
mTransport.clear();
mTransport.mList.clear();
mAiPackage.mList.clear();
bool hasNpdt = false;
@ -81,14 +81,8 @@ namespace ESM
mHasAI= true;
break;
case ESM::FourCC<'D','O','D','T'>::value:
{
Dest dodt;
esm.getHExact(&dodt.mPos, 24);
mTransport.push_back(dodt);
break;
}
case ESM::FourCC<'D','N','A','M'>::value:
mTransport.back().mCellName = esm.getHString();
mTransport.add(esm);
break;
case AI_Wander:
case AI_Activate:
@ -131,11 +125,8 @@ namespace ESM
esm.writeHNT("AIDT", mAiData, sizeof(mAiData));
}
typedef std::vector<Dest>::const_iterator DestIter;
for (DestIter it = mTransport.begin(); it != mTransport.end(); ++it) {
esm.writeHNT("DODT", it->mPos, sizeof(it->mPos));
esm.writeHNOCString("DNAM", it->mCellName);
}
mTransport.save(esm);
mAiPackage.save(esm);
}
@ -177,7 +168,7 @@ namespace ESM
mSpells.mList.clear();
mAiData.blank();
mHasAI = false;
mTransport.clear();
mTransport.mList.clear();
mAiPackage.mList.clear();
mName.clear();
mModel.clear();
@ -198,4 +189,9 @@ namespace ESM
else // NPC_DEFAULT
return mNpdt52.mRank;
}
const std::vector<Transport::Dest>& NPC::getTransport() const
{
return mTransport.mList;
}
}

View file

@ -9,6 +9,7 @@
#include "aipackage.hpp"
#include "spelllist.hpp"
#include "loadskil.hpp"
#include "transport.hpp"
namespace ESM {
@ -98,12 +99,6 @@ struct NPC
char mUnknown1, mUnknown2, mUnknown3;
int mGold;
}; // 12 bytes
struct Dest
{
Position mPos;
std::string mCellName;
};
#pragma pack(pop)
unsigned char mNpdtType;
@ -122,7 +117,10 @@ struct NPC
AIData mAiData;
bool mHasAI;
std::vector<Dest> mTransport;
Transport mTransport;
const std::vector<Transport::Dest>& getTransport() const;
AIPackageList mAiPackage;
std::string mId, mName, mModel, mRace, mClass, mFaction, mScript;

View file

@ -0,0 +1,33 @@
#include "transport.hpp"
#include <components/esm/esmreader.hpp>
#include <components/esm/esmwriter.hpp>
namespace ESM
{
void Transport::add(ESMReader &esm)
{
if (esm.retSubName().val == ESM::FourCC<'D','O','D','T'>::value)
{
Dest dodt;
esm.getHExact(&dodt.mPos, 24);
mList.push_back(dodt);
}
else if (esm.retSubName().val == ESM::FourCC<'D','N','A','M'>::value)
{
mList.back().mCellName = esm.getHString();
}
}
void Transport::save(ESMWriter &esm) const
{
typedef std::vector<Dest>::const_iterator DestIter;
for (DestIter it = mList.begin(); it != mList.end(); ++it)
{
esm.writeHNT("DODT", it->mPos, sizeof(it->mPos));
esm.writeHNOCString("DNAM", it->mCellName);
}
}
}

View file

@ -0,0 +1,36 @@
#ifndef OPENMW_COMPONENTS_ESM_TRANSPORT_H
#define OPENMW_COMPONENTS_ESM_TRANSPORT_H
#include <string>
#include <vector>
#include "defs.hpp"
namespace ESM
{
class ESMReader;
class ESMWriter;
/// List of travel service destination. Shared by CREA and NPC_ records.
struct Transport
{
struct Dest
{
Position mPos;
std::string mCellName;
};
std::vector<Dest> mList;
/// Load one destination, assumes the subrecord name was already read
void add(ESMReader &esm);
void save(ESMWriter &esm) const;
};
}
#endif