#ifndef id73F121AEE1EB4BA0980FAC025E5CDF05 #define id73F121AEE1EB4BA0980FAC025E5CDF05 #include "doorkeeper/components/tileiterator.hpp" #include "doorkeeper/implem/maptypes.hpp" #include namespace dk { //MapType_IsometricStaggered, //MapType_Isometric, //MapType_Orthogonal, //MapType_Hex template class PixelConv { public: typedef Vector coords; explicit PixelConv ( MapTypes parType ); virtual coords to_pixel ( const coords& parFrom, const coords& parSize ) const = 0; MapTypes map_type ( void ) const; private: const MapTypes m_map_type; }; template class PixelConvSquare : public PixelConv { public: using base_class = PixelConv; using typename base_class::coords; PixelConvSquare ( void ); virtual ~PixelConvSquare ( void ) noexcept = default; virtual coords to_pixel ( const coords& parFrom, const coords& parSize ) const; }; class PixelConvDiamond : public PixelConv<2> { public: using base_class = PixelConv<2>; using base_class::coords; PixelConvDiamond ( bool parStaggered, bool parFirstReentrant ); virtual ~PixelConvDiamond ( void ) noexcept = default; virtual coords to_pixel ( const coords& parFrom, const coords& parSize ) const; protected: PixelConvDiamond ( MapTypes parType, bool parStaggered, bool parFirstReentrant ); }; class PixelConvHalfDiamond : public PixelConvDiamond { public: using base_class = PixelConvDiamond; using base_class::coords; explicit PixelConvHalfDiamond ( bool parHalfVertically ); virtual ~PixelConvHalfDiamond ( void ) noexcept = default; virtual coords to_pixel ( const coords& parFrom, const coords& parSize ) const; private: const coords m_div; }; class PixelConvHex : public PixelConv<2> { public: using base_class = PixelConv<2>; using base_class::coords; explicit PixelConvHex ( bool parFirstReentrant ); virtual ~PixelConvHex ( void ) noexcept = default; virtual coords to_pixel ( const coords& parFrom, const coords& parSize ) const; }; template Vector<2> get_diamond_coordinates ( const TileIterator& parIterator, const Vector<2>& parSize ) a_pure; template Vector<2> get_half_diamond_coordinates ( const TileIterator& parIterator, const Vector<2>& parSize ) a_pure; template Vector get_square_coordinates ( const TileIterator& parIterator, const Vector& parSize ) a_pure; template Vector<2> get_hex_coordinates ( const TileIterator& parIterator, const Vector<2>& parSize ) a_pure; } //namespace dk #include "doorkeeper/implem/pixelconv.inl" #endif