30 #include "video/renderbackend.h"
31 #include "util/math/fife_math.h"
32 #include "util/log/logger.h"
33 #include "model/metamodel/grids/cellgrid.h"
34 #include "model/structures/instance.h"
35 #include "model/structures/layer.h"
36 #include "model/structures/location.h"
38 #include "view/camera.h"
39 #include "quadtreerenderer.h"
40 #include "model/structures/instancetree.h"
41 #include "util/structures/quadtree.h"
45 static Logger _log(LM_VIEWVIEW);
47 QuadTreeRenderer::QuadTreeRenderer(RenderBackend* renderbackend,
int position):
48 RendererBase(renderbackend, position) {
52 QuadTreeRenderer::QuadTreeRenderer(
const QuadTreeRenderer& old):
57 RendererBase* QuadTreeRenderer::clone() {
58 return new QuadTreeRenderer(*
this);
61 QuadTreeRenderer::~QuadTreeRenderer() { }
62 RenderVisitor::RenderVisitor(RenderBackend * rb, Layer * layer, Camera *camera) {
69 RenderVisitor::~RenderVisitor() {}
71 template<
typename T>
bool RenderVisitor::visit(QuadNode<T,2>* node,
int d) {
78 int size = node->size();
81 CellGrid *cg = m_layer->getCellGrid();
84 ExactModelCoordinate emc= cg->toMapCoordinates(ExactModelCoordinate( x,y) );
85 ScreenPoint scrpt1 =m_camera->toScreenCoordinates( emc );
86 emc= cg->toMapCoordinates(ExactModelCoordinate( x,y+size) );
87 ScreenPoint scrpt2 =m_camera->toScreenCoordinates( emc );
88 emc= cg->toMapCoordinates(ExactModelCoordinate( x+size,y) );
89 ScreenPoint scrpt3 =m_camera->toScreenCoordinates( emc );
90 emc= cg->toMapCoordinates(ExactModelCoordinate( x+size,y+size) );
91 ScreenPoint scrpt4 =m_camera->toScreenCoordinates( emc );
93 m_renderbackend->disableLighting();
94 m_renderbackend->drawLine( Point(scrpt1.x,scrpt1.y) , Point(scrpt2.x,scrpt2.y), 255, 255, 255);
95 m_renderbackend->drawLine(Point(scrpt1.x,scrpt1.y), Point(scrpt3.x,scrpt3.y), 255, 255, 255);
96 m_renderbackend->drawLine(Point(scrpt3.x,scrpt3.y), Point(scrpt4.x,scrpt4.y), 255, 255, 255);
97 m_renderbackend->drawLine(Point(scrpt2.x,scrpt2.y), Point(scrpt4.x,scrpt4.y), 255, 255, 255);
98 m_renderbackend->enableLighting();
104 void QuadTreeRenderer::render(Camera* cam, Layer* layer, RenderList& instances) {
105 CellGrid* cg = layer->getCellGrid();
107 FL_WARN(_log,
"No cellgrid assigned to layer, cannot draw grid");
110 InstanceTree * itree = layer->getInstanceTree();
111 RenderVisitor VIPguess(m_renderbackend, layer,cam);
112 itree->applyVisitor(VIPguess);