DELEME4
This commit is contained in:
parent
eecd1d1649
commit
4df71e46a1
4 changed files with 33 additions and 3 deletions
|
@ -25,6 +25,7 @@
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <boost/iterator/indirect_iterator.hpp>
|
#include <boost/iterator/indirect_iterator.hpp>
|
||||||
|
#include <functional>
|
||||||
|
|
||||||
namespace dk {
|
namespace dk {
|
||||||
template <uint32_t D>
|
template <uint32_t D>
|
||||||
|
@ -38,6 +39,7 @@ namespace dk {
|
||||||
typedef typename LayerBase<D>::coords coords;
|
typedef typename LayerBase<D>::coords coords;
|
||||||
typedef boost::indirect_iterator<typename LayerList::iterator> iterator;
|
typedef boost::indirect_iterator<typename LayerList::iterator> iterator;
|
||||||
typedef boost::indirect_iterator<typename LayerList::const_iterator> const_iterator;
|
typedef boost::indirect_iterator<typename LayerList::const_iterator> const_iterator;
|
||||||
|
typedef std::function<void(const LayerBase<D>&, bool) noexcept> layer_callback;
|
||||||
|
|
||||||
Tyler ( void );
|
Tyler ( void );
|
||||||
Tyler ( Tyler&& ) = default;
|
Tyler ( Tyler&& ) = default;
|
||||||
|
@ -54,9 +56,12 @@ namespace dk {
|
||||||
const_iterator end ( void ) const;
|
const_iterator end ( void ) const;
|
||||||
|
|
||||||
void preload ( const coords& parFrom, const coords& parTo );
|
void preload ( const coords& parFrom, const coords& parTo );
|
||||||
|
void register_for_layeradd ( layer_callback parCallback );
|
||||||
|
void unregister_for_layeradd ( layer_callback parCallback );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
LayerList m_layers;
|
LayerList m_layers;
|
||||||
|
std::vector<layer_callback> m_layer_add_callbacks;
|
||||||
};
|
};
|
||||||
} //namespace dk
|
} //namespace dk
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,8 @@ namespace dk {
|
||||||
struct TileInfo {
|
struct TileInfo {
|
||||||
typedef Vector<D> coords;
|
typedef Vector<D> coords;
|
||||||
|
|
||||||
|
TileInfo ( const LayerBase<D>& parLayer );
|
||||||
|
|
||||||
coords tile_size;
|
coords tile_size;
|
||||||
coords map_size;
|
coords map_size;
|
||||||
};
|
};
|
||||||
|
@ -76,6 +78,8 @@ namespace dk {
|
||||||
template <typename T>
|
template <typename T>
|
||||||
typename Layer<T, D>::const_iterator cend ( const Layer<T, D>& parLayer ) const;
|
typename Layer<T, D>::const_iterator cend ( const Layer<T, D>& parLayer ) const;
|
||||||
|
|
||||||
|
void set_tile_info ( const TileInfo<D>* parTileInfo );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void clip_pixel_offset ( void );
|
void clip_pixel_offset ( void );
|
||||||
|
|
||||||
|
|
|
@ -20,10 +20,21 @@ namespace dk {
|
||||||
LayeredViewport<D>::LayeredViewport (Tyler<D>& parTyler) :
|
LayeredViewport<D>::LayeredViewport (Tyler<D>& parTyler) :
|
||||||
m_tyler(parTyler)
|
m_tyler(parTyler)
|
||||||
{
|
{
|
||||||
|
for (const auto& layer : m_tyler) {
|
||||||
|
const TileInfo<D> tinfo(layer);
|
||||||
|
auto it_found = m_views.find(tinfo);
|
||||||
|
if (m_views.end() == it_found) {
|
||||||
|
auto it_new = m_views.insert(it_found, Viewport<D>(m_tyler, nullptr));
|
||||||
|
it_new->second.set_tile_info(&it_new->first);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_tyler.register_for_layeradd(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <uint32_t D>
|
template <uint32_t D>
|
||||||
LayeredViewport<D>::~LayeredViewport() {
|
LayeredViewport<D>::~LayeredViewport() noexcept {
|
||||||
|
m_tyler.unregister_for_layeradd(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <uint32_t D>
|
template <uint32_t D>
|
||||||
|
|
|
@ -16,6 +16,13 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace dk {
|
namespace dk {
|
||||||
|
template <uint32_t D>
|
||||||
|
TileInfo<D>::TileInfo (const LayerBase<D>& parLayer) :
|
||||||
|
tile_size(parLayer.tile_size()),
|
||||||
|
map_size(parLayer.map_size())
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
template <uint32_t D>
|
template <uint32_t D>
|
||||||
inline std::size_t hash_value (const TileInfo<D>& parTProps) noexcept {
|
inline std::size_t hash_value (const TileInfo<D>& parTProps) noexcept {
|
||||||
std::size_t seed = 0;
|
std::size_t seed = 0;
|
||||||
|
@ -33,7 +40,6 @@ namespace dk {
|
||||||
m_tyler(parTyler),
|
m_tyler(parTyler),
|
||||||
m_tile_info(parTileInfo)
|
m_tile_info(parTileInfo)
|
||||||
{
|
{
|
||||||
DK_ASSERT(m_tile_info);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <uint32_t D>
|
template <uint32_t D>
|
||||||
|
@ -43,7 +49,6 @@ namespace dk {
|
||||||
m_tyler(parTyler),
|
m_tyler(parTyler),
|
||||||
m_tile_info(parTileInfo)
|
m_tile_info(parTileInfo)
|
||||||
{
|
{
|
||||||
DK_ASSERT(m_tile_info);
|
|
||||||
DK_ASSERT(parPos < parPos + m_tile_info->map_size); //parSize > 0
|
DK_ASSERT(parPos < parPos + m_tile_info->map_size); //parSize > 0
|
||||||
DK_ASSERT(m_tile_info->map_size + parPos <= m_tile_info->map_size);
|
DK_ASSERT(m_tile_info->map_size + parPos <= m_tile_info->map_size);
|
||||||
m_tyler.preload(m_view.position(), m_view.position() + this->size());
|
m_tyler.preload(m_view.position(), m_view.position() + this->size());
|
||||||
|
@ -145,4 +150,9 @@ namespace dk {
|
||||||
auto Viewport<D>::pixel_offset() const -> coords {
|
auto Viewport<D>::pixel_offset() const -> coords {
|
||||||
return static_cast<coords>(m_pixel_offset);
|
return static_cast<coords>(m_pixel_offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <uint32_t D>
|
||||||
|
void Viewport<D>::set_tile_info (const TileInfo<D>* parTileInfo) {
|
||||||
|
m_tile_info = parTileInfo;
|
||||||
|
}
|
||||||
} //namespace dk
|
} //namespace dk
|
||||||
|
|
Loading…
Add table
Reference in a new issue