30 #include "video/renderbackend.h"
31 #include "video/image.h"
32 #include "video/imagepool.h"
33 #include "video/fonts/abstractfont.h"
34 #include "util/math/fife_math.h"
35 #include "util/log/logger.h"
36 #include "model/metamodel/grids/cellgrid.h"
37 #include "model/metamodel/action.h"
38 #include "model/structures/instance.h"
39 #include "model/structures/layer.h"
40 #include "model/structures/location.h"
42 #include "view/camera.h"
43 #include "view/visual.h"
44 #include "coordinaterenderer.h"
48 static Logger _log(LM_VIEWVIEW);
50 CoordinateRenderer::CoordinateRenderer(RenderBackend* renderbackend,
int position, AbstractFont* font):
51 RendererBase(renderbackend, position),
58 m_color = m_font->getColor();
61 CoordinateRenderer::CoordinateRenderer(
const CoordinateRenderer& old):
67 m_font_color(old.m_font_color),
68 m_color(old.m_color) {
72 RendererBase* CoordinateRenderer::clone() {
73 return new CoordinateRenderer(*
this);
76 CoordinateRenderer::~CoordinateRenderer() {
79 CoordinateRenderer* CoordinateRenderer::getInstance(IRendererContainer* cnt) {
80 return dynamic_cast<CoordinateRenderer*
>(cnt->getRenderer(
"CoordinateRenderer"));
83 void CoordinateRenderer::adjustLayerArea() {
84 m_tmploc.setMapCoordinates(m_c);
85 ModelCoordinate c = m_tmploc.getLayerCoordinates();
86 m_layer_area.x = std::min(c.x, m_layer_area.x);
87 m_layer_area.w = std::max(c.x, m_layer_area.w);
88 m_layer_area.y = std::min(c.y, m_layer_area.y);
89 m_layer_area.h = std::max(c.y, m_layer_area.h);
92 const int MIN_COORD = -9999999;
93 const int MAX_COORD = 9999999;
94 void CoordinateRenderer::render(Camera* cam, Layer* layer, RenderList& instances) {
95 m_layer_area.x = MAX_COORD;
96 m_layer_area.y = MAX_COORD;
97 m_layer_area.w = MIN_COORD;
98 m_layer_area.h = MIN_COORD;
100 m_tmploc.setLayer(layer);
101 Rect cv = cam->getViewPort();
102 m_c = cam->toMapCoordinates(ScreenPoint(cv.x, cv.y),
false);
104 m_c = cam->toMapCoordinates(ScreenPoint(cv.x+cv.w, cv.y),
false);
106 m_c = cam->toMapCoordinates(ScreenPoint(cv.x, cv.y+cv.h),
false);
108 m_c = cam->toMapCoordinates(ScreenPoint(cv.x+cv.w, cv.y+cv.h),
false);
112 SDL_Color old_color = m_font->getColor();
113 if(old_color.r != m_color.r || old_color.g != m_color.g || old_color.b != m_color.b) {
114 m_font->setColor(m_color.r, m_color.g, m_color.b);
117 for (
int x = m_layer_area.x-1; x < m_layer_area.w+1; x++) {
118 for (
int y = m_layer_area.y-1; y < m_layer_area.h+1; y++) {
119 ModelCoordinate mc(x, y);
120 m_tmploc.setLayerCoordinates(mc);
121 ScreenPoint drawpt = cam->toScreenCoordinates(m_tmploc.getMapCoordinates());
122 if ((drawpt.x >= cv.x) && (drawpt.x <= cv.x + cv.w) &&
123 (drawpt.y >= cv.y) && (drawpt.y <= cv.y + cv.h)) {
124 std::stringstream ss;
125 ss << mc.x <<
","<< mc.y;
126 Image * img = m_font->getAsImage(ss.str());
129 r.w = img->getWidth();
130 r.h = img->getHeight();
136 m_font->setColor(old_color.r, old_color.g, old_color.b);
137 m_font_color =
false;
141 void CoordinateRenderer::setColor(Uint8 r, Uint8 g, Uint8 b) {