From 8c96f8cb23f5fa4bfb5cb01854642aa3b25b7a86 Mon Sep 17 00:00:00 2001 From: Paolo Capriotti Date: Sun, 16 Dec 2007 13:14:31 +0100 Subject: [PATCH] Factor animation creating functions out of GraphicalSystem into AnimationManager. --- src/animationmanager.cpp | 49 ++++++++++++++++++++++++++++++++++++++++++++++++ src/animationmanager.h | 14 ++++++++++++++ src/graphicalsystem.cpp | 45 +++++++------------------------------------- src/graphicalsystem.h | 4 +--- 4 files changed, 71 insertions(+), 41 deletions(-) diff --git a/src/animationmanager.cpp b/src/animationmanager.cpp index 9682788..affd6c9 100644 --- a/src/animationmanager.cpp +++ b/src/animationmanager.cpp @@ -9,8 +9,10 @@ #include "animationmanager.h" #include +#include "animation.h" #include "mainanimation.h" #include "mastersettings.h" +#include "core/namedsprite.h" AnimationManager::AnimationManager() { m_main = new MainAnimation(1.0); @@ -45,3 +47,50 @@ void AnimationManager::enqueue(const AnimationPtr& a) { } void AnimationManager::stop() { m_main->stop(); } + +AnimationPtr AnimationManager::appear(const NamedSprite& sprite, + const QString& flags) const { + if (fading && flags != "instant") + return AnimationPtr(new FadeAnimation(sprite.sprite(), 0, 255)); + + return AnimationPtr(new DropAnimation(sprite.sprite())); +} + +AnimationPtr AnimationManager::disappear(const NamedSprite& sprite, + const QString& flags) const { + if (explode && flags == "destroy") + return AnimationPtr(new ExplodeAnimation(sprite.sprite(), Random::instance())); + + if (fading && flags != "instant") + return AnimationPtr(new FadeAnimation(sprite.sprite(), 255, 0)); + + return AnimationPtr(new CaptureAnimation(sprite.sprite())); +} + +AnimationPtr AnimationManager::move(const NamedSprite& sprite, + const QPoint& destination, + bool far, + const QString& flags) const { + QStringList flagList = flags.split(" "); + bool rotate = transform && flagList.contains("rotating"); + + if (movement && !flagList.contains("instant")) { + if (far && flagList.contains("lshaped")) { + return AnimationPtr(new KnightMovementAnimation(sprite.sprite(), destination, rotate)); + } + else + return AnimationPtr(new MovementAnimation(sprite.sprite(), destination, rotate)); + } + + return AnimationPtr(new InstantAnimation(sprite.sprite(), destination)); +} + +AnimationPtr AnimationManager::morph(const NamedSprite& sprite1, + const NamedSprite& sprite2, + const QString& flags) const { + if (fading && flags != "instant") + return AnimationPtr(new CrossFadingAnimation(sprite1.sprite(), sprite2.sprite())); + + return AnimationPtr(new PromotionAnimation(sprite1.sprite(), sprite2.sprite())); +} + diff --git a/src/animationmanager.h b/src/animationmanager.h index 212dacd..880ec96 100644 --- a/src/animationmanager.h +++ b/src/animationmanager.h @@ -10,9 +10,12 @@ #ifndef ANIMATIONMANAGER_H #define ANIMATIONMANAGER_H +#include #include class MainAnimation; +class NamedSprite; +class QPoint; class AnimationManager { MainAnimation* m_main; @@ -31,6 +34,17 @@ public: void reload(); void enqueue(const AnimationPtr& a); void stop(); + + AnimationPtr group(const QString& flags) const; + AnimationPtr appear(const NamedSprite& sprite, const QString& flags) const; + AnimationPtr disappear(const NamedSprite& sprite, const QString& flags) const; + AnimationPtr move(const NamedSprite& sprite, + const QPoint& destination, + bool far, + const QString& flags) const; + AnimationPtr morph(const NamedSprite& sprite1, + const NamedSprite& sprite2, + const QString& flags) const; }; #endif // ANIMATIONMANAGER_H diff --git a/src/graphicalsystem.cpp b/src/graphicalsystem.cpp index adb14ca..8d8eadf 100644 --- a/src/graphicalsystem.cpp +++ b/src/graphicalsystem.cpp @@ -273,65 +273,34 @@ AnimationPtr GraphicalSystem::group(const QString&) const { AnimationPtr GraphicalSystem::appear(const NamedSprite& sprite, const QString& flags) const { - if (m_view->animationManager()->fading && - flags != "instant") - return AnimationPtr(new FadeAnimation(sprite.sprite(), 0, 255)); - - return AnimationPtr(new DropAnimation(sprite.sprite())); + return m_view->animationManager()->appear(sprite, flags); } AnimationPtr GraphicalSystem::disappear(const NamedSprite& sprite, const QString& flags) const { - if (m_view->animationManager()->explode && - flags == "destroy") - return AnimationPtr(new ExplodeAnimation(sprite.sprite(), Random::instance())); - - if (m_view->animationManager()->fading && - flags != "instant") - return AnimationPtr(new FadeAnimation(sprite.sprite(), 255, 0)); - - return AnimationPtr(new CaptureAnimation(sprite.sprite())); + return m_view->animationManager()->disappear(sprite, flags); } AnimationPtr GraphicalSystem::move(const NamedSprite& sprite, const Point& destination, const QString& flags) const { QPoint real = converter()->toReal(destination); - QStringList flagList = flags.split(" "); - bool rotate = m_view->animationManager()->transform && flagList.contains("rotating"); - - if (m_view->animationManager()->movement && - !flagList.contains("instant")) { - Point origin = converter()->toLogical(sprite.sprite()->pos() + - Point(converter()->squareSize(), converter()->squareSize()) / 2); - if (flagList.contains("lshaped") && origin != destination) { - return AnimationPtr(new KnightMovementAnimation(sprite.sprite(), real, rotate)); - } - else - return AnimationPtr(new MovementAnimation(sprite.sprite(), real, rotate)); - } - - return AnimationPtr(new InstantAnimation(sprite.sprite(), real)); + Point origin = converter()->toLogical(sprite.sprite()->pos() + + Point(converter()->squareSize(), converter()->squareSize()) / 2); + return m_view->animationManager()->move(sprite, real, origin != destination, flags); } AnimationPtr GraphicalSystem::move(const NamedSprite& sprite, int pool, int destination, const QString& flags) const { QPoint real = indexConverter(pool)->toReal(destination); - if (m_view->animationManager()->movement && flags != "instant") - return AnimationPtr(new MovementAnimation(sprite.sprite(), real)); - else - return AnimationPtr(new InstantAnimation(sprite.sprite(), real)); + return m_view->animationManager()->move(sprite, real, true, flags); } AnimationPtr GraphicalSystem::morph(const NamedSprite& sprite1, const NamedSprite& sprite2, const QString& flags) const { - if (m_view->animationManager()->fading && - flags != "instant") - return AnimationPtr(new CrossFadingAnimation(sprite1.sprite(), sprite2.sprite())); - - return AnimationPtr(new PromotionAnimation(sprite1.sprite(), sprite2.sprite())); + return m_view->animationManager()->morph(sprite1, sprite2, flags); } Components* GraphicalSystem::components() const { return m_components; } diff --git a/src/graphicalsystem.h b/src/graphicalsystem.h index 4d5cf60..bf9e82d 100644 --- a/src/graphicalsystem.h +++ b/src/graphicalsystem.h @@ -177,9 +177,7 @@ public: // TAGUA API Components* components() const; - - // TODO: factor the following animation related functions - // out into a separate class + virtual AnimationPtr group(const QString& flags) const; virtual AnimationPtr appear(const NamedSprite& sprite, const QString& flags) const; -- 2.11.4.GIT