From 11a1b82636ab75cb9d002712a3e0f353ad6b2579 Mon Sep 17 00:00:00 2001 From: manuel Date: Thu, 7 Apr 2011 04:02:55 +0200 Subject: add some sounds --- pacman-c++/actor.cpp | 48 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 3 deletions(-) (limited to 'pacman-c++/actor.cpp') diff --git a/pacman-c++/actor.cpp b/pacman-c++/actor.cpp index b6de49c..7358756 100644 --- a/pacman-c++/actor.cpp +++ b/pacman-c++/actor.cpp @@ -2,6 +2,7 @@ #include "animationmanager.h" #include #include +#include #include static QVariant myBooleanInterpolator(const bool &start, const bool &end, qreal progress) @@ -13,9 +14,8 @@ Actor::Actor(Color::Color color, bool local, QGraphicsItem *parent) : PixmapItem(parent), m_color(color), m_direction(Actor::None), m_local(local) { m_pix = ":/" + QString("actor%1").arg((m_color >> 1) + 1); - // DON'T set any pixmap here. we've a pixmap in the animation - //setPixmap(m_pix); - // higher player "over" lower player + /* DON'T set any pixmap here. we've a pixmap in the animation */ + /* higher player "over" lower player */ setZValue(m_color * 10); /* setup icon for player */ @@ -46,6 +46,17 @@ Actor::Actor(Color::Color color, bool local, QGraphicsItem *parent) m_eating.append(setupEatingAnimation(Actor::Up)); m_eating.append(setupEatingAnimation(Actor::Down)); + /* setup player */ + m_player = new Phonon::MediaObject(this); + Phonon::AudioOutput *audio_output = new Phonon::AudioOutput(Phonon::MusicCategory, this); + Phonon::createPath(m_player, audio_output); + connect(m_player, SIGNAL(finished()), this, SLOT(enqueue())); + + /* preload sounds */ + m_sounds.append(new QFile(":/sound/wakawaka")); + m_sounds.append(new QFile(":/sound/die")); + m_sounds.append(new QFile(":/sound/eatingcherry")); + /* make the picture showing the current direction visible */ m_images[m_direction]->setVisible(true); } @@ -103,6 +114,13 @@ void Actor::move(Actor::Movement direction) if (isMoving()) return; + if (m_local && m_player->state() != Phonon::PlayingState) + { + m_player->stop(); + m_player->setCurrentSource(m_sounds[0]); + m_player->play(); + } + /* stop current animation */ if (direction != m_direction) { @@ -162,3 +180,27 @@ bool Actor::isMoving() { return (m_moving->state() == QAbstractAnimation::Running); } + +void Actor::enqueue() +{ + if (isMoving()) + m_player->enqueue(m_sounds[0]); +} + +void Actor::die() +{ + if (!m_local) + return; + m_player->stop(); + m_player->setCurrentSource(m_sounds[1]); + m_player->play(); +} + +void Actor::eatingCherry() +{ + if (!m_local) + return; + m_player->stop(); + m_player->setCurrentSource(m_sounds[2]); + m_player->play(); +} -- cgit v1.2.3