Don't register platforms that have gone out from the bottom.
This fixes the assert occurring after a few seconds playing.
This commit is contained in:
parent
e9253fae1f
commit
d30a93bb5b
1 changed files with 24 additions and 6 deletions
|
@ -29,6 +29,18 @@
|
|||
#include <algorithm>
|
||||
|
||||
namespace cloonel {
|
||||
namespace {
|
||||
///----------------------------------------------------------------------
|
||||
///----------------------------------------------------------------------
|
||||
boost::circular_buffer<Platform>::const_iterator FindFirstVisible (const boost::circular_buffer<Platform>& parPlatforms) {
|
||||
auto curr = parPlatforms.begin();
|
||||
while (curr != parPlatforms.end() and curr->TopLeft().y() < 0.0f) {
|
||||
++curr;
|
||||
}
|
||||
return curr;
|
||||
}
|
||||
} //unnamed namespace
|
||||
|
||||
///--------------------------------------------------------------------------
|
||||
///--------------------------------------------------------------------------
|
||||
PlatformSet::PlatformSet (SDLMain* parSdl) :
|
||||
|
@ -52,18 +64,24 @@ namespace cloonel {
|
|||
///--------------------------------------------------------------------------
|
||||
///--------------------------------------------------------------------------
|
||||
void PlatformSet::CopyBars (std::vector<const HorzCollisionBar*>& parOut) const {
|
||||
parOut.reserve(parOut.size() + m_platforms.size());
|
||||
for (auto& platf : m_platforms) {
|
||||
parOut.push_back(platf.TopCollisionBar());
|
||||
auto eleCopy = FindFirstVisible(m_platforms);
|
||||
const size_t count = m_platforms.end() - eleCopy;
|
||||
parOut.reserve(parOut.size() + count);
|
||||
while (m_platforms.end() != eleCopy) {
|
||||
parOut.push_back(eleCopy->TopCollisionBar());
|
||||
++eleCopy;
|
||||
}
|
||||
}
|
||||
|
||||
///--------------------------------------------------------------------------
|
||||
///--------------------------------------------------------------------------
|
||||
void PlatformSet::CopyDrawables (std::vector<const Drawable*>& parOut) const {
|
||||
parOut.reserve(parOut.size() + m_platforms.size());
|
||||
for (auto& platf : m_platforms) {
|
||||
parOut.push_back(&platf);
|
||||
auto eleCopy = FindFirstVisible(m_platforms);
|
||||
const size_t count = m_platforms.end() - eleCopy;
|
||||
parOut.reserve(parOut.size() + count);
|
||||
while (m_platforms.end() != eleCopy) {
|
||||
parOut.push_back(&*eleCopy);
|
||||
++eleCopy;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue