summaryrefslogtreecommitdiff
path: root/src/overlay.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/overlay.c')
-rw-r--r--src/overlay.c88
1 files changed, 87 insertions, 1 deletions
diff --git a/src/overlay.c b/src/overlay.c
index 75c465a..185173e 100644
--- a/src/overlay.c
+++ b/src/overlay.c
@@ -9,6 +9,51 @@ static void draw_gun_info(platform_window* window) {
player *p = get_player_by_id(player_id);
if (!p) return;
+ // Overlay background.
+ int overlay_w = window->width / 4;
+ int overlay_h = overlay_w*(img_stats_overlay->height/(float)img_stats_overlay->width);
+
+ int overlay_x = _global_camera.x + window->width/2 - overlay_w/2;
+ int overlay_y = _global_camera.y + window->height - overlay_h;
+
+ renderer->render_image(img_stats_overlay, overlay_x, overlay_y, overlay_w, overlay_h);
+
+ // Round text.
+ {
+ font* round_fnt = get_font(window, 2.0f);
+ char round_text[30];
+ sprintf(round_text, "%d", _current_round.round_nr);
+ int round_text_x = _global_camera.x + window->width / 2 - renderer->calculate_text_width(round_fnt, round_text)/2;
+ int round_text_y = overlay_y + overlay_h/1.35f - round_fnt->px_h/2;
+
+ renderer->render_text(round_fnt, round_text_x+1, round_text_y-1, round_text, rgb(0,0,0));
+ renderer->render_text(round_fnt, round_text_x, round_text_y, round_text, rgb(255,255,255));
+
+ round_fnt = get_font(window, 1.5f);
+ sprintf(round_text, "%s", "Round");
+ round_text_x = _global_camera.x + window->width / 2 - renderer->calculate_text_width(round_fnt, round_text)/2;
+ round_text_y = overlay_y + overlay_h/3.0f - round_fnt->px_h/2;
+
+ renderer->render_text(round_fnt, round_text_x+1, round_text_y-1, round_text, rgb(0,0,0));
+ renderer->render_text(round_fnt, round_text_x, round_text_y, round_text, rgb(255,255,255));
+ }
+
+ // Ammo.
+ {
+ gun g = get_gun_by_type(p->guntype);
+ font* round_fnt = get_font(window, 1.5f);
+ char ammo_txt[50];
+ sprintf(ammo_txt, "%d/%d", p->ammo_in_mag, p->total_ammo);
+ int ammo_text_x = _global_camera.x + window->width / 2 - renderer->calculate_text_width(round_fnt, ammo_txt)/2 - overlay_w/3.2f;
+ int ammo_text_y = overlay_y + overlay_h/1.35f - round_fnt->px_h/2;
+
+ renderer->render_text(round_fnt, ammo_text_x+1, ammo_text_y-1, ammo_txt, rgb(0,0,0));
+ renderer->render_text(round_fnt, ammo_text_x, ammo_text_y, ammo_txt, rgb(255,255,255));
+ }
+
+
+ /*
+
gun g = get_gun_by_type(p->guntype);
int y = window->height - fnt_32->px_h - EDGE_PADDING;
@@ -45,7 +90,7 @@ static void draw_gun_info(platform_window* window) {
offset_x += icon_h/3;
}
}
-
+ */
}
static void draw_leaderboard_entry(int x, int y, int w, int h, char* name, char* kills, char* deaths, char* ping, bool highlighted, bool disconnected) {
@@ -72,6 +117,29 @@ static void draw_leaderboard_entry(int x, int y, int w, int h, char* name, char*
}
}
+static void draw_pause_button(platform_window* window, int x, int y) {
+ int btn_w = 200;
+ int btn_h = 50;
+ color bg_c = rgba(255,100,100,160);
+
+ if (_global_mouse.x + _global_camera.x > x &&
+ _global_mouse.x + _global_camera.x < x + btn_w &&
+ _global_mouse.y + _global_camera.y > y &&
+ _global_mouse.y + _global_camera.y < y + btn_h)
+ {
+ bg_c = rgba(255,100,100,220);
+ if (is_left_clicked()) {
+ game_is_paused = !game_is_paused;
+ }
+ }
+
+ char* text = game_is_paused ? "Unpause Game" : "Pause Game";
+ int text_w = renderer->calculate_text_width(fnt_20, text);
+
+ renderer->render_rectangle(x, y, btn_w, btn_h, bg_c);
+ renderer->render_text(fnt_20, x + (btn_w/2)-(text_w/2), y+(btn_h/2)-(fnt_20->px_h/2), text, rgb(255,255,255));
+}
+
static void draw_leaderboard(platform_window* window) {
if (keyboard_is_key_down(KEY_TAB)) {
int minimum_width = 300;
@@ -98,6 +166,11 @@ static void draw_leaderboard(platform_window* window) {
draw_leaderboard_entry(x, y + ((i+1)*height_per_row), actual_width, height_per_row,
get_player_name_by_player_index(i), kills, deaths, ping, players[i].id == player_id, players[i].connection_state == DISCONNECTED);
}
+
+
+ if (global_state.server) {
+ draw_pause_button(window, x, y + height_total + 20);
+ }
}
}
@@ -229,10 +302,23 @@ static void draw_hurt_borders(platform_window* window) {
*/
}
+static void draw_global_message(platform_window* window) {
+ if (!game_is_paused) return;
+ char* text = "Game is paused";
+ int text_w = renderer->calculate_text_width(fnt_52, text);
+
+ int x = _global_camera.x;
+ int y = _global_camera.y + 80;
+
+ renderer->render_text(fnt_52, x + (window->width/2)-(text_w/2)+1, y-1, text, rgb(0,0,0));
+ renderer->render_text(fnt_52, x + (window->width/2)-(text_w/2), y, text, rgb(255,255,255));
+}
+
void draw_overlay(platform_window* window) {
draw_hurt_borders(window);
draw_gun_info(window);
draw_points(window);
draw_leaderboard(window);
draw_debug_stats(window);
+ draw_global_message(window);
} \ No newline at end of file