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.
10 #include "animationmanager.h"
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);
23 AnimationManager::~AnimationManager() { delete m_main
; }
25 void AnimationManager::reload() {
26 Settings s
= settings().group("animations");
28 enabled
= s
.flag("enabled", true);
30 s
.group("sequence").flag("enabled", true)
31 ? s
.group("sequence")["max"].value
<int>()
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
,
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
));
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()));