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 <cstdint>
|
||||
#include <boost/iterator/indirect_iterator.hpp>
|
||||
#include <functional>
|
||||
|
||||
namespace dk {
|
||||
template <uint32_t D>
|
||||
|
@ -38,6 +39,7 @@ namespace dk {
|
|||
typedef typename LayerBase<D>::coords coords;
|
||||
typedef boost::indirect_iterator<typename LayerList::iterator> 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 ( Tyler&& ) = default;
|
||||
|
@ -54,9 +56,12 @@ namespace dk {
|
|||
const_iterator end ( void ) const;
|
||||
|
||||
void preload ( const coords& parFrom, const coords& parTo );
|
||||
void register_for_layeradd ( layer_callback parCallback );
|
||||
void unregister_for_layeradd ( layer_callback parCallback );
|
||||
|
||||
private:
|
||||
LayerList m_layers;
|
||||
std::vector<layer_callback> m_layer_add_callbacks;
|
||||
};
|
||||
} //namespace dk
|
||||
|
||||
|
|
|
@ -37,6 +37,8 @@ namespace dk {
|
|||
struct TileInfo {
|
||||
typedef Vector<D> coords;
|
||||
|
||||
TileInfo ( const LayerBase<D>& parLayer );
|
||||
|
||||
coords tile_size;
|
||||
coords map_size;
|
||||
};
|
||||
|
@ -76,6 +78,8 @@ namespace dk {
|
|||
template <typename T>
|
||||
typename Layer<T, D>::const_iterator cend ( const Layer<T, D>& parLayer ) const;
|
||||
|
||||
void set_tile_info ( const TileInfo<D>* parTileInfo );
|
||||
|
||||
private:
|
||||
void clip_pixel_offset ( void );
|
||||
|
||||
|
|
|
@ -20,10 +20,21 @@ namespace dk {
|
|||
LayeredViewport<D>::LayeredViewport (Tyler<D>& 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>
|
||||
LayeredViewport<D>::~LayeredViewport() {
|
||||
LayeredViewport<D>::~LayeredViewport() noexcept {
|
||||
m_tyler.unregister_for_layeradd(this);
|
||||
}
|
||||
|
||||
template <uint32_t D>
|
||||
|
|
|
@ -16,6 +16,13 @@
|
|||
*/
|
||||
|
||||
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>
|
||||
inline std::size_t hash_value (const TileInfo<D>& parTProps) noexcept {
|
||||
std::size_t seed = 0;
|
||||
|
@ -33,7 +40,6 @@ namespace dk {
|
|||
m_tyler(parTyler),
|
||||
m_tile_info(parTileInfo)
|
||||
{
|
||||
DK_ASSERT(m_tile_info);
|
||||
}
|
||||
|
||||
template <uint32_t D>
|
||||
|
@ -43,7 +49,6 @@ namespace dk {
|
|||
m_tyler(parTyler),
|
||||
m_tile_info(parTileInfo)
|
||||
{
|
||||
DK_ASSERT(m_tile_info);
|
||||
DK_ASSERT(parPos < parPos + m_tile_info->map_size); //parSize > 0
|
||||
DK_ASSERT(m_tile_info->map_size + parPos <= m_tile_info->map_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 {
|
||||
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
|
||||
|
|
Loading…
Add table
Reference in a new issue