#ifndef SCENE_H #define SCENE_H #include #include "camera.h" #include #include "light.h" #include "phongentity.h" // Scene interface : template class SceneIterator { public: virtual SceneIterator& operator++() = 0; virtual T& operator*() = 0; virtual bool isValid() = 0; void next() {if(isValid()) operator++();} T& getItem() {return operator*();} }; class Scene { public: virtual SceneIterator* getLights() = 0; virtual SceneIterator* getGeometry() = 0; }; // Some basic implementations : template class ArraySceneIterator : public SceneIterator { std::vector &vec; int id; public: ArraySceneIterator(std::vector &myVec, int myId=0) : vec(myVec), id(myId) {} virtual SceneIterator& operator++() {++id; return *this;} virtual T& operator*() {return vec[id];} virtual bool isValid() {return id < vec.size();} }; class ArrayScene : public Scene { std::vector lights; std::vector entities; public: void clearScene() {lights.clear(); entities.clear();} void addEntity(PhongEntity* myEntity) {entities.push_back(myEntity);} void addLight(Light* myLight) {lights.push_back(myLight);} virtual SceneIterator* getLights() {return new ArraySceneIterator(lights);} virtual SceneIterator* getGeometry() {return new ArraySceneIterator(entities);} }; #endif // SCENE_H