00001
00002 #ifndef _GK_SCENE_H
00003 #define _GK_SCENE_H
00004
00005 #include <vector>
00006 #include <map>
00007
00008 #include "Name.h"
00009 #include "Transform.h"
00010
00011 namespace gk {
00012
00013
00014 class ISceneObject
00015 {
00016 Transform m_local_transform;
00017 ISceneObject *m_parent;
00018
00019 public:
00020 ISceneObject( )
00021 :
00022 m_parent( NULL )
00023 {}
00024
00025 virtual ~ISceneObject( ) {}
00026
00027
00028 void setLocalTransform( const Transform& transform )
00029 {
00030 m_local_transform= transform;
00031 }
00032
00033
00034 const Transform &getLocalTransform( )
00035 {
00036 return m_local_transform;
00037 }
00038
00039
00040
00041 void setParent( ISceneObject *parent )
00042 {
00043 m_parent = parent;
00044 }
00045
00046
00047
00048 Transform getWorldTransform( );
00049
00050
00051 virtual int draw( const Transform& view )= 0;
00052 };
00053
00054
00055
00056
00057
00058 class Scene
00059 {
00060 std::vector<ISceneObject *> m_objects;
00061 typedef std::map<Name, int> names_map;
00062 names_map m_names;
00063
00064 public:
00065
00066 Scene( ) {}
00067
00068 ~Scene( );
00069
00070
00071
00072 int insert( const Name& name, ISceneObject *object );
00073
00074
00075 int count( ) const
00076 {
00077 return ( int ) m_objects.size();
00078 }
00079
00080
00081 ISceneObject *object( const int id ) const
00082 {
00083 assert( id >= 0 && id < ( int ) m_objects.size() );
00084 assert( m_objects[id] != NULL );
00085
00086 return m_objects[id];
00087 }
00088
00089
00090
00091 ISceneObject *find( const Name& name ) const;
00092
00093
00094 int draw( const Transform& view );
00095 };
00096
00097 }
00098
00099 #endif