#ifndef __BOUNCEINFO_H__
#define __BOUNCEINFO_H__

#include "BounceOscillatorSettings.h"

namespace CasualCore
{
  class Object;
};

class BounceOscillator
{
public:
  BounceOscillator();
  BounceOscillator(CasualCore::Object* a_Object, const BounceOscillatorSettings& a_Settings);

  void Update(float a_DeltaTime);
  void Impulse();
  bool GetIsFinished() const { return m_IsFinished; }
  bool IsSameObject(const CasualCore::Object* a_Object) const { return a_Object == m_Object; }

private:
  float Oscillate();
  float Damp(float a_DeltaTime);
  float Cap(float a_Value);
  float GetDampingDelay();
  float BackEaseInOutFunction(float a_t, float a_d, float a_b, float a_c);

private:
  CasualCore::Object* m_Object;
  BounceOscillatorSettings m_Settings;
  float m_OriginalScale;
  float m_BaseScale;
  float m_InitialDampScale;
  float m_DampingDelay;
  float m_ElapsedTime;
  bool m_IsFinished;
};

#endif // __BOUNCEINFO_H__
