Fix use of singleton pattern.
[tagua/yd.git] / src / animationmanager.cpp
blobaffd6c99432a0a06b8b7ce0cb8a728638e691c62
1 /*
2 Copyright (c) 2007 Paolo Capriotti <p.capriotti@gmail.com>
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
8 */
10 #include "animationmanager.h"
11 #include <cmath>
12 #include "animation.h"
13 #include "mainanimation.h"
14 #include "mastersettings.h"
15 #include "core/namedsprite.h"
17 AnimationManager::AnimationManager() {
18 m_main = new MainAnimation(1.0);
20 reload();
23 AnimationManager::~AnimationManager() { delete m_main; }
25 void AnimationManager::reload() {
26 Settings s = settings().group("animations");
28 enabled = s.flag("enabled", true);
29 maxSequence =
30 s.group("sequence").flag("enabled", true)
31 ? s.group("sequence")["max"].value<int>()
32 : 0;
33 movement = s["movement"].flag("enabled", true);
34 explode = s["explode"].flag("enabled", true);
35 fading = s["fading"].flag("enabled", true);
36 transform = s["transform"].flag("enabled", true);
38 Settings s_anim = settings().group("animations");
39 int speed = (s_anim["speed"] | 16);
40 int smoothness = (s_anim["smoothness"] | 16);
41 m_main->setSpeed( 0.4*pow(10.0, speed/32.0) );
42 m_main->setDelay( int(70.0*pow(10.0, -smoothness/32.0)) );
45 void AnimationManager::enqueue(const AnimationPtr& a) {
46 m_main->addAnimation(a);
49 void AnimationManager::stop() { m_main->stop(); }
51 AnimationPtr AnimationManager::appear(const NamedSprite& sprite,
52 const QString& flags) const {
53 if (fading && flags != "instant")
54 return AnimationPtr(new FadeAnimation(sprite.sprite(), 0, 255));
56 return AnimationPtr(new DropAnimation(sprite.sprite()));
59 AnimationPtr AnimationManager::disappear(const NamedSprite& sprite,
60 const QString& flags) const {
61 if (explode && flags == "destroy")
62 return AnimationPtr(new ExplodeAnimation(sprite.sprite(), Random::instance()));
64 if (fading && flags != "instant")
65 return AnimationPtr(new FadeAnimation(sprite.sprite(), 255, 0));
67 return AnimationPtr(new CaptureAnimation(sprite.sprite()));
70 AnimationPtr AnimationManager::move(const NamedSprite& sprite,
71 const QPoint& destination,
72 bool far,
73 const QString& flags) const {
74 QStringList flagList = flags.split(" ");
75 bool rotate = transform && flagList.contains("rotating");
77 if (movement && !flagList.contains("instant")) {
78 if (far && flagList.contains("lshaped")) {
79 return AnimationPtr(new KnightMovementAnimation(sprite.sprite(), destination, rotate));
81 else
82 return AnimationPtr(new MovementAnimation(sprite.sprite(), destination, rotate));
85 return AnimationPtr(new InstantAnimation(sprite.sprite(), destination));
88 AnimationPtr AnimationManager::morph(const NamedSprite& sprite1,
89 const NamedSprite& sprite2,
90 const QString& flags) const {
91 if (fading && flags != "instant")
92 return AnimationPtr(new CrossFadingAnimation(sprite1.sprite(), sprite2.sprite()));
94 return AnimationPtr(new PromotionAnimation(sprite1.sprite(), sprite2.sprite()));