Exemple #1
0
void Camera::UpdateVisibility(const Collider& Collider)
{
    using std::sort;
    using std::unique;

    for (auto&& buf : m_Buffers) {
        buf.clear();
    }

    const Vec2i LeftUpper = -m_CurTranslation - Vec2f(1.f, 1.f);
    const Vec2i RightLower =
        -m_CurTranslation + m_ViewHalfSize * 2.f + Vec2f(1.f, 1.f);
    m_CollisionsEnd = Collider.CopyColliding(
        LeftUpper, RightLower, m_CollisionsBuffer.begin());

    sort(m_CollisionsBuffer.begin(), m_CollisionsEnd);
    m_CollisionsEnd = unique(m_CollisionsBuffer.begin(), m_CollisionsEnd);

    for (auto CollisionsIter = m_CollisionsBuffer.begin();
         CollisionsIter != m_CollisionsEnd; ++CollisionsIter) {
        const int TextureDescr = (*CollisionsIter)->GetTextureDescriptor();
        if (TextureDescr != -1) {
            m_Buffers[TextureDescr].push_back(*CollisionsIter);
        }
    }
}