1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-01-30 19:15:41 +00:00

Convert position on construction

This commit is contained in:
elsid 2024-05-26 19:57:39 +02:00
parent 33ef7fc8ca
commit b64069156d
No known key found for this signature in database
GPG key ID: 4DE04C198CBA7625

View file

@ -877,15 +877,19 @@ namespace MWRender
namespace
{
osg::Vec2f clampToCell(const osg::Vec3f& cellPos, const osg::Vec2i& cell)
{
return osg::Vec2f(std::clamp<float>(cellPos.x(), cell.x(), cell.x() + 1),
std::clamp<float>(cellPos.y(), cell.y(), cell.y() + 1));
}
class CollectIntersecting
{
public:
explicit CollectIntersecting(
bool activeGridOnly, const osg::Vec3f& position, const osg::Vec2i& cell, ESM::RefId worldspace)
: mActiveGridOnly(activeGridOnly)
, mPosition(position)
, mCell(cell)
, mWorldspace(worldspace)
, mPosition(clampToCell(position / getCellSize(worldspace), cell))
{
}
@ -893,33 +897,23 @@ namespace MWRender
{
if (mActiveGridOnly && !std::get<2>(id))
return;
if (intersects(id, mPosition))
if (intersects(id))
mCollected.insert(id);
}
const std::set<ChunkId>& getCollected() const { return mCollected; }
private:
bool intersects(ChunkId id, osg::Vec3f pos) const
bool intersects(ChunkId id) const
{
pos /= getCellSize(mWorldspace);
clampToCell(pos);
osg::Vec2f center = std::get<0>(id);
float halfSize = std::get<1>(id) / 2;
return pos.x() >= center.x() - halfSize && pos.y() >= center.y() - halfSize
&& pos.x() <= center.x() + halfSize && pos.y() <= center.y() + halfSize;
}
void clampToCell(osg::Vec3f& cellPos) const
{
cellPos.x() = std::clamp<float>(cellPos.x(), mCell.x(), mCell.x() + 1);
cellPos.y() = std::clamp<float>(cellPos.y(), mCell.y(), mCell.y() + 1);
const osg::Vec2f center = std::get<0>(id);
const float halfSize = std::get<1>(id) / 2;
return mPosition.x() >= center.x() - halfSize && mPosition.y() >= center.y() - halfSize
&& mPosition.x() <= center.x() + halfSize && mPosition.y() <= center.y() + halfSize;
}
bool mActiveGridOnly;
osg::Vec3f mPosition;
osg::Vec2i mCell;
ESM::RefId mWorldspace;
osg::Vec2f mPosition;
std::set<ChunkId> mCollected;
};
}