Skip to content

Commit

Permalink
ZVISION: Further cleanup to the AnimationNode class
Browse files Browse the repository at this point in the history
  • Loading branch information
bluegr committed Dec 30, 2014
1 parent 47b90ef commit 0c4e067
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 18 deletions.
20 changes: 6 additions & 14 deletions engines/zvision/scripting/sidefx/animation_node.cpp
Expand Up @@ -33,14 +33,13 @@

namespace ZVision {

AnimationNode::AnimationNode(ZVision *engine, uint32 controlKey, const Common::String &fileName, int32 mask, int32 frate, bool DisposeAfterUse)
AnimationNode::AnimationNode(ZVision *engine, uint32 controlKey, const Common::String &fileName, int32 mask, int32 frate, bool disposeAfterUse)
: SideFX(engine, controlKey, SIDEFX_ANIM),
_DisposeAfterUse(DisposeAfterUse),
_disposeAfterUse(disposeAfterUse),
_mask(mask),
_animation(NULL) {

_animation = engine->loadAnimation(fileName);
_animation->start();

if (frate > 0) {
_frmDelayOverride = (int32)(1000.0 / frate);
Expand Down Expand Up @@ -89,12 +88,10 @@ bool AnimationNode::process(uint32 deltaTimeInMillis) {
if (it != _playList.end()) {
playnode *nod = &(*it);

if (nod->_curFrame == -1) {
if (!_animation->isPlaying()) {
// The node is just beginning playback
nod->_curFrame = nod->start;

_animation->start();
_animation->seekToFrame(nod->start);
_animation->setEndFrame(nod->stop);

nod->_delay = deltaTimeInMillis; // Force the frame to draw
if (nod->slot)
Expand All @@ -111,10 +108,9 @@ bool AnimationNode::process(uint32 deltaTimeInMillis) {
delete nod->_scaled;
}
_playList.erase(it);
return _DisposeAfterUse;
return _disposeAfterUse;
}

nod->_curFrame = nod->start;
_animation->seekToFrame(nod->start);
}

Expand Down Expand Up @@ -190,13 +186,9 @@ void AnimationNode::addPlayNode(int32 slot, int x, int y, int x2, int y2, int st
nod.loop = loops;
nod.pos = Common::Rect(x, y, x2 + 1, y2 + 1);
nod.start = startFrame;
nod.stop = endFrame;

if (nod.stop >= (int)_animation->getFrameCount())
nod.stop = _animation->getFrameCount() - 1;
_animation->setEndFrame(CLIP<int>(endFrame, 0,_animation->getFrameCount() - 1));

nod.slot = slot;
nod._curFrame = -1;
nod._delay = 0;
nod._scaled = NULL;
_playList.push_back(nod);
Expand Down
6 changes: 2 additions & 4 deletions engines/zvision/scripting/sidefx/animation_node.h
Expand Up @@ -41,16 +41,14 @@ class ZVision;

class AnimationNode : public SideFX {
public:
AnimationNode(ZVision *engine, uint32 controlKey, const Common::String &fileName, int32 mask, int32 frate, bool DisposeAfterUse = true);
AnimationNode(ZVision *engine, uint32 controlKey, const Common::String &fileName, int32 mask, int32 frate, bool disposeAfterUse = true);
~AnimationNode();

struct playnode {
Common::Rect pos;
int32 slot;
int32 start;
int32 stop;
int32 loop;
int32 _curFrame;
int32 _delay;
Graphics::Surface *_scaled;
};
Expand All @@ -61,7 +59,7 @@ class AnimationNode : public SideFX {
PlayNodes _playList;

int32 _mask;
bool _DisposeAfterUse;
bool _disposeAfterUse;

Video::VideoDecoder *_animation;
int32 _frmDelayOverride;
Expand Down

1 comment on commit 0c4e067

@Marisa-Chan
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's bad to delete stop of playnode because if you add more than one item to playlist each of them will call setEndFrame immediately

Please sign in to comment.