108 NetworkServerPlayer *player = *it; |
108 NetworkServerPlayer *player = *it; |
109 |
109 |
110 // player is not in players list yet |
110 // player is not in players list yet |
111 assert(player != this); |
111 assert(player != this); |
112 |
112 |
113 // we send a NETMSG_PLAYER_INFO message for the player object |
113 // send info |
114 NetworkMessage player_msg(*player, NETMSG_PLAYER_INFO); |
114 player->send_info(node); |
115 |
|
116 // write packet |
|
117 player_msg.write_vector(player->getPosition()); |
|
118 |
|
119 // send message to client |
|
120 node.send(player_msg); |
|
121 |
|
122 // XXX: send rope info... |
|
123 } |
115 } |
124 |
116 |
125 // sync projectiles |
117 // sync projectiles |
126 for (std::list<Projectile*>::iterator it = server.state.projectiles.begin(); it != server.state.projectiles.end(); it++) { |
118 for (std::list<Projectile*>::iterator it = server.state.projectiles.begin(); it != server.state.projectiles.end(); it++) { |
127 NetworkServerProjectile *proj = dynamic_cast<NetworkServerProjectile*>(*it); |
119 NetworkServerProjectile *proj = dynamic_cast<NetworkServerProjectile*>(*it); |
196 Player::handleChangeWeapon(weaponIndex); |
188 Player::handleChangeWeapon(weaponIndex); |
197 } |
189 } |
198 |
190 |
199 void NetworkServerPlayer::handleRopeState (RopeState state) { |
191 void NetworkServerPlayer::handleRopeState (RopeState state) { |
200 Engine::log(DEBUG, "server_player.rope_state") << "state=" << rope.getState() << ", position=" << rope.getPosition() << ", velocity=" << rope.getVelocity() << ", length=" << rope.getLength() << ", pivotPlayer=" << rope.getPivotPlayer(); |
192 Engine::log(DEBUG, "server_player.rope_state") << "state=" << rope.getState() << ", position=" << rope.getPosition() << ", velocity=" << rope.getVelocity() << ", length=" << rope.getLength() << ", pivotPlayer=" << rope.getPivotPlayer(); |
201 |
193 |
|
194 // the NetworkGroup to send to |
|
195 NetworkGroup all = server.netsession.all_nodes(); |
|
196 |
|
197 // send new rope state |
|
198 send_rope_state(all, state); |
|
199 } |
|
200 |
|
201 void NetworkServerPlayer::handleRopeLength (float length) { |
|
202 NetworkMessage msg(*this, NETMSG_PLAYER_ROPE_LENGTH); |
|
203 |
|
204 // write packet |
|
205 msg.write_float32(length); |
|
206 |
|
207 // send packet |
|
208 server.netsession.all_nodes().send(msg); |
|
209 } |
|
210 |
|
211 void NetworkServerPlayer::spawn (Vector position) { |
|
212 NetworkMessage msg(*this, NETMSG_PLAYER_SPAWN); |
|
213 |
|
214 // write packet |
|
215 msg.write_vector(position); |
|
216 |
|
217 Engine::log(DEBUG, "server_player.spawn") << this << ": position=" << position; |
|
218 |
|
219 // send packet |
|
220 server.netsession.all_nodes().send(msg); |
|
221 |
|
222 // super |
|
223 Player::spawn(position); |
|
224 } |
|
225 |
|
226 void NetworkServerPlayer::die (bool start_timer) { |
|
227 NetworkMessage msg(*this, NETMSG_PLAYER_DIE); |
|
228 |
|
229 Engine::log(DEBUG, "server_player.die") << this; |
|
230 |
|
231 // send packet |
|
232 server.netsession.all_nodes().send(msg); |
|
233 |
|
234 // super |
|
235 Player::die(start_timer); |
|
236 } |
|
237 |
|
238 void NetworkServerPlayer::send_info (NetworkNode &node) { |
|
239 // we send a NETMSG_PLAYER_INFO message for the player object |
|
240 NetworkMessage player_msg(*this, NETMSG_PLAYER_INFO); |
|
241 |
|
242 // write packet |
|
243 player_msg.write_vector(getPosition()); |
|
244 |
|
245 // send message to client |
|
246 node.send(player_msg); |
|
247 |
|
248 // then send rope state, unless folded |
|
249 if (rope.getState() != ROPE_FOLDED) |
|
250 send_rope_state(node, rope.getState()); |
|
251 } |
|
252 |
|
253 void NetworkServerPlayer::send_rope_state (NetworkTarget &target, RopeState state) { |
202 switch (state) { |
254 switch (state) { |
203 case ROPE_FLYING: { |
255 case ROPE_FLYING: { |
204 NetworkMessage msg(*this, NETMSG_PLAYER_ROPE_THROW); |
256 NetworkMessage msg(*this, NETMSG_PLAYER_ROPE_THROW); |
205 |
257 |
206 msg.write_vector(rope.getPosition()); |
258 msg.write_vector(rope.getPosition()); |
207 msg.write_vector(rope.getVelocity()); |
259 msg.write_vector(rope.getVelocity()); |
208 msg.write_float32(rope.getLength()); |
260 msg.write_float32(rope.getLength()); |
209 |
261 |
210 server.netsession.all_nodes().send(msg); |
262 target.send(msg); |
211 |
263 |
212 } break; |
264 } break; |
213 |
265 |
214 case ROPE_FIXED: { |
266 case ROPE_FIXED: { |
215 NetworkMessage msg(*this, NETMSG_PLAYER_ROPE_FIXED); |
267 NetworkMessage msg(*this, NETMSG_PLAYER_ROPE_FIXED); |
222 |
274 |
223 msg.write_vector(rope.getPosition()); |
275 msg.write_vector(rope.getPosition()); |
224 msg.write_float32(rope.getLength()); |
276 msg.write_float32(rope.getLength()); |
225 msg.write_object(player); // may be NULL |
277 msg.write_object(player); // may be NULL |
226 |
278 |
227 server.netsession.all_nodes().send(msg); |
279 target.send(msg); |
228 |
280 |
229 } break; |
281 } break; |
230 |
282 |
231 case ROPE_FOLDED: { |
283 case ROPE_FOLDED: { |
232 NetworkMessage msg(*this, NETMSG_PLAYER_ROPE_RELEASED); |
284 NetworkMessage msg(*this, NETMSG_PLAYER_ROPE_RELEASED); |
233 |
285 |
234 server.netsession.all_nodes().send(msg); |
286 target.send(msg); |
235 |
287 |
236 } break; |
288 } break; |
237 } |
289 } |
238 } |
|
239 |
|
240 void NetworkServerPlayer::handleRopeLength (float length) { |
|
241 NetworkMessage msg(*this, NETMSG_PLAYER_ROPE_LENGTH); |
|
242 |
|
243 // write packet |
|
244 msg.write_float32(length); |
|
245 |
|
246 // send packet |
|
247 server.netsession.all_nodes().send(msg); |
|
248 } |
|
249 |
|
250 void NetworkServerPlayer::spawn (Vector position) { |
|
251 NetworkMessage msg(*this, NETMSG_PLAYER_SPAWN); |
|
252 |
|
253 // write packet |
|
254 msg.write_vector(position); |
|
255 |
|
256 Engine::log(DEBUG, "server_player.spawn") << this << ": position=" << position; |
|
257 |
|
258 // send packet |
|
259 server.netsession.all_nodes().send(msg); |
|
260 |
|
261 // super |
|
262 Player::spawn(position); |
|
263 } |
|
264 |
|
265 void NetworkServerPlayer::die (bool start_timer) { |
|
266 NetworkMessage msg(*this, NETMSG_PLAYER_DIE); |
|
267 |
|
268 Engine::log(DEBUG, "server_player.die") << this; |
|
269 |
|
270 // send packet |
|
271 server.netsession.all_nodes().send(msg); |
|
272 |
|
273 // super |
|
274 Player::die(start_timer); |
|
275 } |
290 } |
276 |
291 |
277 void NetworkServerPlayer::on_disconnected (void) { |
292 void NetworkServerPlayer::on_disconnected (void) { |
278 NetworkMessage msg(*this, NETMSG_PLAYER_QUIT); |
293 NetworkMessage msg(*this, NETMSG_PLAYER_QUIT); |
279 |
294 |