diff options
Diffstat (limited to 'pacman-c++')
| -rw-r--r-- | pacman-c++/block.cpp | 15 | ||||
| -rw-r--r-- | pacman-c++/block.h | 7 | ||||
| -rw-r--r-- | pacman-c++/mainwidget.cpp | 10 | ||||
| -rw-r--r-- | pacman-c++/mainwidget.h | 3 | ||||
| -rw-r--r-- | pacman-c++/server.cpp | 17 | ||||
| -rw-r--r-- | pacman-c++/server.h | 3 |
6 files changed, 34 insertions, 21 deletions
diff --git a/pacman-c++/block.cpp b/pacman-c++/block.cpp index 083b203..c6aaa73 100644 --- a/pacman-c++/block.cpp +++ b/pacman-c++/block.cpp | |||
| @@ -1,5 +1,6 @@ | |||
| 1 | #include "block.h" | 1 | #include "block.h" |
| 2 | #include "constants.h" | 2 | #include "constants.h" |
| 3 | #include "actor.h" | ||
| 3 | #include <QtDebug> | 4 | #include <QtDebug> |
| 4 | 5 | ||
| 5 | QMap<Color::Color, QPixmap> Block::m_pixmaps; | 6 | QMap<Color::Color, QPixmap> Block::m_pixmaps; |
| @@ -25,3 +26,17 @@ void Block::setNeighbours(unsigned int neighbours) | |||
| 25 | { | 26 | { |
| 26 | setSprite(neighbours * Constants::sprite_offset, 0, Constants::field_size.width, Constants::field_size.height); | 27 | setSprite(neighbours * Constants::sprite_offset, 0, Constants::field_size.width, Constants::field_size.height); |
| 27 | } | 28 | } |
| 29 | |||
| 30 | bool Block::checkEnter(Actor * /* actor */) | ||
| 31 | { | ||
| 32 | return (m_color != Color::none); | ||
| 33 | } | ||
| 34 | |||
| 35 | bool Block::enter(Actor *actor) | ||
| 36 | { | ||
| 37 | if (m_color != actor->color()) | ||
| 38 | { | ||
| 39 | //TODO: actor dies + game ends | ||
| 40 | } | ||
| 41 | return true; | ||
| 42 | } | ||
diff --git a/pacman-c++/block.h b/pacman-c++/block.h index db104e3..2f388c8 100644 --- a/pacman-c++/block.h +++ b/pacman-c++/block.h | |||
| @@ -24,11 +24,8 @@ public: | |||
| 24 | {}; | 24 | {}; |
| 25 | 25 | ||
| 26 | void setNeighbours(unsigned int neighbours); | 26 | void setNeighbours(unsigned int neighbours); |
| 27 | virtual bool checkEnter(Actor *) | 27 | virtual bool checkEnter(Actor *actor); |
| 28 | { | 28 | virtual bool enter(Actor *actor); |
| 29 | /* TODO: colored blocks */ | ||
| 30 | return false; | ||
| 31 | } | ||
| 32 | 29 | ||
| 33 | private: | 30 | private: |
| 34 | // map for saving QPixmaps for reuse | 31 | // map for saving QPixmaps for reuse |
diff --git a/pacman-c++/mainwidget.cpp b/pacman-c++/mainwidget.cpp index d441607..9507e85 100644 --- a/pacman-c++/mainwidget.cpp +++ b/pacman-c++/mainwidget.cpp | |||
| @@ -146,26 +146,24 @@ Transmission::field_t MainWidget::translateKey(int key) | |||
| 146 | 146 | ||
| 147 | void MainWidget::tick() | 147 | void MainWidget::tick() |
| 148 | { | 148 | { |
| 149 | //TODO: allocate + reuse packet | ||
| 150 | QSharedPointer<QByteArray> data = Util::receivePacket(m_socket); | 149 | QSharedPointer<QByteArray> data = Util::receivePacket(m_socket); |
| 151 | ProtoBuf::MapUpdate packet; | 150 | bool worked = m_updatepacket.ParseFromArray(data->data(), data->size()); |
| 152 | bool worked = packet.ParseFromArray(data->data(), data->size()); | ||
| 153 | Q_ASSERT(worked); | 151 | Q_ASSERT(worked); |
| 154 | Q_UNUSED(worked); | 152 | Q_UNUSED(worked); |
| 155 | Transmission::map_t map = Util::createUninitialisedMap(); | 153 | Transmission::map_t map = Util::createUninitialisedMap(); |
| 156 | Q_ASSERT(packet.field_size() == (int) (Constants::map_size.width * Constants::map_size.height)); | 154 | Q_ASSERT(m_updatepacket.field_size() == (int) (Constants::map_size.width * Constants::map_size.height)); |
| 157 | int i = 0; | 155 | int i = 0; |
| 158 | for (unsigned int x = 0; x < Constants::map_size.width; ++x) | 156 | for (unsigned int x = 0; x < Constants::map_size.width; ++x) |
| 159 | { | 157 | { |
| 160 | for (unsigned int y = 0; y < Constants::map_size.height; ++y) | 158 | for (unsigned int y = 0; y < Constants::map_size.height; ++y) |
| 161 | { | 159 | { |
| 162 | map[x][y] = packet.field(i); | 160 | map[x][y] = m_updatepacket.field(i); |
| 163 | ++i; | 161 | ++i; |
| 164 | } | 162 | } |
| 165 | } | 163 | } |
| 166 | m_scene->updateMap(map); | 164 | m_scene->updateMap(map); |
| 167 | Util::deleteMap(map); | 165 | Util::deleteMap(map); |
| 168 | updateScore(packet); | 166 | updateScore(m_updatepacket); |
| 169 | 167 | ||
| 170 | if (m_socket->bytesAvailable() > (qint64)sizeof(qint64)) | 168 | if (m_socket->bytesAvailable() > (qint64)sizeof(qint64)) |
| 171 | tick(); | 169 | tick(); |
diff --git a/pacman-c++/mainwidget.h b/pacman-c++/mainwidget.h index cbc195e..a316d9e 100644 --- a/pacman-c++/mainwidget.h +++ b/pacman-c++/mainwidget.h | |||
| @@ -56,6 +56,9 @@ private: | |||
| 56 | 56 | ||
| 57 | QTcpSocket *m_socket; | 57 | QTcpSocket *m_socket; |
| 58 | SceneHolder *m_scene; | 58 | SceneHolder *m_scene; |
| 59 | |||
| 60 | /* allocate as member variable as this packet is large and used often */ | ||
| 61 | ProtoBuf::MapUpdate m_updatepacket; | ||
| 59 | }; | 62 | }; |
| 60 | 63 | ||
| 61 | #endif // MAINWIDGET_H | 64 | #endif // MAINWIDGET_H |
diff --git a/pacman-c++/server.cpp b/pacman-c++/server.cpp index b1877ad..51dcc24 100644 --- a/pacman-c++/server.cpp +++ b/pacman-c++/server.cpp | |||
| @@ -153,8 +153,8 @@ void Server::waitForClientConnections() | |||
| 153 | // server must stay alive as long as sockets (qt parent mem mechanism) | 153 | // server must stay alive as long as sockets (qt parent mem mechanism) |
| 154 | tcpSrv->listen(QHostAddress::Any, Constants::Networking::port); | 154 | tcpSrv->listen(QHostAddress::Any, Constants::Networking::port); |
| 155 | 155 | ||
| 156 | ProtoBuf::WhoAmI packet; | ||
| 156 | #define SINGLE | 157 | #define SINGLE |
| 157 | |||
| 158 | #ifdef SINGLE | 158 | #ifdef SINGLE |
| 159 | for (unsigned int i = 0; i < 1; ++i) | 159 | for (unsigned int i = 0; i < 1; ++i) |
| 160 | { | 160 | { |
| @@ -172,8 +172,6 @@ void Server::waitForClientConnections() | |||
| 172 | Color::Color color = Color::order[i]; | 172 | Color::Color color = Color::order[i]; |
| 173 | m_clientConnections[color] = socket; | 173 | m_clientConnections[color] = socket; |
| 174 | /* notify player of color */ | 174 | /* notify player of color */ |
| 175 | //TODO: allocate + reuse packet | ||
| 176 | ProtoBuf::WhoAmI packet; | ||
| 177 | packet.set_color(color); | 175 | packet.set_color(color); |
| 178 | Util::sendPacket(packet, socket); | 176 | Util::sendPacket(packet, socket); |
| 179 | 177 | ||
| @@ -183,21 +181,21 @@ void Server::waitForClientConnections() | |||
| 183 | 181 | ||
| 184 | void Server::sendUpdate(Transmission::map_t map) | 182 | void Server::sendUpdate(Transmission::map_t map) |
| 185 | { | 183 | { |
| 186 | ProtoBuf::MapUpdate packet; | 184 | m_updatepacket.Clear(); |
| 187 | 185 | ||
| 188 | for (unsigned int x = 0; x < Constants::map_size.width; ++x) | 186 | for (unsigned int x = 0; x < Constants::map_size.width; ++x) |
| 189 | { | 187 | { |
| 190 | for (unsigned int y = 0; y < Constants::map_size.height; ++y) | 188 | for (unsigned int y = 0; y < Constants::map_size.height; ++y) |
| 191 | packet.add_field(map[x][y]); | 189 | m_updatepacket.add_field(map[x][y]); |
| 192 | } | 190 | } |
| 193 | 191 | ||
| 194 | for(unsigned i = 0; Color::order[i] != Color::none; ++i) | 192 | for(unsigned i = 0; Color::order[i] != Color::none; ++i) |
| 195 | { | 193 | { |
| 196 | packet.add_round_points(m_actors.value(Color::order[i])->getRoundPoints()); | 194 | m_updatepacket.add_round_points(m_actors.value(Color::order[i])->getRoundPoints()); |
| 197 | packet.add_game_points(m_actors.value(Color::order[i])->getGamePoints()); | 195 | m_updatepacket.add_game_points(m_actors.value(Color::order[i])->getGamePoints()); |
| 198 | } | 196 | } |
| 199 | 197 | ||
| 200 | QSharedPointer<QByteArray> data = Util::createPacket(packet); | 198 | QSharedPointer<QByteArray> data = Util::createPacket(m_updatepacket); |
| 201 | foreach(QTcpSocket *socket, m_clientConnections) | 199 | foreach(QTcpSocket *socket, m_clientConnections) |
| 202 | { | 200 | { |
| 203 | if (!Util::sendPacket(data.data(), socket)) | 201 | if (!Util::sendPacket(data.data(), socket)) |
| @@ -210,6 +208,7 @@ void Server::sendUpdate(Transmission::map_t map) | |||
| 210 | 208 | ||
| 211 | void Server::keyPressUpdate() | 209 | void Server::keyPressUpdate() |
| 212 | { | 210 | { |
| 211 | ProtoBuf::KeyPressUpdate packet; | ||
| 213 | QMapIterator<Color::Color, QTcpSocket *> i(m_clientConnections); | 212 | QMapIterator<Color::Color, QTcpSocket *> i(m_clientConnections); |
| 214 | while (i.hasNext()) | 213 | while (i.hasNext()) |
| 215 | { | 214 | { |
| @@ -220,8 +219,6 @@ void Server::keyPressUpdate() | |||
| 220 | while (socket->bytesAvailable() > (qint64)sizeof(qint64)) | 219 | while (socket->bytesAvailable() > (qint64)sizeof(qint64)) |
| 221 | { | 220 | { |
| 222 | QSharedPointer<QByteArray> data = Util::receivePacket(socket); | 221 | QSharedPointer<QByteArray> data = Util::receivePacket(socket); |
| 223 | //TODO: allocate + reuse packet | ||
| 224 | ProtoBuf::KeyPressUpdate packet; | ||
| 225 | bool worked = packet.ParseFromArray(data->data(), data->size()); | 222 | bool worked = packet.ParseFromArray(data->data(), data->size()); |
| 226 | Q_ASSERT(worked); | 223 | Q_ASSERT(worked); |
| 227 | Q_UNUSED(worked); | 224 | Q_UNUSED(worked); |
diff --git a/pacman-c++/server.h b/pacman-c++/server.h index f7505a6..8c9e741 100644 --- a/pacman-c++/server.h +++ b/pacman-c++/server.h | |||
| @@ -35,6 +35,9 @@ protected: | |||
| 35 | 35 | ||
| 36 | /* current movements. required to make pacmans continue their movement */ | 36 | /* current movements. required to make pacmans continue their movement */ |
| 37 | QMap<Color::Color, Actor::Movement> m_actorMovements; | 37 | QMap<Color::Color, Actor::Movement> m_actorMovements; |
| 38 | |||
| 39 | /* allocate as member variable as this packet is large and used often */ | ||
| 40 | ProtoBuf::MapUpdate m_updatepacket; | ||
| 38 | }; | 41 | }; |
| 39 | 42 | ||
| 40 | #endif // SERVER_H | 43 | #endif // SERVER_H |
