--- a/src/proto2/NetworkServer.cc Mon Nov 10 21:58:38 2008 +0000
+++ b/src/proto2/NetworkServer.cc Tue Nov 18 22:58:50 2008 +0000
@@ -48,7 +48,7 @@
}
NetworkServerPlayer::NetworkServerPlayer (NetworkServer &server, CL_NetComputer &computer, uint16_t pid) :
- RemotePlayer(server.state, Coordinate(100, 100), true), server(server), computer(computer), obj(&server.netobjs), pid(pid) {
+ RemotePlayer(server.state, Vector(PLAYER_INITIAL_X, PLAYER_INITIAL_Y), true), server(server), computer(computer), obj(&server.netobjs), pid(pid) {
// log
Engine::log(INFO, "server_player.connected") << "computer=" << computer << ", obj=" << obj;
@@ -58,8 +58,7 @@
// the initial NETMSG_PLAYER_HELLO
CL_NetPacket hello_pkt;
- hello_pkt.output.write_uint32(position.x);
- hello_pkt.output.write_uint32(position.y);
+ writeVector(hello_pkt, position);
obj.send(computer, NETMSG_SERVER_HELLO, hello_pkt, true);
@@ -71,8 +70,7 @@
// player is not in players list yet
assert(player != this);
- player_pkt.output.write_uint32(player->position.x);
- player_pkt.output.write_uint32(player->position.y);
+ writeVector(player_pkt, player->position);
player->obj.send(computer, NETMSG_PLAYER_INFO, player_pkt, true);
}
@@ -95,17 +93,13 @@
if (!(from == computer))
return;
- // read packet
- int32_t dx = pkt.input.read_int32();
- int32_t dy = pkt.input.read_int32();
+ Vector impulse_force = readVector(pkt);
+ uint16_t impulse_ms = pkt.input.read_uint16();
- // movement delta
- PositionDelta delta(dx, dy);
-
- Engine::log(INFO, "server_player.on_move") << "obj=" << obj << ", old_pos=" << position << ", delta=" << delta;
-
- // apply movement
- position += delta;
+ Engine::log(INFO, "server_player.on_move") << "obj=" << obj << ", old_pos=" << position << ", impulse=" << impulse_force << "@" << impulse_ms << "ms";
+
+ // apply force
+ applyForce(impulse_force, impulse_ms);
// send position update
send_position_update();
@@ -113,10 +107,10 @@
void NetworkServerPlayer::send_position_update (void) {
CL_NetPacket pkt;
- pkt.output.write_uint32(position.x);
- pkt.output.write_uint32(position.y);
+ writeVector(pkt, position);
+ writeVector(pkt, velocity);
- Engine::log(INFO, "server_player.send_position_update") << "obj=" << obj << " -> " << position;
+ Engine::log(INFO, "server_player.send_position_update") << "obj=" << obj << " -> " << position << "+" << velocity;
obj.send(server.netsession.get_all(), NETMSG_PLAYER_POSITION, pkt, false);
}