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