From fae7c3377c8995b217e620c5cf1e963b3ab1e84a Mon Sep 17 00:00:00 2001 From: manuel Date: Tue, 12 Apr 2011 16:22:19 +0200 Subject: finding out which actor has eaten which element didn't work correctly. instead of checking that on client side the server now just sends the id of the actor withing the explicit empty id data field --- pacman-c++/actor.cpp | 93 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 53 insertions(+), 40 deletions(-) (limited to 'pacman-c++/actor.cpp') diff --git a/pacman-c++/actor.cpp b/pacman-c++/actor.cpp index baf6dca..41de160 100644 --- a/pacman-c++/actor.cpp +++ b/pacman-c++/actor.cpp @@ -11,7 +11,7 @@ static QVariant myBooleanInterpolator(const bool &start, const bool &end, qreal Actor::Actor(Color::Color color, bool local, QGraphicsItem *parent) : PixmapItem(parent), m_color(color), m_direction(Actor::None), m_local(local), - m_player(NULL), m_roundPoints(0), m_gamePoints(0) + m_wakaPlayer(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 @@ -55,14 +55,14 @@ Actor::Actor(Color::Color color, bool local, QGraphicsItem *parent) m_eating.append(setupEatingAnimation(Actor::Up)); m_eating.append(setupEatingAnimation(Actor::Down)); - /* setup sound */ + /* setup waka sound */ if (local) { - m_player = new AudioPlayer(this); - if (m_player->isWorking()) + m_wakaPlayer = new AudioPlayer(this); + if (m_wakaPlayer->isWorking()) { - m_player->setLoop(Sound::WakaWaka); - AudioManager::self()->registerAudioPlayer(m_player); + m_wakaPlayer->setLoop(Sound::WakaWaka); + AudioManager::self()->registerAudioPlayer(m_wakaPlayer); } } @@ -95,7 +95,7 @@ QSequentialAnimationGroup *Actor::setupEatingAnimation(Actor::Movement direction fadeout->setEndValue(false); QPropertyAnimation *move = new QPropertyAnimation(img, "pos", m_moving); - move->setDuration(Constants::tick - 30); //TODO + move->setDuration(Constants::tick - 30); move->setEndValue(QPoint(0, 0)); } @@ -181,16 +181,51 @@ void Actor::move(Actor::Movement direction) if (direction != Actor::None) { - if (m_local && m_player->isWorking() && m_player->state() != Phonon::PlayingState) - m_player->play(); + //if (m_local && m_player->isWorking() && m_player->state() != Phonon::PlayingState) + // m_player->play(); m_moving->start(); } else if (direction != m_direction) { - if (m_local && m_player->isWorking() && m_player->state() != Phonon::PausedState) - m_player->pause(); + //if (m_local && m_player->isWorking() && m_player->state() != Phonon::PausedState) + // m_player->pause(); } + if (direction == Actor::None) + { + qDebug() << "pause"; + m_wakaPlayer->setMuted(true); + } + + m_direction = direction; +} + +void Actor::moveByServer(Actor::Movement direction) +{ + qDebug() << "move by server"; + + QPointF endpos(0, 0); + switch(direction) + { + case Actor::None: + break; + case Actor::Left: + endpos.setX(static_cast(Constants::field_size.width) * -1); + break; + case Actor::Right: + endpos.setX(Constants::field_size.width); + break; + case Actor::Up: + endpos.setY(static_cast(Constants::field_size.height) * -1); + break; + case Actor::Down: + endpos.setY(Constants::field_size.height); + break; + default: + Q_ASSERT(false); + break; + } + setPos(pos() + endpos); m_direction = direction; } @@ -213,6 +248,13 @@ void Actor::eatingCherry() AudioManager::self()->play(Sound::EatingCherry); } +AudioPlayer *Actor::wakaPlayer() +{ + if (!m_local || !m_wakaPlayer->isWorking()) + return NULL; + return m_wakaPlayer; +} + unsigned int Actor::getRoundPoints() { return m_roundPoints; @@ -233,32 +275,3 @@ void Actor::finishRound() m_gamePoints += m_roundPoints; m_roundPoints = 0; } - -void Actor::moveByServer(Actor::Movement direction) -{ - qDebug() << "move by server"; - - QPointF endpos(0, 0); - switch(direction) - { - case Actor::None: - break; - case Actor::Left: - endpos.setX(static_cast(Constants::field_size.width) * -1); - break; - case Actor::Right: - endpos.setX(Constants::field_size.width); - break; - case Actor::Up: - endpos.setY(static_cast(Constants::field_size.height) * -1); - break; - case Actor::Down: - endpos.setY(Constants::field_size.height); - break; - default: - Q_ASSERT(false); - break; - } - setPos(pos() + endpos); - m_direction = direction; -} -- cgit v1.2.3