mirror of
https://github.com/OpenMW/openmw.git
synced 2025-06-28 06:11:37 +00:00
implements std::visit for CellVariant, fixes struct vs class forward decl
This commit is contained in:
parent
0723c32428
commit
ebfee18e35
6 changed files with 40 additions and 9 deletions
|
@ -57,7 +57,7 @@ namespace ESM
|
||||||
struct ItemLevList;
|
struct ItemLevList;
|
||||||
struct TimeStamp;
|
struct TimeStamp;
|
||||||
struct RefId;
|
struct RefId;
|
||||||
struct CellVariant;
|
class CellVariant;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
namespace MWWorld
|
namespace MWWorld
|
||||||
{
|
{
|
||||||
struct Cell;
|
class Cell;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace MWRender
|
namespace MWRender
|
||||||
|
|
|
@ -43,7 +43,7 @@ namespace ESM
|
||||||
{
|
{
|
||||||
struct Cell;
|
struct Cell;
|
||||||
struct RefNum;
|
struct RefNum;
|
||||||
struct CellVariant;
|
class CellVariant;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace Terrain
|
namespace Terrain
|
||||||
|
@ -74,7 +74,7 @@ namespace DetourNavigator
|
||||||
namespace MWWorld
|
namespace MWWorld
|
||||||
{
|
{
|
||||||
class GroundcoverStore;
|
class GroundcoverStore;
|
||||||
struct Cell;
|
class Cell;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace Debug
|
namespace Debug
|
||||||
|
|
|
@ -24,7 +24,6 @@ namespace MWWorld
|
||||||
|
|
||||||
class Cell : public ESM::CellVariant
|
class Cell : public ESM::CellVariant
|
||||||
{
|
{
|
||||||
friend MWWorld::CellStore;
|
|
||||||
struct MoodData
|
struct MoodData
|
||||||
{
|
{
|
||||||
uint32_t mAmbiantColor;
|
uint32_t mAmbiantColor;
|
||||||
|
|
|
@ -842,7 +842,7 @@ namespace MWWorld
|
||||||
{
|
{
|
||||||
std::map<ESM::RefNum, ESM::RefId> refNumToID; // used to detect refID modifications
|
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();
|
updateMergedRefs();
|
||||||
}
|
}
|
||||||
|
@ -1099,7 +1099,7 @@ namespace MWWorld
|
||||||
|
|
||||||
bool CellStore::operator==(const CellStore& right) const
|
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)
|
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); }
|
bool isEsm4() const { return std::holds_alternative<const ESM4::Cell*>(mVariant); }
|
||||||
|
|
||||||
const ESM4::Cell& getEsm4() const;
|
const ESM4::Cell& getEsm4() const;
|
||||||
|
|
||||||
const ESM::Cell& getEsm3() 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
|
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
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue