floatingtextrenderer.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include "video/renderbackend.h"
00031 #include "util/math/fife_math.h"
00032 #include "util/log/logger.h"
00033 #include "video/fonts/abstractfont.h"
00034 #include "video/image.h"
00035 #include "model/structures/instance.h"
00036 #include "model/structures/layer.h"
00037 #include "model/structures/location.h"
00038
00039 #include "view/visual.h"
00040 #include "view/camera.h"
00041 #include "floatingtextrenderer.h"
00042
00043
00044 namespace FIFE {
00045 static Logger _log(LM_VIEWVIEW);
00046
00047
00048 FloatingTextRenderer::FloatingTextRenderer(RenderBackend* renderbackend, int position, AbstractFont* font):
00049 RendererBase(renderbackend, position),
00050 m_font(font) {
00051 setEnabled(true);
00052 }
00053
00054 FloatingTextRenderer::FloatingTextRenderer(const FloatingTextRenderer& old):
00055 RendererBase(old),
00056 m_font(old.m_font) {
00057 setEnabled(true);
00058 }
00059
00060 RendererBase* FloatingTextRenderer::clone() {
00061 return new FloatingTextRenderer(*this);
00062 }
00063
00064 FloatingTextRenderer::~FloatingTextRenderer() {
00065 }
00066
00067 void FloatingTextRenderer::render(Camera* cam, Layer* layer, std::vector<Instance*>& instances) {
00068 if (!m_font) {
00069 return;
00070 }
00071
00072 std::vector<Instance*>::const_iterator instance_it = instances.begin();
00073 const std::string* saytext = NULL;
00074
00075 for (;instance_it != instances.end(); ++instance_it) {
00076 Instance* instance = *instance_it;
00077 saytext = instance->getSayText();
00078 if (saytext) {
00079 InstanceVisual* visual = instance->getVisual<InstanceVisual>();
00080 const Rect& ir = visual->getCacheItem(cam).dimensions;
00081 m_font->setColor(25,25,112);
00082 Image* img = m_font->getAsImageMultiline(*saytext);
00083 Rect r;
00084 r.x = (ir.x + ir.w/2) - img->getWidth()/2;
00085 r.y = ir.y- img->getHeight();
00086 r.w = img->getWidth();
00087 r.h = img->getHeight();
00088 img->render(r);
00089 }
00090 }
00091 }
00092
00093 FloatingTextRenderer* FloatingTextRenderer::getInstance(IRendererContainer* cnt) {
00094 return dynamic_cast<FloatingTextRenderer*>(cnt->getRenderer("FloatingTextRenderer"));
00095 }
00096 }