#include "BounceManager.h"
BounceManager::BounceManager()
: m_Settings()
{
}
BounceManager::~BounceManager()
{
}
void BounceManager::Init()
{
// TODO: create a globaltype object for those setting
// TODO: validate m_Settings.minRelativeScale != m_Settings.maxRelativeScale
m_Settings.minRelativeScale = 0.5;
m_Settings.maxRelativeScale = 2.5;
m_Settings.frequency = 1.0;
m_Settings.amplitude = 0.15;
m_Settings.duration = 1.0;
m_Settings.minDampingDelay = 0.0;
m_Settings.maxDampingDelay = 2.0;
}
void BounceManager::Add(CasualCore::Object* obj)
{
if (!obj)
return;
auto itemIterator = m_Items.find(obj); // NOLINT(c++11/auto)
if (itemIterator == m_Items.end())
{
BounceOscillator oscillator(obj, m_Settings);
m_Items.insert(std::map<CasualCore::Object *, BounceOscillator>::value_type(obj, oscillator));
}
else
{
BounceOscillator& oscillator = itemIterator->second;
oscillator.Impulse();
}
}
void BounceManager::Update(float time_elapsed)
{
for (auto i = m_Items.begin(); i != m_Items.end(); ++i) // NOLINT(c++11/auto)
i->second.Update(time_elapsed);
for (auto i = m_Items.begin(); i != m_Items.end();) { // NOLINT(c++11/auto)
if (i->second.GetIsFinished())
m_Items.erase(i++);
else
++i;
}
}
void BounceManager::RemoveOscillator(CasualCore::Object* object)
{
for (auto i = m_Items.begin(); i != m_Items.end();) { // NOLINT(c++11/auto)
if (i->second.IsSameObject(object))
m_Items.erase(i++);
else
++i;
}
}