#ifndef _HPP_KUNGFLOW_STAGEENTITY
#define _HPP_KUNGFLOW_STAGEENTITY

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

#include "physicsobject.hpp"

//class KungFlowGame;
//class PlayState;
//class Stage;
//class HumanGamer;
//class Character;
//class CharacterModelView;
//class CharacterController;
//class Stadium;
//class Enemy;

//
// performers on the stage
//

enum e_StageEntityType {
  e_StageEntityType_Generic,
  e_StageEntityType_Character,
  e_StageEntityType_Enemy
};

class StageEntity : public PhysicsObject {

  public:

    StageEntity(e_StageEntityType type) : type(type), uniqueID(++_stageEntityCounter), expired(false) {};
    virtual ~StageEntity() {};

    unsigned int GetUniqueID() const { return uniqueID; }

    //virtual void GetSpriteBounds(Vector2 &center, Vector2 &radius) const = 0;
    virtual void OnCollide(const StageEntity* entity) = 0;
    //virtual void OnStepPhysicsTime() = 0;
    //virtual void PostStepPhysicsTime() = 0;
    //virtual void Draw(const Viewport &viewport, const Camera &camera) const = 0;

    //virtual Vector2 GetPosition() const = 0;
    //virtual void SetPosition(const Vector2 &newPosition) = 0;
    //virtual float GetZPosition() const = 0 override;
    e_StageEntityType GetType() const { return type; }
    virtual float GetWeight() const { return 1.0f; }

    bool HasExpired() const { return expired; }
    void Expire() { expired = true; }

  private:

    e_StageEntityType type;
    unsigned int uniqueID;
    bool expired;
    static unsigned int _stageEntityCounter; // increments with every new stateentity

};

#endif
