From 3d20638fa8e295271ce38953ad1c657d9275bd99 Mon Sep 17 00:00:00 2001 From: manuel Date: Wed, 13 Apr 2011 17:41:28 +0200 Subject: some speed improvments regarding protobuf --- pacman-c++/block.cpp | 15 +++++++++++++++ pacman-c++/block.h | 7 ++----- pacman-c++/mainwidget.cpp | 10 ++++------ pacman-c++/mainwidget.h | 3 +++ pacman-c++/server.cpp | 17 +++++++---------- pacman-c++/server.h | 3 +++ 6 files changed, 34 insertions(+), 21 deletions(-) (limited to 'pacman-c++') 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 @@ #include "block.h" #include "constants.h" +#include "actor.h" #include QMap Block::m_pixmaps; @@ -25,3 +26,17 @@ void Block::setNeighbours(unsigned int neighbours) { setSprite(neighbours * Constants::sprite_offset, 0, Constants::field_size.width, Constants::field_size.height); } + +bool Block::checkEnter(Actor * /* actor */) +{ + return (m_color != Color::none); +} + +bool Block::enter(Actor *actor) +{ + if (m_color != actor->color()) + { + //TODO: actor dies + game ends + } + return true; +} 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: {}; void setNeighbours(unsigned int neighbours); - virtual bool checkEnter(Actor *) - { - /* TODO: colored blocks */ - return false; - } + virtual bool checkEnter(Actor *actor); + virtual bool enter(Actor *actor); private: // 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) void MainWidget::tick() { - //TODO: allocate + reuse packet QSharedPointer data = Util::receivePacket(m_socket); - ProtoBuf::MapUpdate packet; - bool worked = packet.ParseFromArray(data->data(), data->size()); + bool worked = m_updatepacket.ParseFromArray(data->data(), data->size()); Q_ASSERT(worked); Q_UNUSED(worked); Transmission::map_t map = Util::createUninitialisedMap(); - Q_ASSERT(packet.field_size() == (int) (Constants::map_size.width * Constants::map_size.height)); + Q_ASSERT(m_updatepacket.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); + map[x][y] = m_updatepacket.field(i); ++i; } } m_scene->updateMap(map); Util::deleteMap(map); - updateScore(packet); + updateScore(m_updatepacket); if (m_socket->bytesAvailable() > (qint64)sizeof(qint64)) 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: QTcpSocket *m_socket; SceneHolder *m_scene; + + /* allocate as member variable as this packet is large and used often */ + ProtoBuf::MapUpdate m_updatepacket; }; #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() // server must stay alive as long as sockets (qt parent mem mechanism) tcpSrv->listen(QHostAddress::Any, Constants::Networking::port); + ProtoBuf::WhoAmI packet; #define SINGLE - #ifdef SINGLE for (unsigned int i = 0; i < 1; ++i) { @@ -172,8 +172,6 @@ void Server::waitForClientConnections() Color::Color color = Color::order[i]; m_clientConnections[color] = socket; /* notify player of color */ - //TODO: allocate + reuse packet - ProtoBuf::WhoAmI packet; packet.set_color(color); Util::sendPacket(packet, socket); @@ -183,21 +181,21 @@ void Server::waitForClientConnections() void Server::sendUpdate(Transmission::map_t map) { - ProtoBuf::MapUpdate packet; + m_updatepacket.Clear(); for (unsigned int x = 0; x < Constants::map_size.width; ++x) { for (unsigned int y = 0; y < Constants::map_size.height; ++y) - packet.add_field(map[x][y]); + m_updatepacket.add_field(map[x][y]); } for(unsigned i = 0; Color::order[i] != Color::none; ++i) { - packet.add_round_points(m_actors.value(Color::order[i])->getRoundPoints()); - packet.add_game_points(m_actors.value(Color::order[i])->getGamePoints()); + m_updatepacket.add_round_points(m_actors.value(Color::order[i])->getRoundPoints()); + m_updatepacket.add_game_points(m_actors.value(Color::order[i])->getGamePoints()); } - QSharedPointer data = Util::createPacket(packet); + QSharedPointer data = Util::createPacket(m_updatepacket); foreach(QTcpSocket *socket, m_clientConnections) { if (!Util::sendPacket(data.data(), socket)) @@ -210,6 +208,7 @@ void Server::sendUpdate(Transmission::map_t map) void Server::keyPressUpdate() { + ProtoBuf::KeyPressUpdate packet; QMapIterator i(m_clientConnections); while (i.hasNext()) { @@ -220,8 +219,6 @@ void Server::keyPressUpdate() while (socket->bytesAvailable() > (qint64)sizeof(qint64)) { QSharedPointer data = Util::receivePacket(socket); - //TODO: allocate + reuse packet - ProtoBuf::KeyPressUpdate packet; bool worked = packet.ParseFromArray(data->data(), data->size()); Q_ASSERT(worked); 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: /* current movements. required to make pacmans continue their movement */ QMap m_actorMovements; + + /* allocate as member variable as this packet is large and used often */ + ProtoBuf::MapUpdate m_updatepacket; }; #endif // SERVER_H -- cgit v1.2.3