/*!
 * \file include/Entity.h
 * \brief World Entities
 *
 * \author xythobuz
 */

#ifndef _ENTITY_H_
#define _ENTITY_H_

#include "math/math.h"
#include "SkeletalModel.h"
#include "TombRaider.h"

class Entity {
public:
    typedef enum {
        MoveTypeWalkNoSwim = -1,
        MoveTypeWalk       = 0,
        MoveTypeNoClipping = 1,
        MoveTypeFly        = 2,
        MoveTypeSwim       = 3
    } MoveType;

    Entity(TombRaider &tr, unsigned int index, unsigned int i, unsigned int model);

    bool operator<(Entity &o);
    void display();
    void move(char movement);
    void print();

    SkeletalModel &getModel();
    void setSkeletalModel(unsigned int model);
    MoveType getMoveType();
    void setMoveType(MoveType m);
    int getObjectId();
    void setAngle(vec_t yaw);
    vec_t getPos(unsigned int i);
    vec_t getAngle(unsigned int i);
    int getRoom();

    // Animation State
    unsigned int getAnimation();
    void setAnimation(unsigned int index);
    unsigned int getBoneFrame();
    void setBoneFrame(unsigned int index);
    unsigned int getIdleAnimation();
    void setIdleAnimation(unsigned int index);

private:
    vec3_t pos;
    vec3_t angles;
    int room;

    unsigned int skeletalModel;
    MoveType moveType;

    int state;
    int objectId;

    // Animation State
    unsigned int boneFrame;
    unsigned int animationFrame;
    unsigned int idleAnimation;
};

#endif