#ifndef CSV_RENDER_CELLWATER_H #define CSV_RENDER_CELLWATER_H #include <string> #include <osg/ref_ptr> #include <QModelIndex> #include <QObject> class QModelIndex; namespace osg { class Geometry; class Group; class PositionAttitudeTransform; } namespace CSMWorld { struct Cell; class CellCoordinates; class Data; template <typename ESXRecordT> struct Record; } namespace CSVRender { /// For exterior cells, this adds a patch of water to fit the size of the cell. For interior cells with water, this /// adds a large patch of water much larger than the typical size of a cell. class CellWater : public QObject { Q_OBJECT public: CellWater(CSMWorld::Data& data, osg::Group* cellNode, const std::string& id, const CSMWorld::CellCoordinates& cellCoords); ~CellWater(); void updateCellData(const CSMWorld::Record<CSMWorld::Cell>& cellRecord); void reloadAssets(); private slots: void cellDataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight); private: void recreate(); static const int CellSize; CSMWorld::Data& mData; std::string mId; osg::Group* mParentNode; osg::ref_ptr<osg::PositionAttitudeTransform> mWaterTransform; osg::ref_ptr<osg::Group> mWaterGroup; osg::ref_ptr<osg::Geometry> mWaterGeometry; bool mDeleted; bool mExterior; bool mHasWater; }; } #endif