Mercurial > fife-parpg
diff engine/core/view/renderers/genericrenderer.cpp @ 31:9a9f4447af7c
add animation renderer
author | spq@33b003aa-7bff-0310-803a-e67f0ece8222 |
---|---|
date | Fri, 11 Jul 2008 14:35:31 +0000 |
parents | 9c3f37432a28 |
children | 75b6394ced14 |
line wrap: on
line diff
--- a/engine/core/view/renderers/genericrenderer.cpp Fri Jul 11 13:08:44 2008 +0000 +++ b/engine/core/view/renderers/genericrenderer.cpp Fri Jul 11 14:35:31 2008 +0000 @@ -36,6 +36,7 @@ #include "util/math/fife_math.h" #include "util/log/logger.h" #include "model/metamodel/grids/cellgrid.h" +#include "model/metamodel/timeprovider.h" #include "model/structures/instance.h" #include "model/structures/layer.h" #include "model/structures/location.h" @@ -244,10 +245,21 @@ GenericRendererAnimationInfo::GenericRendererAnimationInfo(GenericRendererNode anchor, int animation): GenericRendererElementInfo(), m_anchor(anchor), - m_animation(animation) { + m_animation(animation), + m_start_time(SDL_GetTicks()), + m_time_scale(1.0) { } void GenericRendererAnimationInfo::render(Camera* cam, Layer* layer, std::vector<Instance*>& instances, RenderBackend* renderbackend, ImagePool* imagepool, AnimationPool* animpool) { - return; + Point p = m_anchor.getCalculatedPoint(cam, layer, instances); + Animation& animation = animpool->getAnimation(m_animation); + int animtime = scaleTime(m_time_scale, SDL_GetTicks() - m_start_time) % animation.getDuration(); + Image* img = animation.getFrameByTimestamp(animtime); + Rect r; + r.x = p.x-img->getWidth()/2; + r.y = p.y-img->getHeight()/2; + r.w = img->getWidth(); + r.h = img->getHeight(); + img->render(r); } GenericRendererTextInfo::GenericRendererTextInfo(GenericRendererNode anchor, AbstractFont* font, std::string text):