Generate new platforms as you climb.

This is actually broken as platforms never unregister themselves. An upcoming
refactoring will change things, so registering/unregistering will not be
necessary anymore.
This commit is contained in:
King_DuckZ 2014-08-06 16:04:17 +02:00
parent f142367a8a
commit d5d75b034e
2 changed files with 22 additions and 27 deletions

View file

@ -115,7 +115,8 @@ namespace cloonel {
///-------------------------------------------------------------------------- ///--------------------------------------------------------------------------
PlatformSystem::PlatformSystem (const char* parTexturePath, SDLMain* parSDLMain, GameplayScene* parScene, float parMaxDistance) : PlatformSystem::PlatformSystem (const char* parTexturePath, SDLMain* parSDLMain, GameplayScene* parScene, float parMaxDistance) :
Placeable(float2(0.0f)), Placeable(float2(0.0f)),
m_localdata(new LocalData(parTexturePath, parSDLMain, parScene, parMaxDistance)) m_localdata(new LocalData(parTexturePath, parSDLMain, parScene, parMaxDistance)),
m_targetAverage(parMaxDistance / 5.25f) //TODO: change this value to make up for the difficulty
{ {
} }
@ -128,21 +129,27 @@ namespace cloonel {
///-------------------------------------------------------------------------- ///--------------------------------------------------------------------------
///-------------------------------------------------------------------------- ///--------------------------------------------------------------------------
void PlatformSystem::SpawnPlatforms() { void PlatformSystem::SpawnPlatforms() {
//const int2 refWH(REFERENCE_WIDTH, REFERENCE_HEIGHT); const size_t totalPlatf = MAX_PLATFORMS_ON_SCREEN;
//const int2 platfWH(g_platfWidth, g_platfHeight); const float2 platfWH(static_cast<float>(g_platfWidth), static_cast<float>(g_platfHeight));
// if (m_localdata.platforms.back().platform->TopLeft().y() <= 0.0f) { size_t freePlatforms = 0;
// const float2 newPos(static_cast<float>(std::rand() % (refWH.x() - platfWH.x())), static_cast<float>(std::rand() % (refWH.y() - platfWH.y()))); for (size_t z = 0; z < m_localdata->platforms.size(); ++z) {
if (m_localdata->platforms[z].platform->GetPos().y() < 0.0f)
++freePlatforms;
else
break;
}
freePlatforms = totalPlatf - m_localdata->platforms.size() + freePlatforms;
//if (m_localdata->platforms.empty()) { float prevPlatf = (m_localdata->platforms.empty() ? 0.0f : m_localdata->platforms.back().platform->GetPos().y() + GetPos().y());
// const float2 newPos(static_cast<float>(std::rand() % (refWH.x() - platfWH.x())), static_cast<float>(std::rand() % (refWH.y() - platfWH.y()))); while (static_cast<float>(REFERENCE_HEIGHT) - prevPlatf >= m_targetAverage) {
// m_localdata->platforms.push_back(Platform(m_localdata->sdlmain, newPos, &m_localdata->texture, static_cast<float2>(platfWH))); assert(freePlatforms > 0);
const auto newPos(PositionForNewPlatf(prevPlatf, m_targetAverage, m_localdata->maxDistance, freePlatforms));
--freePlatforms;
prevPlatf = newPos.y();
// PlatformInfo& newPlatf = m_localdata->platforms.back(); m_localdata->platforms.push_back(Platform(m_localdata->sdlmain, newPos, &m_localdata->texture, platfWH));
// m_localdata->scene->AddDrawable(&newPlatf.platform); }
// const Mover::PlaceableTicketType ticket = m_localdata->mover.RegisterPlaceable(&newPlatf.platform);
// newPlatf.ticket = ticket;
//}
} }
///-------------------------------------------------------------------------- ///--------------------------------------------------------------------------
@ -152,20 +159,7 @@ namespace cloonel {
//Spawn the initial platforms //Spawn the initial platforms
m_localdata->platforms.clear(); m_localdata->platforms.clear();
const size_t totalPlatf = MAX_PLATFORMS_ON_SCREEN; this->SpawnPlatforms();
//const auto totalPlatfFloatInv = 1.0f / static_cast<float>(totalPlatf);
const float2 platfWH(static_cast<float>(g_platfWidth), static_cast<float>(g_platfHeight));
float prevPlatf = 0.0f;
const float averageTarget = m_localdata->maxDistance / 5.25f; //TODO: change this value to make up for the difficulty
for (size_t z = 0; z < totalPlatf; ++z) {
const auto newPos(PositionForNewPlatf(prevPlatf, averageTarget, m_localdata->maxDistance, totalPlatf - z));
prevPlatf = newPos.y();
m_localdata->platforms.push_back(Platform(m_localdata->sdlmain, newPos, &m_localdata->texture, platfWH));
if (static_cast<float>(REFERENCE_HEIGHT) - newPos.y() < averageTarget)
break;
}
} }
///-------------------------------------------------------------------------- ///--------------------------------------------------------------------------

View file

@ -52,6 +52,7 @@ namespace cloonel {
const std::unique_ptr<LocalData> m_localdata; const std::unique_ptr<LocalData> m_localdata;
ColliderRegisterFunc m_registerToCollider; ColliderRegisterFunc m_registerToCollider;
ColliderUnregisterFunc m_unregisterFromCollider; ColliderUnregisterFunc m_unregisterFromCollider;
float m_targetAverage;
}; };
} //namespace cloonel } //namespace cloonel