#ifndef __EVAS_DIRECT3D_SCENE_H__ #define __EVAS_DIRECT3D_SCENE_H__ #include "evas_engine.h" #include #include #include "ref.h" #include "array.h" #include "evas_direct3d_object.h" class D3DDevice; class D3DScene : virtual public Referenc { public: D3DScene(); void FreeObjects(); inline void AddObject(D3DObject *object); inline int GetObjectCount(); void DeleteObject(D3DObject *object); void DrawAll(D3DDevice *d3d); template T *GetFreeObject() { for (int i = 0; i < _objects.Length(); i++) { if (typeid(T) == typeid(*_objects[i].Addr()) && _objects[i]->IsFree()) return (T *)_objects[i].Addr(); } return NULL; } template void GetObjectsOfType(TArray &res) { for (int i = 0; i < _objects.Length(); i++) { if (typeid(T) == typeid(*_objects[i].Addr())) res.Add((T *)_objects[i].Addr()); } } private: TArray > _objects; }; void D3DScene::AddObject(D3DObject *object) { assert(object != NULL); _objects.Add(object); } int D3DScene::GetObjectCount() { return _objects.Length(); } #endif // __EVAS_DIRECT3D_SCENE_H__