mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-03-29 00:06:43 +00:00
added missing columns for Light record
This commit is contained in:
parent
749fd418b5
commit
862e568f9b
3 changed files with 132 additions and 3 deletions
|
@ -288,7 +288,6 @@ void CSMWorld::CreatureRefIdAdapter::setData (const RefIdColumn *column, RefIdDa
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
CSMWorld::DoorRefIdAdapter::DoorRefIdAdapter (const NameColumns& columns,
|
CSMWorld::DoorRefIdAdapter::DoorRefIdAdapter (const NameColumns& columns,
|
||||||
const RefIdColumn *openSound, const RefIdColumn *closeSound)
|
const RefIdColumn *openSound, const RefIdColumn *closeSound)
|
||||||
: NameRefIdAdapter<ESM::Door> (UniversalId::Type_Door, columns), mOpenSound (openSound),
|
: NameRefIdAdapter<ESM::Door> (UniversalId::Type_Door, columns), mOpenSound (openSound),
|
||||||
|
@ -322,4 +321,69 @@ void CSMWorld::DoorRefIdAdapter::setData (const RefIdColumn *column, RefIdData&
|
||||||
record.get().mCloseSound = value.toString().toUtf8().constData();
|
record.get().mCloseSound = value.toString().toUtf8().constData();
|
||||||
else
|
else
|
||||||
NameRefIdAdapter<ESM::Door>::setData (column, data, index, value);
|
NameRefIdAdapter<ESM::Door>::setData (column, data, index, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CSMWorld::LightColumns::LightColumns (const InventoryColumns& columns)
|
||||||
|
: InventoryColumns (columns) {}
|
||||||
|
|
||||||
|
CSMWorld::LightRefIdAdapter::LightRefIdAdapter (const LightColumns& columns)
|
||||||
|
: InventoryRefIdAdapter<ESM::Light> (UniversalId::Type_Light, columns), mColumns (columns)
|
||||||
|
{}
|
||||||
|
|
||||||
|
QVariant CSMWorld::LightRefIdAdapter::getData (const RefIdColumn *column, const RefIdData& data,
|
||||||
|
int index) const
|
||||||
|
{
|
||||||
|
const Record<ESM::Light>& record = static_cast<const Record<ESM::Light>&> (
|
||||||
|
data.getRecord (RefIdData::LocalIndex (index, UniversalId::Type_Light)));
|
||||||
|
|
||||||
|
if (column==mColumns.mTime)
|
||||||
|
return record.get().mData.mTime;
|
||||||
|
|
||||||
|
if (column==mColumns.mRadius)
|
||||||
|
return record.get().mData.mRadius;
|
||||||
|
|
||||||
|
if (column==mColumns.mColor)
|
||||||
|
return record.get().mData.mColor;
|
||||||
|
|
||||||
|
if (column==mColumns.mSound)
|
||||||
|
return QString::fromUtf8 (record.get().mSound.c_str());
|
||||||
|
|
||||||
|
std::map<const RefIdColumn *, unsigned int>::const_iterator iter =
|
||||||
|
mColumns.mFlags.find (column);
|
||||||
|
|
||||||
|
if (iter!=mColumns.mFlags.end())
|
||||||
|
return (record.get().mData.mFlags & iter->second)!=0;
|
||||||
|
|
||||||
|
return InventoryRefIdAdapter<ESM::Light>::getData (column, data, index);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSMWorld::LightRefIdAdapter::setData (const RefIdColumn *column, RefIdData& data, int index,
|
||||||
|
const QVariant& value) const
|
||||||
|
{
|
||||||
|
Record<ESM::Light>& record = static_cast<Record<ESM::Light>&> (
|
||||||
|
data.getRecord (RefIdData::LocalIndex (index, UniversalId::Type_Light)));
|
||||||
|
|
||||||
|
if (column==mColumns.mTime)
|
||||||
|
record.get().mData.mTime = value.toInt();
|
||||||
|
else if (column==mColumns.mRadius)
|
||||||
|
record.get().mData.mRadius = value.toInt();
|
||||||
|
else if (column==mColumns.mColor)
|
||||||
|
record.get().mData.mColor = value.toInt();
|
||||||
|
else if (column==mColumns.mSound)
|
||||||
|
record.get().mSound = value.toString().toUtf8().constData();
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::map<const RefIdColumn *, unsigned int>::const_iterator iter =
|
||||||
|
mColumns.mFlags.find (column);
|
||||||
|
|
||||||
|
if (iter!=mColumns.mFlags.end())
|
||||||
|
{
|
||||||
|
if (value.toInt()!=0)
|
||||||
|
record.get().mData.mFlags |= iter->second;
|
||||||
|
else
|
||||||
|
record.get().mData.mFlags &= ~iter->second;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
InventoryRefIdAdapter<ESM::Light>::setData (column, data, index, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -660,6 +660,33 @@ namespace CSMWorld
|
||||||
const QVariant& value) const;
|
const QVariant& value) const;
|
||||||
///< If the data type does not match an exception is thrown.
|
///< If the data type does not match an exception is thrown.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct LightColumns : public InventoryColumns
|
||||||
|
{
|
||||||
|
const RefIdColumn *mTime;
|
||||||
|
const RefIdColumn *mRadius;
|
||||||
|
const RefIdColumn *mColor;
|
||||||
|
const RefIdColumn *mSound;
|
||||||
|
std::map<const RefIdColumn *, unsigned int> mFlags;
|
||||||
|
|
||||||
|
LightColumns (const InventoryColumns& columns);
|
||||||
|
};
|
||||||
|
|
||||||
|
class LightRefIdAdapter : public InventoryRefIdAdapter<ESM::Light>
|
||||||
|
{
|
||||||
|
LightColumns mColumns;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
LightRefIdAdapter (const LightColumns& columns);
|
||||||
|
|
||||||
|
virtual QVariant getData (const RefIdColumn *column, const RefIdData& data, int index)
|
||||||
|
const;
|
||||||
|
|
||||||
|
virtual void setData (const RefIdColumn *column, RefIdData& data, int index,
|
||||||
|
const QVariant& value) const;
|
||||||
|
///< If the data type does not match an exception is thrown.
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -203,6 +203,44 @@ CSMWorld::RefIdCollection::RefIdCollection()
|
||||||
mColumns.push_back (RefIdColumn ("Close Sound", ColumnBase::Display_String));
|
mColumns.push_back (RefIdColumn ("Close Sound", ColumnBase::Display_String));
|
||||||
const RefIdColumn *closeSound = &mColumns.back();
|
const RefIdColumn *closeSound = &mColumns.back();
|
||||||
|
|
||||||
|
LightColumns lightColumns (inventoryColumns);
|
||||||
|
|
||||||
|
mColumns.push_back (RefIdColumn ("Duration", ColumnBase::Display_Integer));
|
||||||
|
lightColumns.mTime = &mColumns.back();
|
||||||
|
|
||||||
|
mColumns.push_back (RefIdColumn ("Radius", ColumnBase::Display_Integer));
|
||||||
|
lightColumns.mRadius = &mColumns.back();
|
||||||
|
|
||||||
|
mColumns.push_back (RefIdColumn ("Colour", ColumnBase::Display_Integer));
|
||||||
|
lightColumns.mColor = &mColumns.back();
|
||||||
|
|
||||||
|
mColumns.push_back (RefIdColumn ("Sound", ColumnBase::Display_String));
|
||||||
|
lightColumns.mSound = &mColumns.back();
|
||||||
|
|
||||||
|
static const struct
|
||||||
|
{
|
||||||
|
const char *mName;
|
||||||
|
unsigned int mFlag;
|
||||||
|
} sLightFlagTable[] =
|
||||||
|
{
|
||||||
|
{ "Dynamic", ESM::Light::Dynamic },
|
||||||
|
{ "Portable", ESM::Light::Carry },
|
||||||
|
{ "Negative Light", ESM::Light::Negative },
|
||||||
|
{ "Flickering", ESM::Light::Flicker },
|
||||||
|
{ "Slow Flickering", ESM::Light::Flicker },
|
||||||
|
{ "Pulsing", ESM::Light::Pulse },
|
||||||
|
{ "Slow Pulsing", ESM::Light::PulseSlow },
|
||||||
|
{ "Fire", ESM::Light::Fire },
|
||||||
|
{ "Off by default", ESM::Light::OffDefault },
|
||||||
|
{ 0, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
|
for (int i=0; sLightFlagTable[i].mName; ++i)
|
||||||
|
{
|
||||||
|
mColumns.push_back (RefIdColumn (sLightFlagTable[i].mName, ColumnBase::Display_Boolean));
|
||||||
|
lightColumns.mFlags.insert (std::make_pair (&mColumns.back(), sLightFlagTable[i].mFlag));
|
||||||
|
}
|
||||||
|
|
||||||
mAdapters.insert (std::make_pair (UniversalId::Type_Activator,
|
mAdapters.insert (std::make_pair (UniversalId::Type_Activator,
|
||||||
new NameRefIdAdapter<ESM::Activator> (UniversalId::Type_Activator, nameColumns)));
|
new NameRefIdAdapter<ESM::Activator> (UniversalId::Type_Activator, nameColumns)));
|
||||||
mAdapters.insert (std::make_pair (UniversalId::Type_Potion,
|
mAdapters.insert (std::make_pair (UniversalId::Type_Potion,
|
||||||
|
@ -229,7 +267,7 @@ CSMWorld::RefIdCollection::RefIdCollection()
|
||||||
mAdapters.insert (std::make_pair (UniversalId::Type_ItemLevelledList,
|
mAdapters.insert (std::make_pair (UniversalId::Type_ItemLevelledList,
|
||||||
new BaseRefIdAdapter<ESM::ItemLevList> (UniversalId::Type_ItemLevelledList, baseColumns)));
|
new BaseRefIdAdapter<ESM::ItemLevList> (UniversalId::Type_ItemLevelledList, baseColumns)));
|
||||||
mAdapters.insert (std::make_pair (UniversalId::Type_Light,
|
mAdapters.insert (std::make_pair (UniversalId::Type_Light,
|
||||||
new InventoryRefIdAdapter<ESM::Light> (UniversalId::Type_Light, inventoryColumns)));
|
new LightRefIdAdapter (lightColumns)));
|
||||||
mAdapters.insert (std::make_pair (UniversalId::Type_Lockpick,
|
mAdapters.insert (std::make_pair (UniversalId::Type_Lockpick,
|
||||||
new ToolRefIdAdapter<ESM::Lockpick> (UniversalId::Type_Lockpick, toolsColumns)));
|
new ToolRefIdAdapter<ESM::Lockpick> (UniversalId::Type_Lockpick, toolsColumns)));
|
||||||
mAdapters.insert (std::make_pair (UniversalId::Type_Miscellaneous,
|
mAdapters.insert (std::make_pair (UniversalId::Type_Miscellaneous,
|
||||||
|
|
Loading…
Reference in a new issue