Simplify T5 and T6 HUD overlays and service displays
This commit is contained in:
+72
-47
@@ -1,4 +1,4 @@
|
||||
/* tws_t6_hud.gsc - fixed upper-right core HUD, visible from connection. */
|
||||
/* tws_t6_hud.gsc - minimal edge HUD, toggleable with .hud. */
|
||||
|
||||
#include maps\mp\_utility;
|
||||
#include common_scripts\utility;
|
||||
@@ -11,14 +11,34 @@ main()
|
||||
init()
|
||||
{
|
||||
scripts\zm\tws_t6_common::ensure_config();
|
||||
scripts\zm\tws_t6_common::register_help_command(".hud", "Toggle core HUD");
|
||||
|
||||
level thread round_watcher();
|
||||
level thread game_over_watcher();
|
||||
level thread hud_chat_listener();
|
||||
|
||||
scripts\zm\tws_t6_common::register_connect_handler(::hud_connect);
|
||||
scripts\zm\tws_t6_common::register_spawn_handler(::hud_start);
|
||||
}
|
||||
|
||||
hud_chat_listener()
|
||||
{
|
||||
for (;;)
|
||||
{
|
||||
level waittill("say", message, player);
|
||||
if (!isDefined(player) || !isDefined(message))
|
||||
continue;
|
||||
if (toLower(message) == ".hud")
|
||||
player thread hud_toggle();
|
||||
}
|
||||
}
|
||||
|
||||
hud_toggle()
|
||||
{
|
||||
self hud_connect();
|
||||
self scripts\zm\tws_t6_common::toggle_core_hud();
|
||||
}
|
||||
|
||||
// Connection construction never seeds clocks or reads player gameplay state.
|
||||
// The first-spawn fallback also handles a spawn before the connect callback.
|
||||
hud_connect()
|
||||
@@ -29,48 +49,42 @@ hud_connect()
|
||||
return;
|
||||
|
||||
self.tws_hud_elems = [];
|
||||
background = scripts\zm\tws_t6_common::make_panel_shader(
|
||||
self, 0, 0, level.hud_panel_width, level.hud_core_height,
|
||||
level.hud_c_panel, level.hud_panel_alpha, 0);
|
||||
self.tws_hud_elems[self.tws_hud_elems.size] = background;
|
||||
self.tws_hud_match = self hud_text(level.hud_overlay_timer_x,
|
||||
level.hud_overlay_match_y, "left", 1.4, level.hud_c_count, "--:--");
|
||||
self.tws_hud_round = self hud_text(level.hud_overlay_timer_x,
|
||||
level.hud_overlay_round_y, "left", 1.25, level.hud_c_dim, "--:--");
|
||||
self hud_text(level.hud_overlay_brand_x, level.hud_overlay_brand_y,
|
||||
"center", 1.1, level.hud_c_dim, "TWS ZOMBIES · discord.tws.lol");
|
||||
|
||||
self hud_text(level.hud_pad, level.hud_row_header, "left",
|
||||
level.hud_font_small, level.hud_c_name, "TWS ZOMBIES");
|
||||
self hud_text(level.hud_panel_width - level.hud_pad, level.hud_row_header,
|
||||
"right", level.hud_font_small, level.hud_c_dim, "discord.tws.lol");
|
||||
|
||||
self hud_text(level.hud_pad, level.hud_row_timers, "left",
|
||||
level.hud_font_small, level.hud_c_label, "MATCH");
|
||||
self.tws_hud_match = self hud_text(104, level.hud_row_timers - 2, "right",
|
||||
level.hud_font_mid, level.hud_c_count, "--:--");
|
||||
self hud_text(114, level.hud_row_timers, "left",
|
||||
level.hud_font_small, level.hud_c_label, "ROUND");
|
||||
self.tws_hud_round = self hud_text(level.hud_panel_width - level.hud_pad,
|
||||
level.hud_row_timers - 2, "right",
|
||||
level.hud_font_mid, level.hud_c_count, "--:--");
|
||||
|
||||
self hud_text(level.hud_pad, level.hud_row_stats, "left",
|
||||
level.hud_font_small, level.hud_c_label, "ZOMBIES");
|
||||
self.tws_hud_count = self hud_text(67, level.hud_row_stats, "left",
|
||||
level.hud_font_mid, level.hud_c_count, "--");
|
||||
self hud_text(132, level.hud_row_stats, "left",
|
||||
level.hud_font_small, level.hud_c_label, "HP");
|
||||
self.tws_hud_count = self hud_text(level.hud_overlay_count_x,
|
||||
level.hud_overlay_count_y, "right", 1.5, level.hud_c_count, "--");
|
||||
self hud_text(level.hud_overlay_count_label_x, level.hud_overlay_count_label_y,
|
||||
"left", 1.05, level.hud_c_dim, "ZOMBIES");
|
||||
|
||||
// Independent numeric elements avoid a new config string on every tick.
|
||||
self.tws_hud_health = self hud_text(174, level.hud_row_stats, "right",
|
||||
level.hud_font_mid, level.hud_c_count, "--");
|
||||
self.tws_hud_slash = self hud_text(181, level.hud_row_stats, "center",
|
||||
level.hud_font_mid, level.hud_c_count, "/");
|
||||
self.tws_hud_maxhealth = self hud_text(level.hud_panel_width - level.hud_pad,
|
||||
level.hud_row_stats, "right", level.hud_font_mid, level.hud_c_count, "--");
|
||||
// The readout appears only after a valid damaged-health sample.
|
||||
self.tws_hud_health = self hud_text(level.hud_overlay_health_x,
|
||||
level.hud_overlay_health_y, "right", 1.0, level.hud_c_count, "--");
|
||||
self.tws_hud_slash = self hud_text(level.hud_overlay_slash_x,
|
||||
level.hud_overlay_health_y, "left", 1.0, level.hud_c_count, "/");
|
||||
self.tws_hud_maxhealth = self hud_text(level.hud_overlay_maxhealth_x,
|
||||
level.hud_overlay_health_y, "right", 1.0, level.hud_c_count, "--");
|
||||
self.tws_hud_hp = self hud_text(level.hud_overlay_hp_x,
|
||||
level.hud_overlay_health_y, "left", 1.0, level.hud_c_count, "HP");
|
||||
scripts\zm\tws_t6_common::set_core_alpha(self, self.tws_hud_health, 0);
|
||||
scripts\zm\tws_t6_common::set_core_alpha(self, self.tws_hud_slash, 0);
|
||||
scripts\zm\tws_t6_common::set_core_alpha(self, self.tws_hud_maxhealth, 0);
|
||||
scripts\zm\tws_t6_common::set_core_alpha(self, self.tws_hud_hp, 0);
|
||||
|
||||
track = scripts\zm\tws_t6_common::make_panel_shader(
|
||||
self, level.hud_pad, level.hud_row_bar,
|
||||
level.hud_bar_width, level.hud_bar_height, (0.18, 0.22, 0.19), 0.8, 10);
|
||||
track = scripts\zm\tws_t6_common::make_core_overlay_shader(
|
||||
self, level.hud_overlay_bar_x, level.hud_overlay_bar_y,
|
||||
level.hud_overlay_bar_width, level.hud_overlay_bar_height,
|
||||
(0.18, 0.22, 0.19), 0.8, 10);
|
||||
self.tws_hud_elems[self.tws_hud_elems.size] = track;
|
||||
self.tws_hud_bar = scripts\zm\tws_t6_common::make_panel_shader(
|
||||
self, level.hud_pad, level.hud_row_bar,
|
||||
level.hud_bar_width, level.hud_bar_height, level.hud_c_high, 0, 11);
|
||||
self.tws_hud_bar = scripts\zm\tws_t6_common::make_core_overlay_shader(
|
||||
self, level.hud_overlay_bar_x, level.hud_overlay_bar_y,
|
||||
level.hud_overlay_bar_width, level.hud_overlay_bar_height,
|
||||
level.hud_c_high, 0, 11);
|
||||
self.tws_hud_elems[self.tws_hud_elems.size] = self.tws_hud_bar;
|
||||
|
||||
self thread scripts\zm\tws_t6_common::destroy_on_disconnect(self.tws_hud_elems);
|
||||
@@ -78,7 +92,7 @@ hud_connect()
|
||||
|
||||
hud_text(x, y, align, scale, colour, text)
|
||||
{
|
||||
elem = scripts\zm\tws_t6_common::make_panel_text(self, x, y, align, scale, colour);
|
||||
elem = scripts\zm\tws_t6_common::make_core_overlay_text(self, x, y, align, scale, colour);
|
||||
elem SetText(text);
|
||||
self.tws_hud_elems[self.tws_hud_elems.size] = elem;
|
||||
return elem;
|
||||
@@ -147,7 +161,7 @@ hud_timer_row()
|
||||
{
|
||||
self endon("disconnect");
|
||||
|
||||
// A visible panel for a waiting newcomer must not start a pre-set round 1.
|
||||
// A visible HUD for a waiting newcomer must not start a pre-set round 1.
|
||||
if (!isDefined(level.match_start_time) &&
|
||||
isDefined(level.round_number) &&
|
||||
level.round_number >= 1)
|
||||
@@ -194,7 +208,7 @@ match_timer_bind(elem)
|
||||
elem SetTimerUp(max(0, (getTime() - level.match_start_time) / 1000.0));
|
||||
}
|
||||
|
||||
// The panel remains visible at game over, with authoritative frozen clocks.
|
||||
// Preserve authoritative frozen clocks when the core is shown after game over.
|
||||
freeze_timers_on_game_over(match_elem, round_elem)
|
||||
{
|
||||
self endon("disconnect");
|
||||
@@ -238,11 +252,12 @@ hud_health_display()
|
||||
self endon("disconnect");
|
||||
level endon("hud_game_over");
|
||||
|
||||
bar_width = level.hud_bar_width;
|
||||
bar_width = level.hud_overlay_bar_width;
|
||||
bar = self.tws_hud_bar;
|
||||
cur = self.tws_hud_health;
|
||||
slash = self.tws_hud_slash;
|
||||
max_hp = self.tws_hud_maxhealth;
|
||||
hp = self.tws_hud_hp;
|
||||
last_width = -1;
|
||||
last_health = -1;
|
||||
last_max = -1;
|
||||
@@ -261,16 +276,17 @@ hud_health_display()
|
||||
if (frac > 1)
|
||||
frac = 1;
|
||||
|
||||
width = int(max(frac * bar_width, 1));
|
||||
width = scripts\zm\tws_t6_common::make_overlay_width(frac * bar_width);
|
||||
if (width != last_width)
|
||||
{
|
||||
bar SetShader("white", width, level.hud_bar_height);
|
||||
bar SetShader("white", width, level.hud_overlay_bar_height);
|
||||
last_width = width;
|
||||
}
|
||||
|
||||
bar.alpha = 1;
|
||||
bar_alpha = 1;
|
||||
if (frac == 0)
|
||||
bar.alpha = 0;
|
||||
bar_alpha = 0;
|
||||
scripts\zm\tws_t6_common::set_core_alpha(self, bar, bar_alpha);
|
||||
|
||||
colour = level.hud_c_high;
|
||||
if (frac <= 0.25)
|
||||
@@ -282,8 +298,17 @@ hud_health_display()
|
||||
cur.color = colour;
|
||||
slash.color = colour;
|
||||
max_hp.color = colour;
|
||||
hp.color = colour;
|
||||
|
||||
// Health numbers remain visible at full health.
|
||||
readout_alpha = 0;
|
||||
if (isDefined(self.health) && current < maximum)
|
||||
readout_alpha = 1;
|
||||
scripts\zm\tws_t6_common::set_core_alpha(self, cur, readout_alpha);
|
||||
scripts\zm\tws_t6_common::set_core_alpha(self, slash, readout_alpha);
|
||||
scripts\zm\tws_t6_common::set_core_alpha(self, max_hp, readout_alpha);
|
||||
scripts\zm\tws_t6_common::set_core_alpha(self, hp, readout_alpha);
|
||||
|
||||
// Keep health numbers current even at full health or while hidden.
|
||||
if (current != last_health)
|
||||
{
|
||||
cur SetValue(current);
|
||||
|
||||
Reference in New Issue
Block a user