Files
BlitzNext/Runtime/blitz3d/entity.hpp
T

131 lines
2.5 KiB
C++
Raw Normal View History

2019-01-18 21:26:42 +01:00
#pragma once
2014-01-31 08:23:00 +13:00
#include <list>
2019-01-18 15:55:06 +01:00
#include "geom.hpp"
2014-01-31 08:23:00 +13:00
class Entity;
class Object;
class Camera;
class Light;
class Model;
class Mirror;
class Listener;
class MeshModel;
class MD2Model;
class Entity {
public:
2014-01-31 08:23:00 +13:00
Entity();
2019-01-18 17:04:17 +01:00
Entity(const Entity& e);
2014-01-31 08:23:00 +13:00
virtual ~Entity();
2019-01-18 17:04:17 +01:00
virtual Entity* clone() = 0;
2014-01-31 08:23:00 +13:00
//ugly casts!
2019-01-18 17:04:17 +01:00
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;
}
2014-01-31 08:23:00 +13:00
void SetVisible(bool vis);
2019-01-18 17:04:17 +01:00
bool IsVisible() const
{
return m_isVisible;
}
void EnumerateVisible(std::list<Object*>& out);
2014-01-31 08:23:00 +13:00
void SetEnabled(bool ena);
2019-01-18 17:04:17 +01:00
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;
}
2014-01-31 08:23:00 +13:00
private:
Entity *m_listNext, *m_listPrev, *m_parent, *m_children, *m_last_child;
2014-01-31 08:23:00 +13:00
static Entity *_orphans, *_last_orphan;
2014-01-31 08:23:00 +13:00
bool m_isVisible, m_isEnabled;
2014-01-31 08:23:00 +13:00
std::string m_name;
2014-01-31 08:23:00 +13:00
mutable int invalid;
2019-01-18 17:04:17 +01:00
Quat m_localRotation;
Vector m_localPosition, m_localScale;
mutable Transform m_localTransform;
2014-01-31 08:23:00 +13:00
2019-01-18 17:04:17 +01:00
mutable Quat m_worldRotation;
mutable Vector m_worldPosition, m_worldScale;
mutable Transform m_worldTransform;
2014-01-31 08:23:00 +13:00
void InsertChildToParent();
void RemoveParent();
2014-01-31 08:23:00 +13:00
void invalidateLocal();
void InvalidateWorldTransform();
2014-01-31 08:23:00 +13:00
};