diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/game.c | 61 | ||||
| -rw-r--r-- | src/players.c | 72 | ||||
| -rw-r--r-- | src/protocol.c | 1 |
3 files changed, 78 insertions, 56 deletions
@@ -73,53 +73,6 @@ static void rotate_user(platform_window* window, protocol_user_look *message) { p->guny = message->guny; } -static void move_user(platform_window* window, protocol_move *message) { - float speed = 0.1f; - float pad_between_player_and_obj = 0.01f; - - player* p = get_player_by_id(message->id); - if (p == 0) { - log_info("Unknown user moved"); - return; - } - - if (message->move == MOVE_UP) { - float newy = p->playery - speed; - if (is_in_bounds(p->playerx, newy)) { - p->playery = newy; - object o = check_if_player_collided_with_object(window, *p); - if (o.active) p->playery = o.position.y+o.size.y - get_player_size_in_tile() + pad_between_player_and_obj; - } - } - - if (message->move == MOVE_DOWN) { - float newy = p->playery + speed; - if (is_in_bounds(p->playerx, newy)) { - p->playery = newy; - object o = check_if_player_collided_with_object(window, *p); - if (o.active) p->playery = o.position.y - get_player_size_in_tile() - pad_between_player_and_obj; - } - } - - if (message->move == MOVE_LEFT) { - float newx = p->playerx - speed; - if (is_in_bounds(newx, p->playery)) { - p->playerx = newx; - object o = check_if_player_collided_with_object(window, *p); - if (o.active) p->playerx = o.position.x+o.size.x + pad_between_player_and_obj; - } - } - - if (message->move == MOVE_RIGHT) { - float newx = p->playerx + speed; - if (is_in_bounds(newx, p->playery)) { - p->playerx = newx; - object o = check_if_player_collided_with_object(window, *p); - if (o.active) p->playerx = o.position.x-get_player_size_in_tile() - pad_between_player_and_obj; - } - } -} - float update_timer = 0.0f; void update_server(platform_window* window) { update_spawners(); @@ -138,7 +91,8 @@ void update_server(platform_window* window) { } break; case MESSAGE_USER_MOVED: { - move_user(window, (protocol_move*)msg->message); + protocol_move* move_msg = (protocol_move*)msg->message; + move_user(window, move_msg->id, move_msg->move); } break; case MESSAGE_USER_LOOK: { @@ -156,10 +110,9 @@ void update_server(platform_window* window) { i--; } - broadcast_to_clients(create_protocol_user_list()); - - if (update_timer > 0.2f) { - //broadcast_to_clients(create_protocol_zombie_list()); + if (update_timer > 0.0f) { + broadcast_to_clients(create_protocol_user_list()); + broadcast_to_clients(create_protocol_zombie_list()); update_timer = 0.0f; } @@ -183,7 +136,11 @@ void update_client(platform_window* window) { case MESSAGE_USER_LIST: { protocol_user_list* msg_players = (protocol_user_list*)msg; + player* p = get_player_by_id(my_id); + player copy; + if (p) copy = *p; memcpy(players, msg_players->players, sizeof(players)); + if (p) *p = copy; } break; case MESSAGE_ZOMBIE_LIST: { if (global_state.server) break; // zombies are simulated on server so dont overwrite data. diff --git a/src/players.c b/src/players.c index c168eb5..e9260a8 100644 --- a/src/players.c +++ b/src/players.c @@ -32,6 +32,54 @@ void spawn_player(int id) { } } + +void move_user(platform_window* window, u32 id, protocol_move_type move) { + float speed = 0.1f; + float pad_between_player_and_obj = 0.01f; + + player* p = get_player_by_id(id); + if (p == 0) { + log_info("Unknown user moved"); + return; + } + + if (move == MOVE_UP) { + float newy = p->playery - speed; + if (is_in_bounds(p->playerx, newy)) { + p->playery = newy; + object o = check_if_player_collided_with_object(window, *p); + if (o.active) p->playery = o.position.y+o.size.y - get_player_size_in_tile() + pad_between_player_and_obj; + } + } + + if (move == MOVE_DOWN) { + float newy = p->playery + speed; + if (is_in_bounds(p->playerx, newy)) { + p->playery = newy; + object o = check_if_player_collided_with_object(window, *p); + if (o.active) p->playery = o.position.y - get_player_size_in_tile() - pad_between_player_and_obj; + } + } + + if (move == MOVE_LEFT) { + float newx = p->playerx - speed; + if (is_in_bounds(newx, p->playery)) { + p->playerx = newx; + object o = check_if_player_collided_with_object(window, *p); + if (o.active) p->playerx = o.position.x+o.size.x + pad_between_player_and_obj; + } + } + + if (move == MOVE_RIGHT) { + float newx = p->playerx + speed; + if (is_in_bounds(newx, p->playery)) { + p->playerx = newx; + object o = check_if_player_collided_with_object(window, *p); + if (o.active) p->playerx = o.position.x-get_player_size_in_tile() - pad_between_player_and_obj; + } + } +} + player* get_player_by_id(u32 id) { for (int i = 0; i < max_players; i++) { if (!players[i].active) continue; @@ -75,16 +123,32 @@ void take_player_input(platform_window* window) { if (!p) return; if (keyboard_is_key_down(KEY_W)) { - network_client_send(global_state.client, create_protocol_user_moved(MOVE_UP, my_id)); + if (!global_state.server) { + network_message message = create_protocol_user_moved(MOVE_UP, my_id); + network_client_send(global_state.client, message); + } + move_user(window, my_id, MOVE_UP); } if (keyboard_is_key_down(KEY_S)) { - network_client_send(global_state.client, create_protocol_user_moved(MOVE_DOWN, my_id)); + if (!global_state.server) { + network_message message = create_protocol_user_moved(MOVE_DOWN, my_id); + network_client_send(global_state.client, message); + } + move_user(window, my_id, MOVE_DOWN); } if (keyboard_is_key_down(KEY_A)) { - network_client_send(global_state.client, create_protocol_user_moved(MOVE_LEFT, my_id)); + if (!global_state.server) { + network_message message = create_protocol_user_moved(MOVE_LEFT, my_id); + network_client_send(global_state.client, message); + } + move_user(window, my_id, MOVE_LEFT); } if (keyboard_is_key_down(KEY_D)) { - network_client_send(global_state.client, create_protocol_user_moved(MOVE_RIGHT, my_id)); + if (!global_state.server) { + network_message message = create_protocol_user_moved(MOVE_RIGHT, my_id); + network_client_send(global_state.client, message); + } + move_user(window, my_id, MOVE_RIGHT); } // Send gun position diff --git a/src/protocol.c b/src/protocol.c index f833d3a..2381159 100644 --- a/src/protocol.c +++ b/src/protocol.c @@ -1,4 +1,5 @@ #include "../include/protocol.h" +#include "../include/players.h" network_message create_protocol_get_id_up() { protocol_get_id_upstream* buf = (protocol_get_id_upstream*)network_buffer; |
