summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build/zombies.exebin1752475 -> 1753517 bytes
-rw-r--r--include/overlay.h2
-rw-r--r--include/players.h5
-rw-r--r--include/protocol.h6
-rw-r--r--src/drops.c2
-rw-r--r--src/game.c24
-rw-r--r--src/overlay.c10
-rw-r--r--src/pathfinding.c6
-rw-r--r--src/players.c24
-rw-r--r--src/protocol.c7
-rw-r--r--src/zombies.c2
11 files changed, 53 insertions, 35 deletions
diff --git a/build/zombies.exe b/build/zombies.exe
index 3371a19..713c94d 100644
--- a/build/zombies.exe
+++ b/build/zombies.exe
Binary files differ
diff --git a/include/overlay.h b/include/overlay.h
index de7410c..acbe1e4 100644
--- a/include/overlay.h
+++ b/include/overlay.h
@@ -3,7 +3,7 @@
#include <projectbase/project_base.h>
-u64 server_update_time = 0;
+u64 logic_update_time = 0;
void draw_overlay(platform_window* window);
diff --git a/include/players.h b/include/players.h
index f76e620..027fb31 100644
--- a/include/players.h
+++ b/include/players.h
@@ -9,6 +9,8 @@
#include "math_helper.h"
#include "guns.h"
+#define MAX_PLAYERS 10
+
typedef struct t_player {
u32 id;
bool active;
@@ -33,8 +35,7 @@ u32 player_id = -1;
camera _next_camera_pos;
-int max_players = 10;
-player players[10] = {0};
+player players[MAX_PLAYERS] = {0};
int get_player_count();
player* get_player_by_id(u32 id);
diff --git a/include/protocol.h b/include/protocol.h
index 39e7d6a..8fd33b9 100644
--- a/include/protocol.h
+++ b/include/protocol.h
@@ -4,6 +4,7 @@
#include <projectbase/project_base.h>
#include "list.h"
+#include "players.h"
typedef enum t_network_message_type
{
@@ -45,7 +46,7 @@ typedef struct t_protocol_get_id_downstream
typedef struct t_protocol_user_list
{
network_message_type type;
- player players[10];
+ player players[MAX_PLAYERS];
} protocol_user_list;
#include "zombies.h"
@@ -104,7 +105,7 @@ typedef struct t_protocol_user_shoot
typedef struct t_send_queue_entry {
bool active;
- network_client recipients[10];
+ network_client recipients[MAX_PLAYERS];
network_message message;
} send_queue_entry;
@@ -132,6 +133,7 @@ array messages_received_on_client;
mutex messages_to_send_queue_mutex;
send_queue_entry messages_to_send_queue[OUTGOING_QUEUE_SIZE] = {0};
+void add_message_to_outgoing_queuex(network_message message, network_client c);
void add_message_to_outgoing_queue(send_queue_entry entry);
void* network_send_thread(void* args);
diff --git a/src/drops.c b/src/drops.c
index 881c207..59bfcc6 100644
--- a/src/drops.c
+++ b/src/drops.c
@@ -23,7 +23,7 @@ void update_drops() {
drops[i].time_active += update_delta;
drops[i].position.z = MAX_HEIGHT_DIFF * sin (2 * M_PI * 0.5f * (drops[i].time_active) + 0) + b.start_h;
- for (int x = 0; x < max_players; x++) {
+ for (int x = 0; x < MAX_PLAYERS; x++) {
player *p = &players[x];
if (!p->active) continue;
diff --git a/src/game.c b/src/game.c
index 7f3d1d4..b426761 100644
--- a/src/game.c
+++ b/src/game.c
@@ -2,7 +2,7 @@
#include "../include/pathfinding.h"
static void server_on_client_disconnect(network_client c) {
- for (int i = 0; i < max_players; i++) {
+ for (int i = 0; i < MAX_PLAYERS; i++) {
player p = players[i];
if (p.client.ConnectSocket == c.ConnectSocket) players[i].active = false;
}
@@ -20,7 +20,7 @@ void start_server(char* port) {
}
static u32 get_session_id() {
- u64 time = platform_get_time(TIME_NS, TIME_FULL);
+ u64 time = platform_get_time(TIME_FULL, TIME_NS);
return (((time * 2654435789U) + time) * 2654435789U) + platform_get_processid();
}
@@ -48,7 +48,7 @@ void connect_to_server(char* ip, char* port) {
global_state.network_state = WAITING_FOR_ID;
network_message message = create_protocol_get_id_up(player_id);
- network_client_send(global_state.client, message);
+ add_message_to_outgoing_queuex(message, *global_state.client);
}
}
}
@@ -92,7 +92,7 @@ static void broadcast_to_clients(network_message message) {
send_queue_entry entry = {0};
entry.message = message;
- for (int i = 0; i < max_players; i++) {
+ for (int i = 0; i < MAX_PLAYERS; i++) {
player p = players[i];
if (!p.client.is_connected) continue;
if (!p.active) continue;
@@ -113,9 +113,9 @@ static void rotate_user(platform_window* window, protocol_user_look *message) {
}
static void set_ping_for_player(protocol_generic_message* msg) {
- u64 diff = platform_get_time(TIME_MS, TIME_PROCESS) - msg->send_timestamp;
+ u64 diff = platform_get_time(TIME_FULL, TIME_MILI_S) - msg->send_timestamp;
- for (int i = 0; i < max_players; i++) {
+ for (int i = 0; i < MAX_PLAYERS; i++) {
player p = players[i];
if (!p.client.is_connected) continue;
if (!p.active) continue;
@@ -128,7 +128,7 @@ static void set_ping_for_player(protocol_generic_message* msg) {
float update_timer = 0.0f;
void update_server(platform_window* window) {
- server_update_time = platform_get_time(TIME_NS, TIME_FULL);
+ logic_update_time = platform_get_time(TIME_FULL, TIME_NS);
mutex_lock(&messages_received_on_server.mutex);
@@ -140,7 +140,7 @@ void update_server(platform_window* window) {
{
case MESSAGE_GET_ID_UPSTREAM: {
protocol_get_id_upstream* m = (protocol_get_id_upstream*)msg->message;
- network_client_send(&msg->client, create_protocol_get_id_down(m->id));
+ add_message_to_outgoing_queuex(create_protocol_get_id_down(m->id), msg->client);
spawn_player(m->id, msg->client);
log_info("Player connected to server");
} break;
@@ -188,9 +188,9 @@ void update_server(platform_window* window) {
update_timer += update_delta;
- server_update_time = platform_get_time(TIME_NS, TIME_FULL) - server_update_time;
- if ((server_update_time/1000000.0f) > 5.0f) {
- log_infox("Server update took %.2fms", (server_update_time/1000000.0f));
+ logic_update_time = platform_get_time(TIME_FULL, TIME_NS) - logic_update_time;
+ if ((logic_update_time/1000000.0f) > 5.0f) {
+ log_infox("Server update took %.2fms", (logic_update_time/1000000.0f));
}
}
@@ -223,6 +223,7 @@ static void load_bullets_into_existing_list(protocol_bullets_list* msg_bullets)
}
void update_client(platform_window* window) {
+ logic_update_time = platform_get_time(TIME_FULL, TIME_NS);
mutex_lock(&messages_received_on_client.mutex);
for (int i = 0; i < messages_received_on_client.length; i++) {
@@ -271,6 +272,7 @@ void update_client(platform_window* window) {
allocator_clear(&client_incomming_allocator);
mutex_unlock(&messages_received_on_client.mutex);
+ logic_update_time = platform_get_time(TIME_FULL, TIME_NS) - logic_update_time;
}
void update_game(platform_window* window) {
diff --git a/src/overlay.c b/src/overlay.c
index 298f460..4894760 100644
--- a/src/overlay.c
+++ b/src/overlay.c
@@ -51,7 +51,7 @@ static void draw_leaderboard(platform_window* window) {
renderer->render_rectangle(x, y, actual_width, height_total, rgba(0,0,0,120));
draw_leaderboard_entry(x, y, actual_width, height_per_row, "Player", "Kills", "Deaths", "Ping");
- for (int i = 0; i < max_players; i++) {
+ for (int i = 0; i < MAX_PLAYERS; i++) {
if (!players[i].active) continue;
char kills[30]; snprintf(kills, 30, "%d", players[i].kills);
@@ -65,12 +65,18 @@ static void draw_leaderboard(platform_window* window) {
void draw_debug_stats(platform_window* window) {
float fps = 1.0f / update_delta;
float usage = (update_delta / (1.0f / 60.0f) * 100);
+ int count = 0;
+ for (int i = 0; i < OUTGOING_QUEUE_SIZE; i++)
+ {
+ if (!messages_to_send_queue[i].active) continue;
+ count++;
+ }
char fps_text[50];
snprintf(fps_text, 50, "FPS: %d, MS: %.4f, USAGE: %.0f%%", (int)fps, update_delta*1000.0f, usage);
char update_text[50];
- snprintf(update_text, 50, "server: %.2fms", server_update_time/1000000.0f);
+ snprintf(update_text, 50, "update: %.2fms, queue: %d", logic_update_time/1000000.0f, count);
renderer->render_text(fnt_20, _global_camera.x, _global_camera.y + fnt_20->px_h*0, fps_text, rgb(0,0,0));
renderer->render_text(fnt_20, _global_camera.x, _global_camera.y + fnt_20->px_h*1, update_text, rgb(0,0,0));
diff --git a/src/pathfinding.c b/src/pathfinding.c
index 88bcd23..538c279 100644
--- a/src/pathfinding.c
+++ b/src/pathfinding.c
@@ -17,7 +17,7 @@ bool can_walk_at(float x, float y)
bool find_path_to(vec2f start_pos, vec2f end_pos, array *to_fill, pathfinding_request* request)
{
- uint64_t timestamp = platform_get_time(TIME_PROCESS, TIME_MS);
+ uint64_t timestamp = platform_get_time(TIME_FULL, TIME_US);
allocator al = create_allocator(500000);
struct path_node {
@@ -88,7 +88,7 @@ bool find_path_to(vec2f start_pos, vec2f end_pos, array *to_fill, pathfinding_re
if (to_fill) {
if (to_fill->length > 1) array_remove_at(to_fill, to_fill->length-1);
- //printf("PATHFINDING TOOK: %fms\n", (platform_get_time(TIME_PROCESS, TIME_MS)-timestamp)/1000.0f);
+ //printf("PATHFINDING TOOK: %.2fms\n", (platform_get_time(TIME_FULL, TIME_US)-timestamp)/1000.0f);
}
mutex_unlock(&request->mutex);
@@ -300,7 +300,7 @@ void make_pathfinding_request(vec2f start, vec2f end, array *to_fill, pathfindin
if (request == ereq) {
ereq->start = start;
ereq->end = end;
- ereq->timestamp = platform_get_time(TIME_PROCESS, TIME_MS);
+ ereq->timestamp = platform_get_time(TIME_FULL, TIME_MILI_S);
mutex_unlock(&global_pathfinding_queue.mutex);
return;
}
diff --git a/src/players.c b/src/players.c
index e6fab6d..d22ec57 100644
--- a/src/players.c
+++ b/src/players.c
@@ -19,7 +19,7 @@ float get_player_size(platform_window* window) {
int get_player_count() {
int count = 0;
- for (int i = 0; i < max_players; i++) {
+ for (int i = 0; i < MAX_PLAYERS; i++) {
if (!players[i].active) continue;
count++;
}
@@ -27,7 +27,7 @@ int get_player_count() {
}
void spawn_player(u32 id, network_client client) {
- for (int i = 0; i < max_players; i++) {
+ for (int i = 0; i < MAX_PLAYERS; i++) {
if (players[i].active) continue;
players[i].active = true;
players[i].sec_since_last_shot = 10.0f;
@@ -97,7 +97,7 @@ void move_user(platform_window* window, u32 id, protocol_move_type move, float d
}
player* get_player_by_id(u32 id) {
- for (int i = 0; i < max_players; i++) {
+ for (int i = 0; i < MAX_PLAYERS; i++) {
if (!players[i].active) continue;
if (players[i].id == id) return &players[i];
}
@@ -132,7 +132,7 @@ object check_if_player_collided_with_object(platform_window* window, player p) {
}
int get_my_player_index() {
- for (int i = 0; i < max_players; i++) {
+ for (int i = 0; i < MAX_PLAYERS; i++) {
if (!players[i].active) continue;
if (players[i].id == player_id) return i;
}
@@ -146,28 +146,28 @@ void take_player_input(platform_window* window) {
if (keyboard_is_key_down(KEY_W)) {
if (!global_state.server) {
network_message message = create_protocol_user_moved(MOVE_UP, player_id);
- network_client_send(global_state.client, message);
+ add_message_to_outgoing_queuex(message, *global_state.client);
}
move_user(window, player_id, MOVE_UP, update_delta);
}
if (keyboard_is_key_down(KEY_S)) {
if (!global_state.server) {
network_message message = create_protocol_user_moved(MOVE_DOWN, player_id);
- network_client_send(global_state.client, message);
+ add_message_to_outgoing_queuex(message, *global_state.client);
}
move_user(window, player_id, MOVE_DOWN, update_delta);
}
if (keyboard_is_key_down(KEY_A)) {
if (!global_state.server) {
network_message message = create_protocol_user_moved(MOVE_LEFT, player_id);
- network_client_send(global_state.client, message);
+ add_message_to_outgoing_queuex(message, *global_state.client);
}
move_user(window, player_id, MOVE_LEFT, update_delta);
}
if (keyboard_is_key_down(KEY_D)) {
if (!global_state.server) {
network_message message = create_protocol_user_moved(MOVE_RIGHT, player_id);
- network_client_send(global_state.client, message);
+ add_message_to_outgoing_queuex(message, *global_state.client);
}
move_user(window, player_id, MOVE_RIGHT, update_delta);
}
@@ -186,7 +186,7 @@ void take_player_input(platform_window* window) {
p->gunx = p->playerx + gun_offset_x;
p->guny = p->playery + gun_offset_y;
- network_client_send(global_state.client, create_protocol_user_look(player_id, gun_offset_x, gun_offset_y));
+ add_message_to_outgoing_queuex(create_protocol_user_look(player_id, gun_offset_x, gun_offset_y), *global_state.client);
}
// shoot
@@ -199,13 +199,13 @@ void take_player_input(platform_window* window) {
diry /= length;
network_message message = create_protocol_user_shoot(player_id, dirx, diry);
- network_client_send(global_state.client, message);
+ add_message_to_outgoing_queuex(message, *global_state.client);
}
}
}
void update_players_server() {
- for (int i = 0; i < max_players; i++) {
+ for (int i = 0; i < MAX_PLAYERS; i++) {
if (!players[i].active) continue;
players[i].sec_since_last_shot += update_delta;
}
@@ -213,7 +213,7 @@ void update_players_server() {
void draw_players(platform_window* window) {
float size = get_player_size_in_tile();
- for (int i = 0; i < max_players; i++) {
+ for (int i = 0; i < MAX_PLAYERS; i++) {
if (!players[i].active) continue;
OBJECT_RENDER_DEPTH((int)(players[i].playery+size));
diff --git a/src/protocol.c b/src/protocol.c
index 468e80a..4493604 100644
--- a/src/protocol.c
+++ b/src/protocol.c
@@ -107,6 +107,13 @@ void client_on_message_received(u8 *buffer, u32 length)
mutex_unlock(&messages_received_on_client.mutex);
}
+void add_message_to_outgoing_queuex(network_message message, network_client c) {
+ send_queue_entry entry;
+ entry.message = message;
+ memset(entry.recipients, 0, sizeof(entry.recipients));
+ entry.recipients[0] = c;
+ add_message_to_outgoing_queue(entry);
+}
void add_message_to_outgoing_queue(send_queue_entry entry) {
for (int i = 0; i < OUTGOING_QUEUE_SIZE; i++)
diff --git a/src/zombies.c b/src/zombies.c
index 88d8e05..16ca4aa 100644
--- a/src/zombies.c
+++ b/src/zombies.c
@@ -4,7 +4,7 @@ static player get_closest_player_to_tile(int x, int y) {
float best_length = 99999;
int best_index = -1;
- for (int i = 0; i < max_players; i++) {
+ for (int i = 0; i < MAX_PLAYERS; i++) {
if (!players[i].active) continue;
float dirx = (players[i].playerx - x);
float diry = (players[i].playery - y);