From a117d4bf53cbace2ef97ca3003904c1470643955 Mon Sep 17 00:00:00 2001 From: manuel Date: Wed, 13 Apr 2011 04:00:48 +0200 Subject: try to play the sound more gapless. if that won't work for totycro I'll revert the crap. it makes the code really ugly --- pacman-c++/actor.cpp | 39 ++++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) (limited to 'pacman-c++/actor.cpp') diff --git a/pacman-c++/actor.cpp b/pacman-c++/actor.cpp index f56407b..56e8e86 100644 --- a/pacman-c++/actor.cpp +++ b/pacman-c++/actor.cpp @@ -10,7 +10,7 @@ static QVariant myBooleanInterpolator(const bool &start, const bool &end, qreal Actor::Actor(Color::Color color, bool local, QGraphicsItem *parent) : GameEntity(color, parent),m_direction(Actor::None), m_local(local), - m_wakaPlayer(NULL), m_roundPoints(0), m_gamePoints(0) + m_wakaPlayer1(NULL), m_wakaPlayer2(NULL), m_roundPoints(0), m_gamePoints(0) { /* DON'T set any pixmap here. we've a pixmap in the animation * but we need a sprite for the collision detection @@ -57,11 +57,16 @@ Actor::Actor(Color::Color color, bool local, QGraphicsItem *parent) /* setup waka sound */ if (local) { - m_wakaPlayer = new AudioPlayer(this); - if (m_wakaPlayer->isWorking()) + m_wakaPlayer1 = new AudioPlayer(this); + m_wakaPlayer2 = new AudioPlayer(this); + if (m_wakaPlayer1->isWorking() && m_wakaPlayer2->isWorking()) { - m_wakaPlayer->setLoop(Sound::WakaWaka); - AudioManager::self()->registerAudioPlayer(m_wakaPlayer); + m_wakaPlayer1->setPrefinishMark(100); + m_wakaPlayer2->setPrefinishMark(100); + connect(m_wakaPlayer1, SIGNAL(prefinishMarkReached(qint32)), this, SLOT(startPlayer2())); + connect(m_wakaPlayer2, SIGNAL(prefinishMarkReached(qint32)), this, SLOT(startPlayer1())); + AudioManager::self()->registerAudioPlayer(m_wakaPlayer1); + AudioManager::self()->registerAudioPlayer(m_wakaPlayer2); } } @@ -232,18 +237,30 @@ void Actor::eatingPacman() void Actor::startEating() { - if (!m_local || !m_wakaPlayer->isWorking()) + if (!m_local || !m_wakaPlayer1->isWorking()) return; - if (m_wakaPlayer->state() != Phonon::PlayingState) - m_wakaPlayer->play(); + if (m_wakaPlayer1->state() != Phonon::PlayingState && m_wakaPlayer2->state() != Phonon::PlayingState) + startPlayer1(); } void Actor::stopEating() { - if (!m_local || !m_wakaPlayer->isWorking()) + if (!m_local || !m_wakaPlayer1->isWorking()) return; - if (m_wakaPlayer->state() != Phonon::PausedState) - m_wakaPlayer->pause(); + if (m_wakaPlayer1->state() != Phonon::PausedState) + m_wakaPlayer1->pause(); + if (m_wakaPlayer2->state() != Phonon::PausedState) + m_wakaPlayer2->pause(); +} + +void Actor::startPlayer1() +{ + m_wakaPlayer1->play(Sound::WakaWaka); +} + +void Actor::startPlayer2() +{ + m_wakaPlayer2->play(Sound::WakaWaka); } unsigned int Actor::getRoundPoints() -- cgit v1.2.3