summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrik@amftech.nl>2022-12-13 17:40:23 +0100
committerAldrik Ramaekers <aldrik@amftech.nl>2022-12-13 17:40:23 +0100
commitf8ccfba637267bae8064daa320cfb00b8ffe3e66 (patch)
tree1a039335d09db5159b17bd7909a93039f0de1386 /src
parentcaac4b1d169425ad7dda15fe8fceca9c5a95400b (diff)
movement working
Diffstat (limited to 'src')
-rw-r--r--src/game.c61
-rw-r--r--src/players.c72
-rw-r--r--src/protocol.c1
3 files changed, 78 insertions, 56 deletions
diff --git a/src/game.c b/src/game.c
index 00f7bbb..4daf6c8 100644
--- a/src/game.c
+++ b/src/game.c
@@ -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;