summaryrefslogtreecommitdiffstats
path: root/pacman-c++
diff options
context:
space:
mode:
authormanuel <manuel@mausz.at>2011-04-13 17:41:28 +0200
committermanuel <manuel@mausz.at>2011-04-13 17:41:28 +0200
commit3d20638fa8e295271ce38953ad1c657d9275bd99 (patch)
tree66cc9f2c3cc1e8772cb99b27b0c20ec8067ff80f /pacman-c++
parent2c351a8bccdfe0fe9ad0ccb4dba5e15ef23b4c0c (diff)
downloadfoop-3d20638fa8e295271ce38953ad1c657d9275bd99.tar.gz
foop-3d20638fa8e295271ce38953ad1c657d9275bd99.tar.bz2
foop-3d20638fa8e295271ce38953ad1c657d9275bd99.zip
some speed improvments regarding protobuf
Diffstat (limited to 'pacman-c++')
-rw-r--r--pacman-c++/block.cpp15
-rw-r--r--pacman-c++/block.h7
-rw-r--r--pacman-c++/mainwidget.cpp10
-rw-r--r--pacman-c++/mainwidget.h3
-rw-r--r--pacman-c++/server.cpp17
-rw-r--r--pacman-c++/server.h3
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
5QMap<Color::Color, QPixmap> Block::m_pixmaps; 6QMap<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
30bool Block::checkEnter(Actor * /* actor */)
31{
32 return (m_color != Color::none);
33}
34
35bool 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
33private: 30private:
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
147void MainWidget::tick() 147void 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
184void Server::sendUpdate(Transmission::map_t map) 182void 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
211void Server::keyPressUpdate() 209void 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