From c68e77cac9558316ac16d58c0f6b888599ab021a Mon Sep 17 00:00:00 2001 From: manuel Date: Mon, 11 Apr 2011 14:15:59 +0200 Subject: - make moving animation a bit smoother (on my computer at least) - make animation stop after getting blocked --- pacman-c++/actor.cpp | 2 +- pacman-c++/sceneholder.cpp | 4 ++- pacman-c++/server.cpp | 27 ++++++++++------ pacman-c++/util.cpp | 80 ++++++++++++++++++++++------------------------ pacman-c++/util.h | 10 +++--- 5 files changed, 64 insertions(+), 59 deletions(-) (limited to 'pacman-c++') diff --git a/pacman-c++/actor.cpp b/pacman-c++/actor.cpp index a97232f..ab860bc 100644 --- a/pacman-c++/actor.cpp +++ b/pacman-c++/actor.cpp @@ -89,7 +89,7 @@ QSequentialAnimationGroup *Actor::setupEatingAnimation(Actor::Movement direction fadeout->setEndValue(false); QPropertyAnimation *move = new QPropertyAnimation(img, "pos", m_moving); - move->setDuration(Constants::tick - 50); //TODO + move->setDuration(Constants::tick - 30); //TODO move->setEndValue(QPoint(0, 0)); } diff --git a/pacman-c++/sceneholder.cpp b/pacman-c++/sceneholder.cpp index 49ce6e9..f13bf76 100644 --- a/pacman-c++/sceneholder.cpp +++ b/pacman-c++/sceneholder.cpp @@ -89,7 +89,9 @@ void SceneHolder::updateMap(const Transmission::map_t& map) m_actors[color] = actor; m_scene->addItem(actor); actor->setPos(mapPositionToCoord(x, y)); - } else { + } + else + { Actor::Movement direction = Util::transmissionMovementToActor(cur & Transmission::direction_mask); actor->move(direction); diff --git a/pacman-c++/server.cpp b/pacman-c++/server.cpp index 965517e..8b07882 100644 --- a/pacman-c++/server.cpp +++ b/pacman-c++/server.cpp @@ -35,10 +35,11 @@ Transmission::map_t Server::calculateUpdates() { Transmission::map_t map = Util::createEmptyMap(); - m_actorMovements[Color::blue] = Actor::Movement( (qrand() % 4) + 1 ); - m_actorMovements[Color::green] = Actor::Movement( (qrand() % 4) + 1 ); + //TODO: ai + //m_actorMovements[Color::blue] = Actor::Movement((qrand() % 4) + 1); + //m_actorMovements[Color::green] = Actor::Movement((qrand() % 4) + 1); - QMapIterator i(m_actorMovements); + QMutableMapIterator i(m_actorMovements); while (i.hasNext()) { i.next(); @@ -90,10 +91,11 @@ Transmission::map_t Server::calculateUpdates() PixmapItem *item = visualMap[newMapPosition.x()][newMapPosition.y()]; if (item != NULL && oldItem != item) { - if (! item->checkEnter(actor)) + if (!item->checkEnter(actor)) { - // movement invalid + /* movement invalid. e.g. move against wall */ newMapPosition = mapPosition; + m_actorMovements[i.key()] = Actor::None; } else { @@ -107,12 +109,17 @@ Transmission::map_t Server::calculateUpdates() } // - if (mapPosition != newMapPosition) - { - //map[mapPosition.x()][mapPosition.y()] = Transmission::empty; - map[newMapPosition.x()][newMapPosition.y()] |= + + //map[mapPosition.x()][mapPosition.y()] = Transmission::empty; + map[newMapPosition.x()][newMapPosition.y()] |= Transmission::pacman | i.key() | - Util::actorMovementToTransmission(i.value()) ; + Util::actorMovementToTransmission(i.value()); + + if (i.value() == Actor::None) + { + /* set actor to non-moving */ + m_actorMovements[i.key()] = Actor::None; + i.remove(); } } return map; diff --git a/pacman-c++/util.cpp b/pacman-c++/util.cpp index 3d04d9f..e82c961 100644 --- a/pacman-c++/util.cpp +++ b/pacman-c++/util.cpp @@ -93,56 +93,52 @@ namespace Util { switch (mov) { - case Actor::None: - return Transmission::direction_none; - break; - case Actor::Left: - return Transmission::direction_left; - break; - case Actor::Right: - return Transmission::direction_right; - break; - case Actor::Up: - return Transmission::direction_up; - break; - case Actor::Down: - return Transmission::direction_down; - break; - default: - if (def == static_cast(-1)) - Q_ASSERT(false); - else - return def; + case Actor::None: + return Transmission::direction_none; + break; + case Actor::Left: + return Transmission::direction_left; + break; + case Actor::Right: + return Transmission::direction_right; + break; + case Actor::Up: + return Transmission::direction_up; + break; + case Actor::Down: + return Transmission::direction_down; + break; + default: + return def; + break; } - return 0; // for pleasing the compiler + return def; } Actor::Movement transmissionMovementToActor(Transmission::field_t field, Actor::Movement def) { switch (field) { - case Transmission::direction_none: - return Actor::None; - break; - case Transmission::direction_left: - return Actor::Left; - break; - case Transmission::direction_right: - return Actor::Right; - break; - case Transmission::direction_up: - return Actor::Up; - break; - case Transmission::direction_down: - return Actor::Down; - break; - default: - if (def == Actor::Movement(-1)) - Q_ASSERT(false); - else - return def; + case Transmission::direction_none: + return Actor::None; + break; + case Transmission::direction_left: + return Actor::Left; + break; + case Transmission::direction_right: + return Actor::Right; + break; + case Transmission::direction_up: + return Actor::Up; + break; + case Transmission::direction_down: + return Actor::Down; + break; + default: + return def; + break; } - return Actor::None; // for pleasing the compiler + return def; } void QByteArrayToStdString(const QByteArray& arr, std::string& str) diff --git a/pacman-c++/util.h b/pacman-c++/util.h index 1422dee..f68af67 100644 --- a/pacman-c++/util.h +++ b/pacman-c++/util.h @@ -13,11 +13,11 @@ namespace Util Transmission::map_t createDemoMap(); Transmission::map_t createEmptyMap(); - // default is to assert false with -1 - Transmission::field_t actorMovementToTransmission(Actor::Movement mov, - Transmission::field_t def = -1); - Actor::Movement transmissionMovementToActor(Transmission::field_t field, - Actor::Movement def = Actor::Movement(-1)); + // default is to assert false with -1 + Transmission::field_t actorMovementToTransmission(Actor::Movement mov, + Transmission::field_t def = Transmission::none); + Actor::Movement transmissionMovementToActor(Transmission::field_t field, + Actor::Movement def = Actor::None); void QByteArrayToStdString(const QByteArray& arr, std::string& str); -- cgit v1.2.3