100 lines
2.3 KiB
C++
100 lines
2.3 KiB
C++
|
|
#ifndef ENTITY_H
|
|
#define ENTITY_H
|
|
|
|
#include <list>
|
|
|
|
#include "geom.hpp"
|
|
|
|
class Entity;
|
|
class Object;
|
|
class Camera;
|
|
class Light;
|
|
class Model;
|
|
class Mirror;
|
|
class Listener;
|
|
class MeshModel;
|
|
class MD2Model;
|
|
|
|
class Entity {
|
|
public:
|
|
|
|
Entity();
|
|
Entity(const Entity &e);
|
|
virtual ~Entity();
|
|
|
|
virtual Entity *clone() = 0;
|
|
|
|
//ugly casts!
|
|
virtual Object *getObject() { return nullptr; }
|
|
virtual Camera *getCamera() { return nullptr; }
|
|
virtual Light *getLight() { return nullptr; }
|
|
virtual Model *getModel() { return nullptr; }
|
|
virtual Mirror *getMirror() { return nullptr; }
|
|
virtual Listener *getListener() { return nullptr; }
|
|
|
|
void SetName(const std::string &t);
|
|
std::string getName()const { return m_name; }
|
|
|
|
void SetParent(Entity *parent);
|
|
Entity *getParent()const { return m_parent; }
|
|
|
|
void SetVisible(bool vis);
|
|
bool IsVisible()const { return m_isVisible; }
|
|
void EnumerateVisible(std::list<Object*> &out);
|
|
|
|
void SetEnabled(bool ena);
|
|
bool IsEnabled()const { return m_isEnabled; }
|
|
void EnumerateEnabled(std::list<Object*> &out);
|
|
|
|
void SetLocalPosition(const Vector &v);
|
|
const Vector &GetLocalPosition()const;
|
|
void SetLocalScale(const Vector & v);
|
|
const Vector &GetLocalScale()const;
|
|
void SetLocalRotation(const Quat &q);
|
|
const Quat &GetLocalRotation()const;
|
|
void SetLocalTransform(const Transform &t);
|
|
const Transform &GetLocalTransform()const;
|
|
|
|
void SetWorldPosition(const Vector &v);
|
|
const Vector &GetWorldPosition()const;
|
|
void SetWorldScale(const Vector &v);
|
|
const Vector &GetWorldScale()const;
|
|
void SetWorldRotation(const Quat &q);
|
|
const Quat &GetWorldRotation()const;
|
|
void SetWorldTransform(const Transform &t);
|
|
const Transform &GetWorldTransform()const;
|
|
|
|
Entity* GetChildren()const { return m_children; }
|
|
Entity* GetSuccessor()const { return m_listNext; }
|
|
|
|
|
|
static Entity* GetEntityOrphans() { return _orphans; }
|
|
|
|
private:
|
|
Entity *m_listNext, *m_listPrev, *m_parent, *m_children, *m_last_child;
|
|
|
|
static Entity *_orphans, *_last_orphan;
|
|
|
|
bool m_isVisible, m_isEnabled;
|
|
|
|
std::string m_name;
|
|
|
|
mutable int invalid;
|
|
|
|
Quat m_localRotation;
|
|
Vector m_localPosition, m_localScale;
|
|
mutable Transform m_localTransform;
|
|
|
|
mutable Quat m_worldRotation;
|
|
mutable Vector m_worldPosition, m_worldScale;
|
|
mutable Transform m_worldTransform;
|
|
|
|
void InsertChildToParent();
|
|
void RemoveParent();
|
|
void invalidateLocal();
|
|
void InvalidateWorldTransform();
|
|
};
|
|
|
|
#endif
|