00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef FIFE_INSTANCETREE_H
00023 #define FIFE_INSTANCETREE_H
00024
00025
00026 #include <list>
00027
00028
00029
00030
00031
00032
00033 #include "util/base/fifeclass.h"
00034
00035 #include "util/structures/quadtree.h"
00036 #include "model/metamodel/modelcoords.h"
00037
00038 namespace FIFE {
00039
00040 class Instance;
00041
00042 class InstanceTree: public FifeClass {
00043 static const int kTreeDepth = 2;
00044 public:
00045 typedef std::list<Instance*> InstanceList;
00046 typedef QuadTree< InstanceList, kTreeDepth > InstanceQuadTree;
00047 typedef InstanceQuadTree::Node InstanceTreeNode;
00048
00052 InstanceTree();
00053
00057 virtual ~InstanceTree();
00058
00067 void addInstance(Instance* instance);
00068
00076 void removeInstance(Instance* instance);
00077
00088 void findInstances(const ModelCoordinate& point, int w, int h, InstanceList& lst);
00089
00092 template<typename Visitor> void applyVisitor(Visitor& visitor) {
00093 m_tree.apply_visitor(visitor);
00094 }
00095
00096
00097 private:
00098 InstanceQuadTree m_tree;
00099 std::map<Instance*,InstanceTreeNode*> m_reverse;
00100 };
00101
00102 }
00103
00104 #endif