Files
BlitzNext/blitz3d/entity.h
T
2017-04-09 05:35:18 +02:00

100 lines
2.3 KiB
C++

#ifndef ENTITY_H
#define ENTITY_H
#include <list>
#include "geom.h"
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