blitz3d/blitz3d/entity.h

102 lines
2.2 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 0; }
virtual Camera *getCamera(){ return 0; }
virtual Light *getLight(){ return 0; }
virtual Model *getModel(){ return 0; }
virtual Mirror *getMirror(){ return 0; }
virtual Listener *getListener(){ return 0; }
void setName( const std::string &t );
void setParent( Entity *parent );
void setVisible( bool vis );
void setEnabled( bool ena );
bool visible()const{ return _visible; }
bool enabled()const{ return _enabled; }
void enumVisible( vector<Object*> &out );
void enumEnabled( vector<Object*> &out );
Entity *children()const{ return _children; }
Entity *successor()const{ return _succ; }
std::string getName()const{ return _name; }
Entity *getParent()const{ return _parent; }
void setLocalPosition( const Vector &v );
void setLocalScale( const Vector & v );
void setLocalRotation( const Quat &q );
void setLocalTform( const Transform &t );
void setWorldPosition( const Vector &v );
void setWorldScale( const Vector &v );
void setWorldRotation( const Quat &q );
void setWorldTform( const Transform &t );
const Vector &getLocalPosition()const;
const Vector &getLocalScale()const;
const Quat &getLocalRotation()const;
const Transform &getLocalTform()const;
const Vector &getWorldPosition()const;
const Vector &getWorldScale()const;
const Quat &getWorldRotation()const;
const Transform &getWorldTform()const;
static Entity *orphans(){ return _orphans; }
private:
Entity *_succ,*_pred,*_parent,*_children,*_last_child;
static Entity *_orphans,*_last_orphan;
bool _visible,_enabled;
std::string _name;
mutable int invalid;
Quat local_rot;
Vector local_pos,local_scl;
mutable Transform local_tform;
mutable Quat world_rot;
mutable Vector world_pos,world_scl;
mutable Transform world_tform;
void insert();
void remove();
void invalidateLocal();
void invalidateWorld();
};
#endif