mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-02-19 12:40:49 +00:00
implements std::visit for CellVariant, fixes struct vs class forward decl
This commit is contained in:
parent
0723c32428
commit
ebfee18e35
@ -57,7 +57,7 @@ namespace ESM
|
||||
struct ItemLevList;
|
||||
struct TimeStamp;
|
||||
struct RefId;
|
||||
struct CellVariant;
|
||||
class CellVariant;
|
||||
|
||||
}
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
|
||||
namespace MWWorld
|
||||
{
|
||||
struct Cell;
|
||||
class Cell;
|
||||
}
|
||||
|
||||
namespace MWRender
|
||||
|
@ -43,7 +43,7 @@ namespace ESM
|
||||
{
|
||||
struct Cell;
|
||||
struct RefNum;
|
||||
struct CellVariant;
|
||||
class CellVariant;
|
||||
}
|
||||
|
||||
namespace Terrain
|
||||
@ -74,7 +74,7 @@ namespace DetourNavigator
|
||||
namespace MWWorld
|
||||
{
|
||||
class GroundcoverStore;
|
||||
struct Cell;
|
||||
class Cell;
|
||||
}
|
||||
|
||||
namespace Debug
|
||||
|
@ -24,7 +24,6 @@ namespace MWWorld
|
||||
|
||||
class Cell : public ESM::CellVariant
|
||||
{
|
||||
friend MWWorld::CellStore;
|
||||
struct MoodData
|
||||
{
|
||||
uint32_t mAmbiantColor;
|
||||
|
@ -842,7 +842,7 @@ namespace MWWorld
|
||||
{
|
||||
std::map<ESM::RefNum, ESM::RefId> refNumToID; // used to detect refID modifications
|
||||
|
||||
std::visit([&refNumToID, this](auto&& cell) { this->loadRefs(*cell, refNumToID); }, mCellVariant.mVariant);
|
||||
std::visit([&refNumToID, this](auto&& cell) { this->loadRefs(*cell, refNumToID); }, mCellVariant);
|
||||
|
||||
updateMergedRefs();
|
||||
}
|
||||
@ -1099,7 +1099,7 @@ namespace MWWorld
|
||||
|
||||
bool CellStore::operator==(const CellStore& right) const
|
||||
{
|
||||
return std::visit(Visitor{}, this->mCellVariant.mVariant, right.mCellVariant.mVariant);
|
||||
return std::visit(Visitor{}, this->mCellVariant, right.mCellVariant);
|
||||
}
|
||||
|
||||
void CellStore::setFog(std::unique_ptr<ESM::FogState>&& fog)
|
||||
|
@ -35,10 +35,24 @@ namespace ESM
|
||||
}
|
||||
|
||||
bool isEsm4() const { return std::holds_alternative<const ESM4::Cell*>(mVariant); }
|
||||
|
||||
const ESM4::Cell& getEsm4() const;
|
||||
|
||||
const ESM::Cell& getEsm3() const;
|
||||
|
||||
template <class F>
|
||||
auto visit(F&& f) const
|
||||
{
|
||||
return std::visit(f, mVariant);
|
||||
}
|
||||
template <class F>
|
||||
auto visit(F&& f)
|
||||
{
|
||||
return std::visit(f, mVariant);
|
||||
}
|
||||
template <class F>
|
||||
auto visit(F&& f, const CellVariant& v2) const
|
||||
{
|
||||
return std::visit(f, mVariant, v2.mVariant);
|
||||
}
|
||||
};
|
||||
|
||||
struct ReferenceVariant
|
||||
@ -65,4 +79,22 @@ namespace ESM
|
||||
};
|
||||
}
|
||||
|
||||
namespace std
|
||||
{
|
||||
template <class F>
|
||||
auto visit(F&& f, const ESM::CellVariant& v)
|
||||
{
|
||||
return v.visit(f);
|
||||
}
|
||||
template <class F>
|
||||
auto visit(F&& f, ESM::CellVariant& v)
|
||||
{
|
||||
return v.visit(f);
|
||||
}
|
||||
template <class F>
|
||||
auto visit(F&& f, const ESM::CellVariant& v1, const ESM::CellVariant& v2)
|
||||
{
|
||||
return v1.visit(f, v2);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user