summaryrefslogtreecommitdiff
path: root/src/players.c
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/players.c
parentcaac4b1d169425ad7dda15fe8fceca9c5a95400b (diff)
movement working
Diffstat (limited to 'src/players.c')
-rw-r--r--src/players.c72
1 files changed, 68 insertions, 4 deletions
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