summaryrefslogtreecommitdiffstats
path: root/pacman-c++/server.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'pacman-c++/server.cpp')
-rw-r--r--pacman-c++/server.cpp77
1 files changed, 49 insertions, 28 deletions
diff --git a/pacman-c++/server.cpp b/pacman-c++/server.cpp
index c83c70d..144043b 100644
--- a/pacman-c++/server.cpp
+++ b/pacman-c++/server.cpp
@@ -13,7 +13,7 @@ Server::Server(QWidget *parent)
13 waitForClientConnections(); 13 waitForClientConnections();
14 qDebug() << "clients connected"; 14 qDebug() << "clients connected";
15 15
16 updateMap(Util::createDummyMap()); 16 updateMap(Util::createDemoMap());
17 17
18 QTimer *timer = new QTimer(this); 18 QTimer *timer = new QTimer(this);
19 connect(timer, SIGNAL(timeout()), this, SLOT(tick())); 19 connect(timer, SIGNAL(timeout()), this, SLOT(tick()));
@@ -35,33 +35,51 @@ Transmission::map_t Server::calculateUpdates()
35 Transmission::map_t map = Util::createEmptyMap(); 35 Transmission::map_t map = Util::createEmptyMap();
36 36
37 QMapIterator<Color::Color, Actor::Movement> i(m_actorMovements); 37 QMapIterator<Color::Color, Actor::Movement> i(m_actorMovements);
38 while (i.hasNext()) { 38 while (i.hasNext())
39 {
39 i.next(); 40 i.next();
40 Actor *actor = m_actors.value( i.key() ); 41 Actor *actor = m_actors.value(i.key());
41 QPoint mapPosition = CoordToMapPosition(actor->x(), actor->y()); 42 QPoint mapPosition = actor->pos().toPoint();
43 mapPosition = CoordToMapPosition(actor->pos().toPoint());
42 qDebug() << "actor " << i.key() << " is at " << mapPosition; 44 qDebug() << "actor " << i.key() << " is at " << mapPosition;
43 45
44 QPoint newMapPosition = mapPosition; 46 QPoint newMapPosition = mapPosition;
45 switch (i.value()) { 47 switch (i.value())
46 case Actor::Up: newMapPosition += QPoint(0, -1); break; 48 {
47 case Actor::Down: newMapPosition += QPoint(0, 1); break; 49 case Actor::Up:
48 case Actor::Left: newMapPosition += QPoint(-1, 0); break; 50 newMapPosition += QPoint(0, -1);
49 case Actor::Right: newMapPosition += QPoint(1, 0); break; 51 break;
50 case Actor::None: break; 52 case Actor::Down:
51 default: Q_ASSERT(false); 53 newMapPosition += QPoint(0, 1);
54 break;
55 case Actor::Left:
56 newMapPosition += QPoint(-1, 0);
57 break;
58 case Actor::Right:
59 newMapPosition += QPoint(1, 0);
60 break;
61 case Actor::None:
62 break;
63 default:
64 Q_ASSERT(false);
52 } 65 }
53 if (newMapPosition.x() < 0) newMapPosition.setX(0); 66
54 if (newMapPosition.x() >= visualMap.size()) newMapPosition.setX(visualMap.size()-1); 67 if (newMapPosition.x() < 0)
55 if (newMapPosition.y() < 0) newMapPosition.setY(0); 68 newMapPosition.setX(0);
56 if (newMapPosition.y() >= visualMap[newMapPosition.x()].size()) newMapPosition.setY(visualMap[newMapPosition.x()].size()-1); 69 if (newMapPosition.x() >= visualMap.size())
70 newMapPosition.setX(visualMap.size() - 1);
71 if (newMapPosition.y() < 0)
72 newMapPosition.setY(0);
73 if (newMapPosition.y() >= visualMap[newMapPosition.x()].size())
74 newMapPosition.setY(visualMap[newMapPosition.x()].size() - 1);
57 75
58 // <t3h g4m3 10gic> 76 // <t3h g4m3 10gic>
59 if(dynamic_cast<Block*>(visualMap[newMapPosition.x()][newMapPosition.y()]) != 0) { 77 if(dynamic_cast<Block*>(visualMap[newMapPosition.x()][newMapPosition.y()]) != 0)
60 continue; 78 continue;
61 }
62 // </t3h g4m2 10gic> 79 // </t3h g4m2 10gic>
63 80
64 if (mapPosition != newMapPosition) { 81 if (mapPosition != newMapPosition)
82 {
65 map[mapPosition.x()][mapPosition.y()] = Transmission::empty; 83 map[mapPosition.x()][mapPosition.y()] = Transmission::empty;
66 map[newMapPosition.x()][newMapPosition.y()] = 84 map[newMapPosition.x()][newMapPosition.y()] =
67 Transmission::pacman | i.key() | 85 Transmission::pacman | i.key() |
@@ -76,10 +94,10 @@ QSharedPointer< ProtoBuf::MapUpdate > Server::createUpdatePacket(Transmission::m
76 QSharedPointer<ProtoBuf::MapUpdate> updatePacket = 94 QSharedPointer<ProtoBuf::MapUpdate> updatePacket =
77 QSharedPointer<ProtoBuf::MapUpdate>(new ProtoBuf::MapUpdate); 95 QSharedPointer<ProtoBuf::MapUpdate>(new ProtoBuf::MapUpdate);
78 96
79 for (unsigned int x = 0; x < Constants::map_size.width; ++x) { 97 for (unsigned int x = 0; x < Constants::map_size.width; ++x)
80 for (unsigned int y = 0; y < Constants::map_size.height; ++y) { 98 {
99 for (unsigned int y = 0; y < Constants::map_size.height; ++y)
81 updatePacket->add_field(map[x][y]); 100 updatePacket->add_field(map[x][y]);
82 }
83 } 101 }
84 updatePacket->set_round_points_red(m_actors.value(Color::red)->getRoundPoints()); 102 updatePacket->set_round_points_red(m_actors.value(Color::red)->getRoundPoints());
85 updatePacket->set_game_points_red(m_actors.value(Color::red)->getGamePoints()); 103 updatePacket->set_game_points_red(m_actors.value(Color::red)->getGamePoints());
@@ -101,9 +119,11 @@ void Server::waitForClientConnections()
101 119
102 Color::Color playerColors[3] = { Color::red, Color::blue, Color::green }; 120 Color::Color playerColors[3] = { Color::red, Color::blue, Color::green };
103#ifdef SINGLE 121#ifdef SINGLE
104 for (unsigned int i=0; i<1; ++i) { 122 for (unsigned int i=0; i < 1; ++i)
123 {
105#else 124#else
106 for (unsigned int i=0; i<Color::max; ++i) { 125 for (unsigned int i=0; i < Color::max; ++i)
126 {
107#endif 127#endif
108 bool connectionAvailable = tcpSrv->waitForNewConnection(-1); 128 bool connectionAvailable = tcpSrv->waitForNewConnection(-1);
109 Q_ASSERT(connectionAvailable); 129 Q_ASSERT(connectionAvailable);
@@ -124,21 +144,22 @@ void Server::sendUpdate(QSharedPointer< ProtoBuf::MapUpdate > packet)
124{ 144{
125 std::string dataStr = packet->SerializeAsString(); 145 std::string dataStr = packet->SerializeAsString();
126 const char *data = dataStr.c_str(); 146 const char *data = dataStr.c_str();
127 foreach(QTcpSocket *socket, m_clientConnections) { 147 foreach(QTcpSocket *socket, m_clientConnections)
128 Util::sendPacket(data, dataStr.length(), socket); 148 Util::sendPacket(data, dataStr.length(), socket);
129 }
130} 149}
131 150
132void Server::keyPressUpdate() 151void Server::keyPressUpdate()
133{ 152{
134 qDebug() << "kpress"; 153 qDebug() << "kpress";
135 QMapIterator<Color::Color, QTcpSocket*> i(m_clientConnections); 154 QMapIterator<Color::Color, QTcpSocket*> i(m_clientConnections);
136 while (i.hasNext()) { 155 while (i.hasNext())
156 {
137 i.next(); 157 i.next();
138 Color::Color color = i.key(); 158 Color::Color color = i.key();
139 QTcpSocket *socket = i.value(); 159 QTcpSocket *socket = i.value();
140 qDebug() << "data?"; 160 qDebug() << "data?";
141 if (socket->bytesAvailable() > 0) { 161 if (socket->bytesAvailable() > 0)
162 {
142 qDebug() << "data!"; 163 qDebug() << "data!";
143 std::string dataStr; 164 std::string dataStr;
144 Util::QByteArrayToStdString(socket->readAll(), dataStr); 165 Util::QByteArrayToStdString(socket->readAll(), dataStr);
@@ -146,7 +167,7 @@ void Server::keyPressUpdate()
146 packet.ParseFromString(dataStr); 167 packet.ParseFromString(dataStr);
147 Transmission::field_t direction = packet.newkey(); 168 Transmission::field_t direction = packet.newkey();
148 qDebug() << "data:" << direction; 169 qDebug() << "data:" << direction;
149 m_actorMovements[ color ] = Util::transmissionMovementToActor(direction); 170 m_actorMovements[color] = Util::transmissionMovementToActor(direction);
150 } 171 }
151 } 172 }
152} 173}