GUI: Added animation classes

This commit is contained in:
Eugene Sandulenko 2015-04-13 01:53:10 +02:00 committed by Alexander Tkachev
parent 6524a8d103
commit ea80e24481
16 changed files with 924 additions and 0 deletions

View file

@ -154,6 +154,13 @@ struct TransparentSurface : public Graphics::Surface {
TransparentSurface *convertTo(const PixelFormat &dstFormat, const byte *palette = 0) const;
float getRatio() {
if (!w)
return 0;
return h / (float)w;
}
AlphaType getAlphaMode() const;
void setAlphaMode(AlphaType);
private:

View file

@ -0,0 +1,45 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
// Based on code by omergilad.
#ifndef GUI_ANIMATION_ACCELERATEINTERPOLATOR_H
#define GUI_ANIMATION_ACCELERATEINTERPOLATOR_H
#include "gui/animation/Interpolator.h"
namespace GUI {
class AccelerateInterpolator: public Interpolator {
public:
AccelerateInterpolator() {}
virtual ~AccelerateInterpolator() {}
virtual float interpolate(float linearValue) {
return pow(linearValue, 2);
}
};
} // End of namespace GUI
#endif /* GUI_ANIMATION_ACCELERATEINTERPOLATOR_H */

View file

@ -0,0 +1,53 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
// Based on code by omergilad.
#ifndef GUI_ANIMATION_ANIMATION_H
#define GUI_ANIMATION_ANIMATION_H
#include "gui/animation/Animation.h"
namespace GUI {
class AlphaAnimation: public Animation {
public:
AlphaAnimation() {}
virtual ~AlphaAnimation() {}
float getEndAlpha() const { return _endAlpha; }
void setEndAlpha(float endAlpha) { _endAlpha = endAlpha; }
float getStartAlpha() const { return _startAlpha; }
void setStartAlpha(float startAlpha) { _startAlpha = startAlpha; }
protected:
virtual void updateInternal(Drawable* drawable, float interpolation) {
// Calculate alpha value based on properties and interpolation
drawable->setAlpha(_startAlpha * (1 - interpolation) + _endAlpha * interpolation);
}
float _startAlpha;
float _endAlpha;
};
} // End of namespace GUI
#endif /* GUI_ANIMATION_ANIMATION_H */

View file

@ -0,0 +1,98 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
// Based on code by omergilad.
#include "gui/animation/Animation.h"
namespace GUI {
Animation::Animation()
: _startTime(0), _duration(0), _finished(false), _finishOnEnd(true) {
}
Animation::~Animation() {
}
void Animation::start(long currentTime) {
_finished = false;
_startTime = currentTime;
}
void Animation::setDuration(long duration) {
_duration = duration;
}
void Animation::update(Drawable *drawable, long currentTime) {
float interpolation;
if (currentTime < _startTime) {
// If the start time is in the future, nothing changes - the interpolated value is 0
interpolation = 0;
} else if (currentTime > _startTime + _duration) {
// If the animation is finished, the interpolated value is 1 and the animation is marked as finished
interpolation = 1;
finishAnimation();
} else {
// Calculate the interpolated value
interpolation = (currentTime - _startTime) / (float) (_duration);
}
// Activate the interpolator if present
if (_interpolator.get() != NULL) {
interpolation = _interpolator->interpolate(interpolation);
}
updateInternal(drawable, interpolation);
}
void Animation::finishAnimation() {
if (_finishOnEnd) {
_finished = true;
}
}
void Animation::updateInternal(Drawable *drawable, float interpolation) {
// Default implementation
}
bool Animation::isFinished() const {
return _finished;
}
bool Animation::isFinishOnEnd() const {
return _finishOnEnd;
}
void Animation::setFinishOnEnd(bool finishOnEnd) {
_finishOnEnd = finishOnEnd;
}
InterpolatorPtr Animation::getInterpolator() const {
return _interpolator;
}
void Animation::setInterpolator(InterpolatorPtr interpolator) {
_interpolator = interpolator;
}
} // End of namespace GUI

76
gui/animation/Animation.h Normal file
View file

@ -0,0 +1,76 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
// Based on code by omergilad.
#ifndef GUI_ANIMATION_ANIMATION_H
#define GUI_ANIMATION_ANIMATION_H
#include "gui/animation/Interpolator.h"
namespace GUI {
class Drawable;
class Animation {
public:
Animation();
virtual ~Animation() = 0;
virtual void update(Drawable *drawable, long currentTime);
/**
* Set start time in millis
*/
virtual void start(long currentTime);
/**
* Set duration in millis
*/
virtual void setDuration(long duration);
virtual bool isFinished() const;
bool isFinishOnEnd() const;
void setFinishOnEnd(bool finishOnEnd);
InterpolatorPtr getInterpolator() const;
void setInterpolator(InterpolatorPtr interpolator);
protected:
void finishAnimation();
virtual void updateInternal(Drawable *drawable, float interpolation);
long _startTime;
long _duration;
bool _finished;
bool _finishOnEnd;
InterpolatorPtr _interpolator;
};
typedef Common::SharedPtr<Animation> AnimationPtr;
} // End of namespace GUI
#endif /* GUI_ANIMATION_ANIMATION_H */

View file

@ -0,0 +1,41 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
// Based on code by omergilad.
#ifndef GUI_ANIMATION_DECCELERATEINTERPOLATOR_H
#define GUI_ANIMATION_DECCELERATEINTERPOLATOR_H
#include "gui/animation/Interpolator.h"
namespace GUI {
class DeccelerateInterpolator: public Interpolator {
public:
DeccelerateInterpolator() {}
virtual ~DeccelerateInterpolator() {}
virtual float interpolate(float linearValue) { return sqrt(linearValue); }
};
} // End of namespace GUI
#endif /* GUI_ANIMATION_DECCELERATEINTERPOLATOR_H */

109
gui/animation/Drawable.h Normal file
View file

@ -0,0 +1,109 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
// Based on code by omergilad.
#ifndef GUI_ANIMATION_DRAWABLE_H
#define GUI_ANIMATION_DRAWABLE_H
#include "common/ptr.h"
#include "graphics/transparent_surface.h"
#include "gui/animation/Animation.h"
namespace GUI {
class Animation;
typedef Common::SharedPtr<Animation> AnimationPtr;
class Drawable {
public:
Drawable() :
_bitmap(NULL), _positionX(0), _positionY(0), _width(0), _height(0), _alpha(1),
_usingSnapshot(false), _shouldCenter(false) {
_displayRatio = 1.0;
}
virtual ~Drawable() {
if (_usingSnapshot)
delete _bitmap;
}
void updateAnimation(long currentTime) {
if (_animation.get() != NULL) {
_animation->update(this, currentTime);
}
}
bool isAnimationFinished() {
if (_animation.get() != NULL)
return _animation->isFinished();
return false;
}
float getAlpha() const { return _alpha; }
void setAlpha(float alpha) { _alpha = alpha; }
AnimationPtr getAnimation() const { return _animation; }
void setAnimation(AnimationPtr animation) { _animation = animation; }
Graphics::TransparentSurface *getBitmap() const { return _bitmap; }
void setBitmap(Graphics::TransparentSurface *bitmap) { _bitmap = bitmap; }
float getPositionX() const { return _positionX; }
void setPositionX(float positionX) { _positionX = positionX; }
float getPositionY() const { return _positionY; }
void setPositionY(float positionY) { _positionY = positionY; }
virtual float getWidth() const { return _width; }
void setWidth(float width) { _width = width; }
virtual float getHeight() const {
if (_height == 0)
return getWidth() * _bitmap->getRatio() * _displayRatio;
return _height;
}
void setHeight(float height) { _height = height; }
void setDisplayRatio(float ratio) { _displayRatio = ratio; }
inline bool shouldCenter() const { return _shouldCenter; }
void setShouldCenter(bool shouldCenter) { _shouldCenter = shouldCenter; }
protected:
bool _usingSnapshot;
private:
Graphics::TransparentSurface *_bitmap;
float _positionX;
float _positionY;
float _width;
float _height;
float _alpha;
bool _shouldCenter;
AnimationPtr _animation;
float _displayRatio;
};
typedef Common::SharedPtr<Drawable> DrawablePtr;
} // End of namespace GUI
#endif /* GUI_ANIMATION_DRAWABLE_H */

View file

@ -0,0 +1,44 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
// Based on code by omergilad.
#ifndef GUI_ANIMATION_INTERPOLATOR_H
#define GUI_ANIMATION_INTERPOLATOR_H
#include "common/ptr.h"
namespace GUI {
class Interpolator {
public:
Interpolator() {}
virtual ~Interpolator() {}
virtual float interpolate(float linearValue) = 0;
};
typedef Common::SharedPtr<Interpolator> InterpolatorPtr;
} // End of namespace GUI
#endif /* GUI_ANIMATION_INTERPOLATOR_H */

View file

@ -0,0 +1,72 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
// Based on code by omergilad.
#ifndef GUI_ANIMATION_PARALLELANIMATION_H
#define GUI_ANIMATION_PARALLELANIMATION_H
#include "gui/animation/Animation.h"
#include "common/array.h"
namespace GUI {
class ParallelAnimation: public Animation {
public:
ParallelAnimation() {}
virtual ~ParallelAnimation() {}
virtual void addAnimation(AnimationPtr animation) {
_animations.push_back(animation);
}
virtual void update(Drawable *drawable, long currentTime) {
for (AnimationPtr anim : _animations) {
anim->update(drawable, currentTime);
if (anim->isFinished()) {
finishAnimation();
}
}
}
virtual void start(long currentTime) {
Animation::start(currentTime);
for (AnimationPtr anim : _animations)
anim->start(currentTime);
}
virtual void setDuration(long duration) {
Animation::setDuration(duration);
for (AnimationPtr anim : _animations)
anim->setDuration(duration);
}
private:
Common::Array<AnimationPtr> _animations;
};
} // End of namespace GUI
#endif /* GUI_ANIMATION_PARALLELANIMATION_H */

View file

@ -0,0 +1,52 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
// Based on code by omergilad.
#include "gui/animation/RepeatAnimationWrapper.h"
namespace GUI {
void RepeatAnimationWrapper::update(Drawable* drawable, long currentTime) {
// Update wrapped animation
_animation->update(drawable, currentTime);
// If the animation is finished, increase the repeat count and restart it if needed
if (_animation->isFinished()) {
++_repeatCount;
if (_timesToRepeat > 0 && _repeatCount >= _timesToRepeat) {
finishAnimation();
} else {
_animation->start(currentTime);
}
}
}
void RepeatAnimationWrapper::start(long currentTime) {
Animation::start(currentTime);
_repeatCount = 0;
// Start wrapped animation
_animation->start(currentTime);
}
} // End of namespace GUI

View file

@ -0,0 +1,61 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
// Based on code by omergilad.
#ifndef GUI_ANIMATION_REPEATANIMATIONWRAPPER_H
#define GUI_ANIMATION_REPEATANIMATIONWRAPPER_H
#include "gui/animation/Animation.h"
namespace GUI {
class RepeatAnimationWrapper: public Animation {
public:
/**
* Animation - animation to repeat
*
* timesToRepeat - 0 means infinite
*/
RepeatAnimationWrapper(AnimationPtr animation, uint16 timesToRepeat) :
_animation(animation), _timesToRepeat(timesToRepeat) {}
virtual ~RepeatAnimationWrapper() {}
virtual void update(Drawable* drawable, long currentTime);
/**
* Set start time in millis
*/
virtual void start(long currentTime);
private:
uint16 _timesToRepeat;
uint16 _repeatCount;
AnimationPtr _animation;
};
} // End of namespace GUI
#endif /* GUI_ANIMATION_REPEATANIMATIONWRAPPER_H */

View file

@ -0,0 +1,69 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
// Based on code by omergilad.
#ifndef GUI_ANIMATION_SCALEANIMATION_H
#define GUI_ANIMATION_SCALEANIMATION_H
#include "gui/animation/Animation.h"
namespace GUI {
class ScaleAnimation: public Animation {
public:
ScaleAnimation() : _endWidth(0), _endWidthFactor(0) {}
virtual ~ScaleAnimation() {}
float getEndWidth() const { return _endWidth; }
void setEndWidth(float endWidth) { _endWidth = endWidth; }
float getEndWidthFactor() const { return _endWidthFactor; }
void setEndWidthFactor(float endWidthFactor) { _endWidthFactor = endWidthFactor; }
float getStartWidth() const { return _startWidth; }
void setStartWidth(float startWidth) { _startWidth = startWidth; }
void updateInternal(Drawable *drawable, float interpolation) {
// If start width was set as 0 -> use the current width as the start dimension
if (_startWidth == 0)
_startWidth = drawable->getWidth();
// If end width was set as 0 - multiply the start width by the given factor
if (_endWidth == 0)
_endWidth = _startWidth * _endWidthFactor;
// Calculate width based on interpolation
float width = _startWidth * (1 - interpolation) + _endWidth * interpolation;
drawable->setWidth(width);
}
private:
virtual void updateInternal(Drawable *drawable, float interpolation);
float _startWidth;
float _endWidth;
float _endWidthFactor;
};
} // End of namespace GUI
#endif /* GUI_ANIMATION_SCALEANIMATION_H */

View file

@ -0,0 +1,72 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
// Based on code by omergilad.
#include "gui/animation/SequenceAnimationComposite.h"
namespace GUI {
void SequenceAnimationComposite::start(long currentTime) {
Animation::start(currentTime);
// The first animation in the sequence should a start time equal to this sequence
if (_sequence.size() >= 1)
_sequence[0]->start(currentTime);
// Set the index to 0
_index = 0;
}
void SequenceAnimationComposite::addAnimation(AnimationPtr animation) {
_sequence.push_back(animation);
}
void SequenceAnimationComposite::update(Drawable *drawable, long currentTime) {
uint16 sequenceSize = _sequence.size();
// Check index bounds
if (_index >= sequenceSize)
return;
// Get the current animation in the sequence
AnimationPtr anim = _sequence[_index];
// Update the drawable
anim->update(drawable, currentTime);
// Check if the current animation is finished
if (anim->isFinished()) {
// Increase the index - move to the next animation
++_index;
if (_index >= sequenceSize) {
// Finished the sequence
finishAnimation();
} else {
// Set the start time for the next animation
_sequence[_index]->start(currentTime);
}
}
}
} // End of namespace GUI

View file

@ -0,0 +1,51 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
// Based on code by omergilad.
#ifndef GUI_ANIMATION_SEQUENCEANIMATION_H
#define GUI_ANIMATION_SEQUENCEANIMATION_H
#include "gui/animation/Animation.h"
#include "common/array.h"
namespace GUI {
class SequenceAnimationComposite: public Animation {
public:
SequenceAnimationComposite() {}
virtual ~SequenceAnimationComposite() {}
virtual void addAnimation(AnimationPtr animation);
virtual void update(Drawable* drawable, long currentTime);
virtual void start(long currentTime);
private:
uint16 _index;
Common::Array<AnimationPtr> _sequence;
};
} // End of namespace GUI
#endif /* GUI_ANIMATION_SEQUENCEANIMATION_H */

View file

@ -0,0 +1,71 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
// Based on code by omergilad.
#ifndef GUI_ANIMATION_WAITFORCONDITIONANIMATION_H
#define GUI_ANIMATION_WAITFORCONDITIONANIMATION_H
#include "gui/animation/Animation.h"
namespace GUI {
class Condition {
public:
virtual ~Condition() {}
virtual bool evaluate() = 0;
};
typedef Common::SharedPtr<Condition> ConditionPtr;
/**
* Used for delaying the animation sequence until a certain condition has been met
*/
class WaitForConditionAnimation: public Animation {
public:
WaitForConditionAnimation() {}
virtual ~WaitForConditionAnimation() {}
virtual void update(Drawable *drawable, long currentTime) {
// Check the condition - if it has been met, finish.
if (_condition.get() != NULL && _condition->evaluate()) {
finishAnimation();
}
}
ConditionPtr getCondition() const {
return _condition;
}
void setCondition(ConditionPtr condition) {
_condition = condition;
}
private:
ConditionPtr _condition;
};
} // End of namespace GUI
#endif /* GUI_ANIMATION_WAITFORCONDITIONANIMATION_H */

View file

@ -24,6 +24,9 @@ MODULE_OBJS := \
ThemeLayout.o \
ThemeParser.o \
Tooltip.o \
animation/Animation.o \
animation/RepeatAnimationWrapper.o \
animation/SequenceAnimationComposite.o \
widget.o \
widgets/editable.o \
widgets/edittext.o \