6 #include "../Logger.hh" |
6 #include "../Logger.hh" |
7 |
7 |
8 #include <cassert> |
8 #include <cassert> |
9 |
9 |
10 NetworkServer::NetworkServer (GameState &state, const NetworkAddress &listen_addr) : |
10 NetworkServer::NetworkServer (GameState &state, const NetworkAddress &listen_addr) : |
11 state(state), netsession(NETWORK_MAGIC_ID), netobjs(netsession, NETCHAN_CORE) { |
11 state(state), netsession(NETWORK_MAGIC_ID), controller(netsession, NETCHAN_CORE) { |
12 |
12 |
13 // connect slots |
13 // connect slots |
14 slots.connect(netsession.sig_node_connected(), this, &NetworkServer::on_node_connected); |
14 slots.connect(netsession.sig_node_connected(), this, &NetworkServer::on_node_connected); |
15 |
15 |
16 // and then we listen |
16 // and then we listen |
96 |
96 |
97 // and carry out the actual dig on the server as well |
97 // and carry out the actual dig on the server as well |
98 Player::handleDig(position, radius); |
98 Player::handleDig(position, radius); |
99 } |
99 } |
100 |
100 |
101 void NetworkServerPlayer::handleCreateProjectile (Weapon *weapon, Vector position, Vector velocity) { |
101 void NetworkServerPlayer::handleFireWeapon (Weapon *weapon, Vector position, Vector velocity) { |
102 Engine::log(INFO, "server_player.create_projectile") << "weapon='" << weapon->getName() << "', position=" << position << ", velocity=" << velocity; |
102 Engine::log(INFO, "server_player.fire_weapon") << "weapon='" << weapon->getName() << "', position=" << position << ", velocity=" << velocity; |
103 |
103 |
104 // create new NetworkServerProjectile object |
104 // create new NetworkServerProjectile object |
105 new NetworkServerProjectile(server, this, position, velocity, weapon); |
105 new NetworkServerProjectile(server, this, position, velocity, weapon); |
|
106 |
|
107 // as handleFireWeapon does |
|
108 weaponFired(weapon); |
106 } |
109 } |
107 |
110 |
108 void NetworkServerPlayer::handleChangeWeapon (unsigned int weaponIndex) { |
111 void NetworkServerPlayer::handleChangeWeapon (unsigned int weaponIndex) { |
109 NetworkPacket pkt; |
112 NetworkPacket pkt; |
110 |
113 |
239 /* |
242 /* |
240 * NetworkServerProjectile |
243 * NetworkServerProjectile |
241 */ |
244 */ |
242 NetworkServerProjectile::NetworkServerProjectile (NetworkServer &server, NetworkServerPlayer *player, Vector position, |
245 NetworkServerProjectile::NetworkServerProjectile (NetworkServer &server, NetworkServerPlayer *player, Vector position, |
243 Vector velocity, Weapon *weapon) : |
246 Vector velocity, Weapon *weapon) : |
244 Projectile(server.state, position, velocity, weapon, true), NetworkServerObject(server) |
247 Projectile(player, position, velocity, weapon, true), NetworkServerObject(server) |
245 { |
248 { |
246 NetworkPacket pkt; |
249 NetworkPacket pkt; |
247 |
250 |
|
251 server.controller.write_object(pkt, player); |
248 pkt.write_vector(position); |
252 pkt.write_vector(position); |
249 pkt.write_vector(velocity); |
253 pkt.write_vector(velocity); |
250 pkt.write_float32(explosionRadius); |
254 pkt.write_uint8(weapon->getID()); |
251 pkt.write_float32(radius); |
255 |
252 |
256 send_all(NETMSG_PROJECTILE_PLAYER_FIRED, pkt, true); |
253 send_all(NETMSG_PROJECTILE_CREATE, pkt, true); |
|
254 } |
257 } |
255 |
258 |
256 void NetworkServerProjectile::onDestroy (Vector position, bool removeGround) { |
259 void NetworkServerProjectile::onDestroy (Vector position, bool removeGround) { |
257 NetworkPacket pkt; |
260 NetworkPacket pkt; |
258 |
261 |
259 Engine::log(INFO, "server_projectile.destroy") << "position=" << position << ", removeGround=" << removeGround; |
262 Engine::log(INFO, "server_projectile.destroy") << "position=" << position << ", removeGround=" << removeGround; |
260 |
263 |
261 pkt.write_vector(position); |
264 pkt.write_vector(position); |
262 pkt.write_uint8(removeGround ? NETWORK_PROJECTILE_REMOVE_GROUND : 0); |
265 pkt.write_uint8(removeGround ? NETWORK_PROJECTILE_REMOVE_GROUND : 0); |
263 |
266 |
264 send_all(NETMSG_PROJECTILE_DESTROY, pkt, true); |
267 send_all(NETMSG_PROJECTILE_DESTROY, pkt, true); |
265 |
268 |