00001 /* -*- C++ -*- */ 00002 00003 /* COPYRIGHT 00004 * 00005 * This file is part of the Visual Effects Engine - VEE 00006 * 00007 * Read the "VEE-LICENSE" file for the license. 00008 * 00009 * Authors & Copyright: 00010 * 00011 * Tommi Ilmonen, Tuukka Heikura, Marko Myllymaa and 00012 * Janne Kontkanen 2001-2004 00013 * 00014 * Additional copyrights: Tekes 2003-2004 00015 * 00016 * firstname.lastname@hut.fi 00017 * 00018 */ 00019 00020 #ifndef VEE_ORDERER_H 00021 #define VEE_ORDERER_H 00022 00023 #include <vee_object.h> 00024 00025 #include <map> 00026 #include <list> 00027 00028 class VEE_ForceObject; 00029 00048 class VEE_Orderer 00049 { 00050 public: 00051 VEE_Orderer(); 00052 ~VEE_Orderer(); 00053 00054 typedef std::multimap<float, VEE_Object *>::iterator iterator; 00055 00057 iterator begin() { return m_objects.begin();} 00059 iterator end() { return m_objects.end(); } 00060 00061 uint size() { return m_objects.size(); } 00062 00064 static VEE_Object *getObject(iterator & it) 00065 { return (*it).second; } 00066 00068 void setCameraPosition(const VEE_Vector3 &p) { m_camPos = p; } 00069 00070 void addScene(VEE_SceneBox *); 00071 void clear(); 00072 00073 protected: 00074 std::multimap<float, VEE_Object *> m_objects; 00075 00076 VEE_Vector3 m_camPos; 00077 }; 00078 00081 00089 class VEE_OrdererCollector 00090 { 00091 public: 00092 typedef std::multimap<float, VEE_ParticleVisualInfo>::iterator iterator; 00093 typedef std::list<VEE_ForceObject *>::iterator forceIterator; 00094 00095 VEE_OrdererCollector(); 00096 ~VEE_OrdererCollector(); 00097 00099 iterator begin() { return m_objects.begin();} 00101 iterator end() { return m_objects.end(); } 00102 00103 uint size() { return m_objects.size(); } 00104 00106 forceIterator forceBegin() { return m_forces.begin();} 00108 forceIterator forceEnd() { return m_forces.end(); } 00109 00110 uint forceCount() { return m_forces.size(); } 00111 00113 static VEE_ParticleVisualInfo & getObject(iterator & it) 00114 { return (*it).second; } 00115 00117 static VEE_ForceObject * getForce(forceIterator & it) 00118 { return (*it); } 00119 00121 void setCameraPosition(const VEE_Vector3 &p) { m_camPos = p; } 00122 00123 void addScene(VEE_SceneBox *); 00124 void clear(); 00125 00126 protected: 00127 00128 std::multimap<float, VEE_ParticleVisualInfo> m_objects; 00129 std::list<VEE_ForceObject *> m_forces; 00130 00131 VEE_Vector3 m_camPos; 00132 00133 private: 00134 // Disabled 00135 VEE_OrdererCollector(const VEE_OrdererCollector & ) {} 00136 VEE_OrdererCollector & operator = (const VEE_OrdererCollector & ) 00137 { return * this; } 00138 }; 00139 00140 #endif