Newer
Older
Import / projects / Gameloft / bne_lib / code / Utils / Bouncing / BounceManager.cpp
#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;
  }
}