From 41a31420cf091aeb4e986503387855d41e550106 Mon Sep 17 00:00:00 2001 From: manuel Date: Mon, 25 Apr 2011 14:39:00 +0200 Subject: - add intro sound on every round - add dieing sound - add dieing animation - add die on moving onto colorized block --- pacman-c++/actor.cpp | 49 ++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 44 insertions(+), 5 deletions(-) (limited to 'pacman-c++/actor.cpp') diff --git a/pacman-c++/actor.cpp b/pacman-c++/actor.cpp index c8922f7..2dced34 100644 --- a/pacman-c++/actor.cpp +++ b/pacman-c++/actor.cpp @@ -57,6 +57,29 @@ Actor::Actor(Color::Color color, bool local, QGraphicsItem *parent) m_eating.append(setupEatingAnimation(Actor::Up)); m_eating.append(setupEatingAnimation(Actor::Down)); + /* dieing animation */ + m_dieing = new QSequentialAnimationGroup(this); + for (int i = 0; i < 11; i++) + { + PixmapItem *img = new PixmapItem(m_pix, this); + m_images.append(img); + int x = i * Constants::sprite_offset + Constants::sprite_margin; + int y = 5 * Constants::sprite_offset + Constants::sprite_margin; + img->setSprite(x, y, Constants::field_size.width, Constants::field_size.height); + img->setZValue(zValue()); + img->setVisible(false); + + QPropertyAnimation *fadein = new QPropertyAnimation(img, "visible", m_dieing); + fadein->setDuration(0); + fadein->setEndValue(true); + + m_dieing->addPause(130); + + QPropertyAnimation *fadeout = new QPropertyAnimation(img, "visible", m_dieing); + fadeout->setDuration(0); + fadeout->setEndValue(false); + } + /* setup waka sound */ if (local) m_wakaPlayer = new GaplessAudioPlayer(Sound::WakaWaka, 100, this); @@ -112,11 +135,21 @@ bool Actor::isLocal() return m_local; } -void Actor::resetDirection() +void Actor::resetAnimation() { + if (Constants::server) + return; + + stopEating(); + m_moving->stop(); + m_dieing->stop(); /* hide all pictures */ for (int i = 0; i < m_images.size(); ++i) m_images.at(i)->setVisible(false); + + if (m_eating[m_direction] != NULL) + m_eating[m_direction]->stop(); + m_direction = Actor::None; m_images[m_direction]->setVisible(true); } @@ -213,9 +246,14 @@ bool Actor::canEat(Actor *other, const QList &order) void Actor::die() { - if (!m_local) + if (Constants::server) return; - AudioManager::self()->play(Sound::Die); + + resetAnimation(); + m_images[m_direction]->setVisible(false); + m_dieing->start(); + if (m_local) + AudioManager::self()->play(Sound::Die); } void Actor::eatingFruit() @@ -261,9 +299,10 @@ void Actor::addRoundPoints(unsigned int amount) m_roundPoints += amount; } -void Actor::finishRound() +void Actor::finishRound(bool died) { - m_gamePoints += m_roundPoints; + if (!died) + m_gamePoints += m_roundPoints; m_roundPoints = 0; } -- cgit v1.2.3