/2013/src/CGAEngine13/object.h
C Header | 105 lines | 53 code | 19 blank | 33 comment | 1 complexity | 7f74f1ed6e388fbd5cbb4bbdcda1a166 MD5 | raw file
Possible License(s): GPL-3.0
- /** @file
- \brief Scene geometric object class declaration
- */
-
- #pragma once
- #include <memory>
- #include "object_geom_dx9.h"
- #include "comm.h"
- #include "DXUT.h"
-
- class ObjectGeometry;
- typedef std::shared_ptr<ObjectGeometry> ObjectGeometryPtr; /*!< Object geometry shared pointer */
- class Actor;
-
- /*! \class Object
- * \brief Object geometry holder class representation
- */
- class Object {
- public:
- static const unsigned long ST_OBJ_INVISIBLE = 1 << 0; /*!< Object invisibility bit flag */
-
- /*! \class Object::Iterator
- * \brief Object hierarchy iterator class
- */
- class Iterator {
- public:
- /** Constructor */
- explicit Iterator (Object *pObj) : m_cur(pObj), m_root(pObj) {}
-
- /** Checks for enumeration end */
- bool IsDone (void) const { return m_cur == NULL; }
-
- /** Current iterating object accessor */
- operator Object* (void) const { return m_cur; }
- /** Current iterating object accessor */
- Object* operator -> (void) const { return m_cur; }
-
- /** Move to next object in hierarchy function */
- inline void operator ++ (void) { Next(); }
- /** Move to next object in hierarchy function */
- inline void operator ++ (int) { Next(); }
-
- private:
- void Next (void);
-
- protected:
- Object *m_root; /*!< hierarchy root object */
- Object *m_cur; /*!< current object hold by iterator */
- };
-
- public:
- /** Object constructor
- @param name - object name
- @param geom - geometry
- @param actor - actor-owner, NULL for stat-scene
- */
- Object (const std::string &name, const ObjectGeometryPtr &geom, Actor *actor);
-
- /** Object destructor */
- ~Object (void);
- /** Object name getter */
- const std::string & GetName (void) const { return m_name; }
- /** Object geom getter */
- ObjectGeometry * GetGeom (void) { return obj.get(); }
-
- /** Local transformation matrix accessor function */
- D3DXMATRIX & MatrLT (void) { return m_matrLocal; }
- /** Local transformation matrix accessor function */
- const D3DXMATRIX & MatrLT (void) const { return m_matrLocal; }
- /** World transformation matrix accessor function */
- D3DXMATRIX & MatrWorld (void) { return m_matrWorld; }
- /** World transformation matrix accessor function */
- const D3DXMATRIX & MatrWorld (void) const { return m_matrWorld; }
-
- /** Visible flag checker help function */
- int IsVisible (void) const { return _IsState(m_state, ST_OBJ_INVISIBLE); }
- /** Visible flag setter */
- void SetVisible (bool vis) { _SetState(m_state, ST_OBJ_INVISIBLE, vis); }
-
- /** Insert object in hierarchy tree as child */
- void InsertChild (Object *objChild);
-
- /** Recalculate world transformation matrix */
- void CalcNodeWorldMatr (void);
- /** Recalculate AABB function */
- void updateAABB (void);
- /** Object AABB getter */
- const AABB & getAABB (void) const { return m_aabb; }
-
- private:
- std::string m_name; /*!< object name */
- UINT64 m_state; /*!< object state */
-
- D3DXMATRIXA16 m_matrLocal; /*!< local transformation matrix */
- D3DXMATRIXA16 m_matrWorld; /*!< cached world matrix */
-
- Object *m_next; /*!< right brother object in double-linked list */
- Object *m_prev; /*!< left brother object in double-linked list */
- Object *m_child; /*!< child object */
- Object *parent; /*!< parent object */
-
- ObjectGeometryPtr obj; /*!< object geometry holder */
- Actor *actorOwner; /*!< object owner */
- AABB m_aabb; /*!< AABB for object and it's subtree */
- };