#ifndef _HPP_KUNGFLOW_PHYSICSOBJECT
#define _HPP_KUNGFLOW_PHYSICSOBJECT

#include "gaia/gaia.hpp"
using namespace gaia;

class PhysicsObject {

  public:

    //PhysicsObject() {}
    virtual ~PhysicsObject() {};

    //virtual void GetSpriteBounds(Vector2 &center, Vector2 &radius) const = 0;

    virtual void OnStepPhysicsTime() {};
    virtual void PostStepPhysicsTime() {};
    virtual void Draw(const Viewport &viewport, const Camera &camera) const {};

    virtual Vector2 GetPosition() const = 0;
    virtual void SetPosition(const Vector2 &newPosition) = 0;
    virtual float GetZPosition() const = 0;
    virtual void SetZPosition(float newZPosition) = 0;
    virtual Vector2 GetMovement() const { return 0; }
    virtual void SetMovement(const Vector2 &newMovement) {}
    virtual Vector2 GetDirection() const { return GetMovement().GetNormalized(0); }
    virtual float GetVelocity() const { return GetMovement().GetLength(); }
    virtual float GetZMovement() const { return 0; }
    virtual void SetZMovement(float newZMovement) {}

    virtual float GetRadius() const { return 0.5f; }
    virtual float GetHeight() const { return 1.0f; }

};

#endif
