From 8af916b731ab9e9264d35359ba9bbb01a8bdaa49 Mon Sep 17 00:00:00 2001 From: totycro Date: Sat, 9 Apr 2011 19:36:24 +0200 Subject: minor adaptions --- pacman-c++/mainwidget.cpp | 142 ++++++++++++++++++++++++---------------------- 1 file changed, 75 insertions(+), 67 deletions(-) (limited to 'pacman-c++/mainwidget.cpp') diff --git a/pacman-c++/mainwidget.cpp b/pacman-c++/mainwidget.cpp index da08d89..1631d3f 100644 --- a/pacman-c++/mainwidget.cpp +++ b/pacman-c++/mainwidget.cpp @@ -7,7 +7,7 @@ #include "pacman.pb.h" MainWidget::MainWidget(QWidget *parent) - : SceneHolder(parent), m_currentKey(0), m_running(false) +: SceneHolder(parent), m_currentKey(0), m_running(false) { createGui(); updateMap(Util::createDummyMap()); @@ -19,6 +19,7 @@ MainWidget::MainWidget(QWidget *parent) if (!connected) { QMessageBox::critical(this, "Error", "Failed to connect to server, falling back to local test mode"); // TODO: quit application here or sth + m_socket = NULL; QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(tick())); timer->start(Constants::tick); @@ -85,9 +86,9 @@ void MainWidget::updateScore() } int id = (i.key() >> 1); QLabel *turnPointsLbl = - dynamic_cast(m_playerScoreLayouts.at(id)->itemAtPosition(0,1)->widget()); + dynamic_cast(m_playerScoreLayouts.at(id)->itemAtPosition(0,1)->widget()); QLabel *allPointsLbl = - dynamic_cast(m_playerScoreLayouts.at(id)->itemAtPosition(1,1)->widget()); + dynamic_cast(m_playerScoreLayouts.at(id)->itemAtPosition(1,1)->widget()); turnPointsLbl->setText(QString::number(id)); allPointsLbl->setText(QString::number(id)); } @@ -100,34 +101,35 @@ void MainWidget::updateMap(const Transmission::map_t& map) } -Transmission::field_t MainWidget::translateKey(int key) +Transmission::field_t MainWidget::translateKey(int key, int def) { switch(key) { - case Qt::Key_W: - case Qt::Key_Up: - return Transmission::direction_up; - break; - case Qt::Key_S: - case Qt::Key_Down: - return Transmission::direction_down; - break; - case Qt::Key_A: - case Qt::Key_Left: - return Transmission::direction_left; - break; - case Qt::Key_D: - case Qt::Key_Right: - return Transmission::direction_right; - break; - default: - return 0; + case Qt::Key_W: + case Qt::Key_Up: + return Transmission::direction_up; + break; + case Qt::Key_S: + case Qt::Key_Down: + return Transmission::direction_down; + break; + case Qt::Key_A: + case Qt::Key_Left: + return Transmission::direction_left; + break; + case Qt::Key_D: + case Qt::Key_Right: + return Transmission::direction_right; + break; + default: + return def; } } void MainWidget::tick() { -#if 0 + if (m_socket == NULL) { + // OLD TEST MODE Actor::Movement mov = Util::transmissionMovementToActor(m_currentKey, Actor::None); QMapIterator i(m_actors); @@ -143,33 +145,34 @@ void MainWidget::tick() list.at(j)->setOpacity(0.6); } } -#else - QByteArray data = m_socket->readAll(); - //qDebug() << "read qbytes " << data.length(); - // TODO: normal conversion to std::string won't work, - // probably due to \0-bytes. both those methods will yield - // a 3 char long string - //std::string dataStr = std::string(data.constData()); - //std::string dataStr = QString(data).toStdString(); - std::string dataStr; - for (int i = 0; i < data.size(); ++i) { - dataStr += data[i]; - } + } else { + QByteArray data = m_socket->readAll(); + //qDebug() << "read qbytes " << data.length(); + // TODO: normal conversion to std::string won't work, + // probably due to \0-bytes. both those methods will yield + // a 3 char long string + //std::string dataStr = std::string(data.constData()); + //std::string dataStr = QString(data).toStdString(); + std::string dataStr; + for (int i = 0; i < data.size(); ++i) { + dataStr += data[i]; + } - //qDebug() << "read str " << dataStr.length(); - ProtoBuf::MapUpdate packet; - packet.ParseFromString(dataStr); - Transmission::map_t map = Util::createUninitialisedMap(); - Q_ASSERT(packet.field_size() == (int) (Constants::map_size.width * Constants::map_size.height)); - int i = 0; - for (unsigned int x = 0; x < Constants::map_size.width; ++x) { - for (unsigned int y = 0; y < Constants::map_size.height; ++y) { - map[x][y] = packet.field(i); - ++i; + //qDebug() << "read str " << dataStr.length(); + ProtoBuf::MapUpdate packet; + packet.ParseFromString(dataStr); + Transmission::map_t map = Util::createUninitialisedMap(); + Q_ASSERT(packet.field_size() == (int) (Constants::map_size.width * Constants::map_size.height)); + int i = 0; + for (unsigned int x = 0; x < Constants::map_size.width; ++x) { + for (unsigned int y = 0; y < Constants::map_size.height; ++y) { + map[x][y] = packet.field(i); + ++i; + } } + + updateMap(map); } - updateMap(map); - #endif } @@ -179,34 +182,39 @@ void MainWidget::keyPressEvent(QKeyEvent* event) return; QWidget::keyPressEvent(event); - // TODO: remove m_currentKey when we don't need it any more for testing - m_currentKey = translateKey(event->key()); - - // send to server - ProtoBuf::KeyPressUpdate packet; - packet.set_newkey(m_currentKey); - std::string dataStr = packet.SerializeAsString(); - unsigned int bytesWritten = m_socket->write(dataStr.c_str(), dataStr.length()); - m_socket->flush(); - Q_ASSERT(bytesWritten == dataStr.length()); + Transmission::field_t newKey = translateKey(event->key()); + if (m_currentKey == newKey || newKey == -1) { + return; + } + m_currentKey = newKey; - qDebug() << "send key: " << m_currentKey; + if (m_socket != NULL) { + // send to server + ProtoBuf::KeyPressUpdate packet; + packet.set_newkey(m_currentKey); + std::string dataStr = packet.SerializeAsString(); + unsigned int bytesWritten = m_socket->write(dataStr.c_str(), dataStr.length()); + m_socket->flush(); + Q_ASSERT(bytesWritten == dataStr.length()); - return; + qDebug() << "send key: " << m_currentKey; + } else { - // test stuff - Actor::Movement mov = Util::transmissionMovementToActor(m_currentKey, Actor::None); + // test stuff + Actor::Movement mov = Util::transmissionMovementToActor(m_currentKey, Actor::None); - QMapIterator i(m_actors); - while (i.hasNext()) - { - i.next(); - i.value()->move(mov); + QMapIterator i(m_actors); + while (i.hasNext()) + { + i.next(); + i.value()->move(mov); + } } } void MainWidget::keyReleaseEvent(QKeyEvent* event) { + return; // currently not needed if (!m_running) return; @@ -237,6 +245,6 @@ bool MainWidget::connectToServer() { m_socket = new QTcpSocket(this); m_socket->connectToHost("127.0.0.1", Constants::port); - return m_socket->waitForConnected(3000); + return m_socket->waitForConnected(Constants::connection_timeout); } -- cgit v1.2.3