summaryrefslogtreecommitdiff
path: root/src/overlay.c
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrik@amftech.nl>2022-12-14 20:43:26 +0100
committerAldrik Ramaekers <aldrik@amftech.nl>2022-12-14 20:43:26 +0100
commit23d2cc231e5b4c015a8471d3035dc07802de23d5 (patch)
tree4b307a81e5fc566a5d1af9a0659b19534cff11b6 /src/overlay.c
parentee4906ef5fc89f3f10cd6aaf95845a0ae9b2f47e (diff)
leaderboard, network syncing
Diffstat (limited to 'src/overlay.c')
-rw-r--r--src/overlay.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/overlay.c b/src/overlay.c
index 5a81726..c79ef2e 100644
--- a/src/overlay.c
+++ b/src/overlay.c
@@ -1,5 +1,7 @@
#include "../include/overlay.h"
#include "../include/guns.h"
+#include "../include/players.h"
+#include "../include/asset_defs.h"
#define EDGE_PADDING 10
@@ -21,7 +23,45 @@ static void draw_gun_info(platform_window* window) {
renderer->render_text(fnt_20, (int)_global_camera.x + x, (int)_global_camera.y + y, ammo_txt, rgb(255,255,255));
}
+static void draw_leaderboard_entry(int x, int y, int w, int h, char* name, char* kills, char* deaths, char* ping) {
+ int width_for_name = w / 2;
+ int width_per_entry = (w-width_for_name)/3;
+ renderer->render_text(fnt_20, x, y, name, rgb(0,0,0));
+ renderer->render_text(fnt_20, x+width_for_name+width_per_entry*0, y, kills, rgb(0,0,0));
+ renderer->render_text(fnt_20, x+width_for_name+width_per_entry*1, y, deaths, rgb(0,0,0));
+ renderer->render_text(fnt_20, x+width_for_name+width_per_entry*2, y, ping, rgb(0,0,0));
+}
+
+static void draw_leaderboard(platform_window* window) {
+ if (keyboard_is_key_down(KEY_TAB)) {
+ int minimum_width = 300;
+ int maximum_width = 900;
+ int actual_width = window->width * 0.6f;
+ if (actual_width > maximum_width) actual_width = maximum_width;
+ if (actual_width < minimum_width) actual_width = minimum_width;
+
+ int height_per_row = 20;
+ int height_total = height_per_row * (get_player_count() + 1);
+
+ int x = (int)_global_camera.x + (window->width - actual_width) / 2;
+ int y = (int)_global_camera.y + (window->height - height_total) / 4;
+
+ renderer->render_rectangle(x, y, actual_width, height_total, rgba(255,255,255, 200));
+
+ draw_leaderboard_entry(x, y, actual_width, height_per_row, "Player", "Kills", "Deaths", "Ping");
+ for (int i = 0; i < max_players; i++) {
+ if (!players[i].active) continue;
+
+ char kills[30]; snprintf(kills, 30, "%d", 0);
+ char deaths[30]; snprintf(deaths, 30, "%d", 0);
+ char ping[30]; snprintf(ping, 30, "%d", 0);
+ draw_leaderboard_entry(x, y + ((i+1)*height_per_row), actual_width, height_per_row, players[i].client.ip, kills, deaths, ping);
+ }
+ }
+}
+
void draw_overlay(platform_window* window) {
OVERLAY_RENDER_DEPTH();
draw_gun_info(window);
+ draw_leaderboard(window);
} \ No newline at end of file