diff options
Diffstat (limited to 'engines/pink/objects/actions')
-rw-r--r-- | engines/pink/objects/actions/action_sound.cpp | 19 | ||||
-rw-r--r-- | engines/pink/objects/actions/action_sound.h | 2 |
2 files changed, 15 insertions, 6 deletions
diff --git a/engines/pink/objects/actions/action_sound.cpp b/engines/pink/objects/actions/action_sound.cpp index 42d279553b..44dfda45c7 100644 --- a/engines/pink/objects/actions/action_sound.cpp +++ b/engines/pink/objects/actions/action_sound.cpp @@ -35,6 +35,10 @@ ActionSound::ActionSound() : _sound(nullptr), _isStopped(1) {} +ActionSound::~ActionSound(){ + end(); +} + void ActionSound::deserialize(Archive &archive) { Action::deserialize(archive); archive >> _fileName; @@ -66,14 +70,17 @@ void ActionSound::start(bool unk) { } void ActionSound::end() { - debug("ActionSound %s of Actor %s is ended", _name.c_str(), _actor->getName().c_str()); + if (_sound) { + debug("ActionSound %s of Actor %s is ended", _name.c_str(), _actor->getName().c_str()); - Director *director = _actor->getPage()->getGame()->getDirector(); - director->removeSound(this); + Director *director = _actor->getPage()->getGame()->getDirector(); + director->removeSound(this); + + _sound->stop(); - _sound->stop(); - delete _sound; - _sound = nullptr; + delete _sound; + _sound = nullptr; + } } void ActionSound::update() { diff --git a/engines/pink/objects/actions/action_sound.h b/engines/pink/objects/actions/action_sound.h index e4bb2f1822..3c71da454e 100644 --- a/engines/pink/objects/actions/action_sound.h +++ b/engines/pink/objects/actions/action_sound.h @@ -32,6 +32,8 @@ class Sound; class ActionSound : public Action { public: ActionSound(); + ~ActionSound(); + virtual void deserialize(Archive &archive); virtual void toConsole(); |