From 4d1b1b4c4b8317d897ff6c27cf6f4e5edbec914c Mon Sep 17 00:00:00 2001 From: Jbleezy Date: Tue, 25 Jun 2024 02:29:24 -0700 Subject: [PATCH] HUD: convert game mode score to LUI Containment and Meat: show scoring team HUD as gray and faded when inactive --- english/localizedstrings/reimagined.str | 3 + scripts/zm/_zm_reimagined.gsc | 20 +- scripts/zm/zgrief/zgrief_reimagined.gsc | 283 ++++++++---------------- ui/t6/menus/optionssettings.lua | 4 + ui_mp/t6/main.lua | 4 + ui_mp/t6/zombie/hudreimagined.lua | 237 +++++++++++++++++++- 6 files changed, 354 insertions(+), 197 deletions(-) diff --git a/english/localizedstrings/reimagined.str b/english/localizedstrings/reimagined.str index e9aba9e3..583f1965 100644 --- a/english/localizedstrings/reimagined.str +++ b/english/localizedstrings/reimagined.str @@ -94,6 +94,9 @@ LANG_ENGLISH "ZONE NAME" REFERENCE MENU_GAME_MODE_NAME_CAPS LANG_ENGLISH "GAME MODE NAME" +REFERENCE MENU_GAME_MODE_SCORE_CAPS +LANG_ENGLISH "GAME MODE SCORE" + REFERENCE MENU_CONTAINMENT_ZONE_TIME_CAPS LANG_ENGLISH "CONTAINMENT ZONE/TIME" diff --git a/scripts/zm/_zm_reimagined.gsc b/scripts/zm/_zm_reimagined.gsc index ce064439..efd3c39c 100644 --- a/scripts/zm/_zm_reimagined.gsc +++ b/scripts/zm/_zm_reimagined.gsc @@ -773,6 +773,21 @@ lui_notify_events() self luinotifyevent(&"hud_fade_in_quest_timer"); } + if (isdefined(level.game_mode_name_hud_value)) + { + self luinotifyevent(&"hud_update_game_mode_name", 1, level.game_mode_name_hud_value); + } + + if (isdefined(level.game_mode_player_count_hud_value)) + { + self luinotifyevent(&"hud_update_player_count", 2, level.game_mode_player_count_hud_value[self.team], level.game_mode_player_count_hud_value[getotherteam(self.team)]); + } + + if (isdefined(level.game_mode_scoring_team_hud_value)) + { + self luinotifyevent(&"hud_update_scoring_team", 1, level.game_mode_scoring_team_hud_value[self.team]); + } + if (isdefined(level.containment_zone_hud_value)) { self luinotifyevent(&"hud_update_containment_zone", 1, level.containment_zone_hud_value); @@ -782,11 +797,6 @@ lui_notify_events() { self luinotifyevent(&"hud_update_containment_time", 1, level.containment_time_hud_value); } - - if (isdefined(level.game_mode_name_hud_value)) - { - self luinotifyevent(&"hud_update_game_mode_name", 1, level.game_mode_name_hud_value); - } } enemy_counter_hud() diff --git a/scripts/zm/zgrief/zgrief_reimagined.gsc b/scripts/zm/zgrief/zgrief_reimagined.gsc index d89dc79e..5c566aba 100644 --- a/scripts/zm/zgrief/zgrief_reimagined.gsc +++ b/scripts/zm/zgrief/zgrief_reimagined.gsc @@ -47,7 +47,6 @@ init() precacheStatusIcon(level.item_meat_status_icon_name); - precacheshader("waypoint_target"); precacheshader("white_waypoint_target"); precacheshader("white_waypoint_capture"); precacheshader("white_waypoint_defend"); @@ -55,13 +54,10 @@ init() precacheshader("white_waypoint_grab"); precacheshader("white_waypoint_kill"); precacheshader("white_waypoint_escort"); - precacheshader("chalkmarks_hellcatraz_1"); - precacheshader("chalkmarks_hellcatraz_2"); - precacheshader("chalkmarks_hellcatraz_3"); - precacheshader("chalkmarks_hellcatraz_4"); - precacheshader("chalkmarks_hellcatraz_5"); precacheString(&"hud_update_game_mode_name"); + precacheString(&"hud_update_player_count"); + precacheString(&"hud_update_scoring_team"); precacheString(&"hud_update_containment_zone"); precacheString(&"hud_update_containment_time"); precacheString(istring(toupper("ZMUI_" + level.scr_zm_ui_gametype_obj))); @@ -102,7 +98,6 @@ init() level.player_suicide_func = ::player_suicide; level thread grief_gamemode_name_hud(); - level thread grief_gamemode_score_hud(); level thread grief_intro_msg(); level thread round_start_wait(5, true); level thread remove_round_number(); @@ -142,185 +137,96 @@ grief_gamemode_name_hud() } } -grief_gamemode_score_hud() -{ - if (level.script == "zm_prison") - { - game["icons"]["axis"] = "faction_inmates"; - game["icons"]["allies"] = "faction_guards"; - } - - level.grief_score_hud = []; - - foreach (team1 in level.teams) - { - level.grief_score_hud[team1] = spawnStruct(); - - foreach (team2 in level.teams) - { - level.grief_score_hud[team1].icon[team2] = newTeamHudElem(team1); - level.grief_score_hud[team1].icon[team2].alignx = "center"; - level.grief_score_hud[team1].icon[team2].aligny = "top"; - level.grief_score_hud[team1].icon[team2].horzalign = "user_center"; - level.grief_score_hud[team1].icon[team2].vertalign = "user_top"; - level.grief_score_hud[team1].icon[team2].y += 16; - level.grief_score_hud[team1].icon[team2].width = 32; - level.grief_score_hud[team1].icon[team2].height = 32; - level.grief_score_hud[team1].icon[team2].hidewheninmenu = 1; - level.grief_score_hud[team1].icon[team2].foreground = 1; - level.grief_score_hud[team1].icon[team2].alpha = 0; - level.grief_score_hud[team1].icon[team2] setShader(game["icons"][team2], level.grief_score_hud[team1].icon[team2].width, level.grief_score_hud[team1].icon[team2].height); - - level.grief_score_hud[team1].score[team2] = newTeamHudElem(team1); - level.grief_score_hud[team1].score[team2].alignx = "center"; - level.grief_score_hud[team1].score[team2].aligny = "top"; - level.grief_score_hud[team1].score[team2].horzalign = "user_center"; - level.grief_score_hud[team1].score[team2].vertalign = "user_top"; - level.grief_score_hud[team1].score[team2].y += 10; - level.grief_score_hud[team1].score[team2].fontscale = 3.5; - level.grief_score_hud[team1].score[team2].color = (0.21, 0, 0); - level.grief_score_hud[team1].score[team2].hidewheninmenu = 1; - level.grief_score_hud[team1].score[team2].foreground = 1; - level.grief_score_hud[team1].score[team2].alpha = 0; - level.grief_score_hud[team1].score[team2] setValue(0); - - if (team1 == team2) - { - level.grief_score_hud[team1].icon[team2].x -= 72.5; - level.grief_score_hud[team1].score[team2].x -= 27.5; - } - else - { - level.grief_score_hud[team1].icon[team2].x += 72.5; - level.grief_score_hud[team1].score[team2].x += 27.5; - } - - level.grief_score_hud[team1].icon[team2] thread scripts\zm\_zm_reimagined::destroy_on_intermission(); - level.grief_score_hud[team1].score[team2] thread scripts\zm\_zm_reimagined::destroy_on_intermission(); - - if (level.scr_zm_ui_gametype_obj == "zsnr" || level.scr_zm_ui_gametype_obj == "zcontainment") - { - level.grief_score_hud[team1].player_count[team2] = newTeamHudElem(team1); - level.grief_score_hud[team1].player_count[team2].alignx = "center"; - level.grief_score_hud[team1].player_count[team2].aligny = "top"; - level.grief_score_hud[team1].player_count[team2].horzalign = "user_center"; - level.grief_score_hud[team1].player_count[team2].vertalign = "user_top"; - level.grief_score_hud[team1].player_count[team2].y += 50; - level.grief_score_hud[team1].player_count[team2].width = 32; - level.grief_score_hud[team1].player_count[team2].height = 32; - level.grief_score_hud[team1].player_count[team2].color = (0.21, 0, 0); - level.grief_score_hud[team1].player_count[team2].hidewheninmenu = 1; - level.grief_score_hud[team1].player_count[team2].foreground = 1; - level.grief_score_hud[team1].player_count[team2].archived = 0; - level.grief_score_hud[team1].player_count[team2].alpha = 0; - - if (team1 == team2) - { - level.grief_score_hud[team1].player_count[team2].x -= 27.5; - } - else - { - level.grief_score_hud[team1].player_count[team2].x += 27.5; - } - - level.grief_score_hud[team1].player_count[team2].og_x = level.grief_score_hud[team1].player_count[team2].x; - - level.grief_score_hud[team1].player_count[team2] thread scripts\zm\_zm_reimagined::destroy_on_end_game(); - } - } - - if (level.scr_zm_ui_gametype_obj == "zcontainment" || level.scr_zm_ui_gametype_obj == "zmeat") - { - level.grief_score_hud[team1].obj_icon = newTeamHudElem(team1); - level.grief_score_hud[team1].obj_icon.alignx = "center"; - level.grief_score_hud[team1].obj_icon.aligny = "top"; - level.grief_score_hud[team1].obj_icon.horzalign = "user_center"; - level.grief_score_hud[team1].obj_icon.vertalign = "user_top"; - level.grief_score_hud[team1].obj_icon.y += 50; - level.grief_score_hud[team1].obj_icon.width = 20; - level.grief_score_hud[team1].obj_icon.height = 20; - level.grief_score_hud[team1].obj_icon.hidewheninmenu = 1; - level.grief_score_hud[team1].obj_icon.foreground = 1; - level.grief_score_hud[team1].obj_icon.archived = 0; - level.grief_score_hud[team1].obj_icon.alpha = 0; - level.grief_score_hud[team1].obj_icon setShader("waypoint_target", level.grief_score_hud[team1].obj_icon.width, level.grief_score_hud[team1].obj_icon.height); - - level.grief_score_hud[team1].obj_icon.og_x = level.grief_score_hud[team1].obj_icon.x; - - level.grief_score_hud[team1].obj_icon thread scripts\zm\_zm_reimagined::destroy_on_end_game(); - } - } - - level thread grief_score_hud_wait_and_show(); -} - -grief_score_hud_wait_and_show() -{ - flag_wait("hud_visible"); - - foreach (team1 in level.teams) - { - foreach (team2 in level.teams) - { - level.grief_score_hud[team1].icon[team2].alpha = 1; - level.grief_score_hud[team1].score[team2].alpha = 1; - } - } -} - grief_score_hud_set_player_count(team, num = get_number_of_valid_players_team(team)) { - foreach (team1 in level.teams) + if (!isdefined(level.game_mode_player_count_hud_value)) { - if (num == 0) - { - level.grief_score_hud[team1].player_count[team].alpha = 0; - continue; - } + level.game_mode_player_count_hud_value = []; + level.game_mode_player_count_hud_value["allies"] = -1; + level.game_mode_player_count_hud_value["axis"] = -1; + } - level.grief_score_hud[team1].player_count[team].alpha = 1; + if (level.game_mode_player_count_hud_value[team] == num) + { + return; + } - offset = (4 - num) * (level.grief_score_hud[team1].player_count[team].width / 8); - level.grief_score_hud[team1].player_count[team].x = level.grief_score_hud[team1].player_count[team].og_x + offset; + level.game_mode_player_count_hud_value[team] = num; - level.grief_score_hud[team1].player_count[team] setShader("chalkmarks_hellcatraz_" + num, level.grief_score_hud[team1].player_count[team].width, level.grief_score_hud[team1].player_count[team].height); + players = get_players("allies"); + + foreach (player in players) + { + player luinotifyevent(&"hud_update_player_count", 2, level.game_mode_player_count_hud_value["allies"], level.game_mode_player_count_hud_value["axis"]); + } + + players = get_players("axis"); + + foreach (player in players) + { + player luinotifyevent(&"hud_update_player_count", 2, level.game_mode_player_count_hud_value["axis"], level.game_mode_player_count_hud_value["allies"]); } } -grief_score_hud_set_obj_icon(team) +grief_score_hud_set_scoring_team(team) { - dist = 72.5; - - foreach (team1 in level.teams) + if (!isdefined(level.game_mode_scoring_team_hud_value)) { - if (team == "none") - { - level.grief_score_hud[team1].obj_icon.alpha = 0; - continue; - } + level.game_mode_scoring_team_hud_value = []; + level.game_mode_scoring_team_hud_value["allies"] = -1; + level.game_mode_scoring_team_hud_value["axis"] = -1; + } - level.grief_score_hud[team1].obj_icon.alpha = 1; + value = []; + value["allies"] = 0; + value["axis"] = 0; - if (team == "neutral") - { - level.grief_score_hud[team1].obj_icon.x = level.grief_score_hud[team1].obj_icon.og_x; - level.grief_score_hud[team1].obj_icon.color = (1, 1, 1); - } - else if (team == "contested") - { - level.grief_score_hud[team1].obj_icon.x = level.grief_score_hud[team1].obj_icon.og_x; - level.grief_score_hud[team1].obj_icon.color = (1, 1, 0); - } - else if (team1 == team) - { - level.grief_score_hud[team1].obj_icon.x = level.grief_score_hud[team1].obj_icon.og_x - dist; - level.grief_score_hud[team1].obj_icon.color = (0, 1, 0); - } - else - { - level.grief_score_hud[team1].obj_icon.x = level.grief_score_hud[team1].obj_icon.og_x + dist; - level.grief_score_hud[team1].obj_icon.color = (1, 0, 0); - } + if (team == "neutral") + { + value["allies"] = 0; + value["axis"] = 0; + } + else if (team == "allies") + { + value["allies"] = 1; + value["axis"] = 2; + } + else if (team == "axis") + { + value["allies"] = 2; + value["axis"] = 1; + } + else if (team == "contested") + { + value["allies"] = 3; + value["axis"] = 3; + } + else if (team == "none") + { + value["allies"] = 4; + value["axis"] = 4; + } + + if (level.game_mode_scoring_team_hud_value["allies"] == value["allies"] && level.game_mode_scoring_team_hud_value["axis"] == value["axis"]) + { + return; + } + + level.game_mode_scoring_team_hud_value["allies"] = value["allies"]; + level.game_mode_scoring_team_hud_value["axis"] = value["axis"]; + + players = get_players("allies"); + + foreach (player in players) + { + player luinotifyevent(&"hud_update_scoring_team", 1, level.game_mode_scoring_team_hud_value["allies"]); + } + + players = get_players("axis"); + + foreach (player in players) + { + player luinotifyevent(&"hud_update_scoring_team", 1, level.game_mode_scoring_team_hud_value["axis"]); } } @@ -2425,6 +2331,10 @@ containment_think() } } + flag_wait("initial_blackscreen_passed"); + + grief_score_hud_set_scoring_team("none"); + level waittill("restart_round_start"); start_time = getTime(); @@ -2635,7 +2545,7 @@ containment_think() player containment_set_obj_waypoint_icon("white_waypoint_contested"); } - grief_score_hud_set_obj_icon("contested"); + grief_score_hud_set_scoring_team("contested"); if (held_prev != "cont") { @@ -2672,7 +2582,7 @@ containment_think() } } - grief_score_hud_set_obj_icon("axis"); + grief_score_hud_set_scoring_team("axis"); if (held_prev != "axis") { @@ -2715,7 +2625,7 @@ containment_think() } } - grief_score_hud_set_obj_icon("allies"); + grief_score_hud_set_scoring_team("allies"); if (held_prev != "allies") { @@ -2758,7 +2668,7 @@ containment_think() player containment_set_obj_waypoint_icon("white_waypoint_target"); } - grief_score_hud_set_obj_icon("neutral"); + grief_score_hud_set_scoring_team("neutral"); if (held_prev != "none") { @@ -3204,6 +3114,12 @@ meat_think() { level endon("end_game"); + flag_wait("initial_blackscreen_passed"); + + grief_score_hud_set_scoring_team("none"); + + level waittill("restart_round_start"); + held_time = undefined; obj_time = 1000; @@ -3218,7 +3134,7 @@ meat_think() held_time = getTime(); } - grief_score_hud_set_obj_icon(level.meat_player.team); + grief_score_hud_set_scoring_team(level.meat_player.team); foreach (player in players) { @@ -3272,7 +3188,7 @@ meat_think() level.item_meat.obj_waypoint_origin.origin = level.item_meat.origin + (0, 0, 32); - grief_score_hud_set_obj_icon("neutral"); + grief_score_hud_set_scoring_team("neutral"); foreach (player in players) { @@ -3292,7 +3208,7 @@ meat_think() level.meat_powerup thread meat_waypoint_origin_destroy_on_death(); } - grief_score_hud_set_obj_icon("neutral"); + grief_score_hud_set_scoring_team("neutral"); foreach (player in players) { @@ -3304,7 +3220,7 @@ meat_think() } else { - grief_score_hud_set_obj_icon("none"); + grief_score_hud_set_scoring_team("none"); foreach (player in players) { @@ -3368,11 +3284,6 @@ increment_score(team, amount = 1, show_lead_msg = true, score_msg) level.grief_score[encounters_team] = get_gamemode_winning_score(); } - foreach (hud_team in level.teams) - { - level.grief_score_hud[hud_team].score[team] setValue(level.grief_score[encounters_team]); - } - setteamscore(team, level.grief_score[encounters_team]); if (level.grief_score[encounters_team] >= get_gamemode_winning_score()) diff --git a/ui/t6/menus/optionssettings.lua b/ui/t6/menus/optionssettings.lua index 537d2d3e..d49ef3b8 100644 --- a/ui/t6/menus/optionssettings.lua +++ b/ui/t6/menus/optionssettings.lua @@ -661,6 +661,10 @@ CoD.OptionsSettings.CreateModTab = function(ModTab, LocalClientIndex) GameModeNameSelector:addChoice(LocalClientIndex, Engine.Localize("MENU_DISABLED_CAPS"), 0, nil, CoD.OptionsSettings.Button_ApplyDvarChanged) GameModeNameSelector:addChoice(LocalClientIndex, Engine.Localize("MENU_ENABLED_CAPS"), 1, nil, CoD.OptionsSettings.Button_ApplyDvarChanged) + local GameModeScoreSelector = ModTabButtonList:addDvarLeftRightSelector(LocalClientIndex, Engine.Localize("MENU_GAME_MODE_SCORE_CAPS"), "ui_hud_game_mode_score") + GameModeScoreSelector:addChoice(LocalClientIndex, Engine.Localize("MENU_DISABLED_CAPS"), 0, nil, CoD.OptionsSettings.Button_ApplyDvarChanged) + GameModeScoreSelector:addChoice(LocalClientIndex, Engine.Localize("MENU_ENABLED_CAPS"), 1, nil, CoD.OptionsSettings.Button_ApplyDvarChanged) + local ContainmentSelector = ModTabButtonList:addDvarLeftRightSelector(LocalClientIndex, Engine.Localize("MENU_CONTAINMENT_ZONE_TIME_CAPS"), "ui_hud_containment") ContainmentSelector:addChoice(LocalClientIndex, Engine.Localize("MENU_DISABLED_CAPS"), 0, nil, CoD.OptionsSettings.Button_ApplyDvarChanged) ContainmentSelector:addChoice(LocalClientIndex, Engine.Localize("MENU_ENABLED_CAPS"), 1, nil, CoD.OptionsSettings.Button_ApplyDvarChanged) diff --git a/ui_mp/t6/main.lua b/ui_mp/t6/main.lua index 4530b36d..4f615e54 100644 --- a/ui_mp/t6/main.lua +++ b/ui_mp/t6/main.lua @@ -203,6 +203,10 @@ CoD.InitCustomDvars = function() Engine.Exec(nil, "seta ui_hud_game_mode_name 1") end + if UIExpression.DvarString(nil, "ui_hud_game_mode_score") == "" then + Engine.Exec(nil, "seta ui_hud_game_mode_score 1") + end + if UIExpression.DvarString(nil, "ui_hud_containment") == "" then Engine.Exec(nil, "seta ui_hud_containment 1") end diff --git a/ui_mp/t6/zombie/hudreimagined.lua b/ui_mp/t6/zombie/hudreimagined.lua index bbd34b47..8ba96438 100644 --- a/ui_mp/t6/zombie/hudreimagined.lua +++ b/ui_mp/t6/zombie/hudreimagined.lua @@ -249,12 +249,6 @@ LUI.createMenu.ReimaginedArea = function(LocalClientIndex) gameModeNameText:setTopBottom(true, false, 0, CoD.textSize.ExtraSmall) gameModeNameText:setFont(CoD.fonts.Big) gameModeNameText:setAlignment(LUI.Alignment.Center) - gameModeNameText:registerAnimationState("fade_out", { - alpha = 0, - }) - gameModeNameText:registerAnimationState("fade_in", { - alpha = 1, - }) gameModeNameWidget:addElement(gameModeNameText) gameModeNameWidget.gameModeNameText = gameModeNameText @@ -276,6 +270,91 @@ LUI.createMenu.ReimaginedArea = function(LocalClientIndex) gameModeNameWidget:registerEventHandler("hud_update_bit_" .. CoD.BIT_IS_PLAYER_ZOMBIE, CoD.Reimagined.GameModeNameArea.UpdateVisibility) gameModeNameWidget:registerEventHandler("hud_update_game_mode_name", CoD.Reimagined.GameModeNameArea.UpdateGameModeName) + local gameModeScoreWidget = LUI.UIElement.new() + gameModeScoreWidget:setLeftRight(true, true, 0, 0) + gameModeScoreWidget:setTopBottom(true, false, 26, 26) + gameModeScoreWidget:setAlpha(0) + gameModeScoreWidget.iconSize = 42 + safeArea:addElement(gameModeScoreWidget) + + local gameModeScoreFriendlyIcon = LUI.UIImage.new() + gameModeScoreFriendlyIcon:setLeftRight(false, false, -105 - (gameModeScoreWidget.iconSize / 2), -105 + (gameModeScoreWidget.iconSize / 2)) + gameModeScoreFriendlyIcon:setTopBottom(true, false, 0, gameModeScoreWidget.iconSize) + gameModeScoreFriendlyIcon:setAlpha(0) + gameModeScoreWidget:addElement(gameModeScoreFriendlyIcon) + gameModeScoreWidget.gameModeScoreFriendlyIcon = gameModeScoreFriendlyIcon + + local gameModeScoreEnemyIcon = LUI.UIImage.new() + gameModeScoreEnemyIcon:setLeftRight(false, false, 105 - (gameModeScoreWidget.iconSize / 2), 105 + (gameModeScoreWidget.iconSize / 2)) + gameModeScoreEnemyIcon:setTopBottom(true, false, 0, gameModeScoreWidget.iconSize) + gameModeScoreEnemyIcon:setAlpha(0) + gameModeScoreWidget:addElement(gameModeScoreEnemyIcon) + gameModeScoreWidget.gameModeScoreEnemyIcon = gameModeScoreEnemyIcon + + local gameModeScoreFriendlyText = LUI.UIText.new() + gameModeScoreFriendlyText:setLeftRight(true, true, -40, -40) + gameModeScoreFriendlyText:setTopBottom(true, false, -10, -10 + CoD.textSize.Morris) + gameModeScoreFriendlyText:setFont(CoD.fonts.Morris) + gameModeScoreFriendlyText:setAlignment(LUI.Alignment.Center) + gameModeScoreFriendlyText:setRGB(CoD.RoundStatus.DefaultColor.r, CoD.RoundStatus.DefaultColor.g, CoD.RoundStatus.DefaultColor.b) + gameModeScoreWidget:addElement(gameModeScoreFriendlyText) + gameModeScoreWidget.gameModeScoreFriendlyText = gameModeScoreFriendlyText + + local gameModeScoreEnemyText = LUI.UIText.new() + gameModeScoreEnemyText:setLeftRight(true, true, 40, 40) + gameModeScoreEnemyText:setTopBottom(true, false, -10, -10 + CoD.textSize.Morris) + gameModeScoreEnemyText:setFont(CoD.fonts.Morris) + gameModeScoreEnemyText:setAlignment(LUI.Alignment.Center) + gameModeScoreEnemyText:setRGB(CoD.RoundStatus.DefaultColor.r, CoD.RoundStatus.DefaultColor.g, CoD.RoundStatus.DefaultColor.b) + gameModeScoreWidget:addElement(gameModeScoreEnemyText) + gameModeScoreWidget.gameModeScoreEnemyText = gameModeScoreEnemyText + + local gameModeScoreFriendlyPlayerCount = LUI.UIImage.new() + gameModeScoreFriendlyPlayerCount:setLeftRight(false, false, -40 - (gameModeScoreWidget.iconSize / 2), -40 + (gameModeScoreWidget.iconSize / 2)) + gameModeScoreFriendlyPlayerCount:setTopBottom(true, false, 46, 46 + gameModeScoreWidget.iconSize) + gameModeScoreFriendlyPlayerCount:setRGB(CoD.RoundStatus.DefaultColor.r, CoD.RoundStatus.DefaultColor.g, CoD.RoundStatus.DefaultColor.b) + gameModeScoreFriendlyPlayerCount:setAlpha(0) + gameModeScoreWidget:addElement(gameModeScoreFriendlyPlayerCount) + gameModeScoreWidget.gameModeScoreFriendlyPlayerCount = gameModeScoreFriendlyPlayerCount + + local gameModeScoreEnemyPlayerCount = LUI.UIImage.new() + gameModeScoreEnemyPlayerCount:setLeftRight(false, false, 40 - (gameModeScoreWidget.iconSize / 2), 40 + (gameModeScoreWidget.iconSize / 2)) + gameModeScoreEnemyPlayerCount:setTopBottom(true, false, 46, 46 + gameModeScoreWidget.iconSize) + gameModeScoreEnemyPlayerCount:setRGB(CoD.RoundStatus.DefaultColor.r, CoD.RoundStatus.DefaultColor.g, CoD.RoundStatus.DefaultColor.b) + gameModeScoreEnemyPlayerCount:setAlpha(0) + gameModeScoreWidget:addElement(gameModeScoreEnemyPlayerCount) + gameModeScoreWidget.gameModeScoreEnemyPlayerCount = gameModeScoreEnemyPlayerCount + + local gameModeScoreScoringTeam = LUI.UIImage.new() + gameModeScoreScoringTeam.iconSize = gameModeScoreWidget.iconSize / 2 + gameModeScoreScoringTeam:setLeftRight(false, false, 0 - (gameModeScoreScoringTeam.iconSize / 2), 0 + (gameModeScoreScoringTeam.iconSize / 2)) + gameModeScoreScoringTeam:setTopBottom(true, false, 46, 46 + gameModeScoreScoringTeam.iconSize) + gameModeScoreScoringTeam:setImage(RegisterMaterial("waypoint_target")) + gameModeScoreScoringTeam:setAlpha(0) + gameModeScoreWidget:addElement(gameModeScoreScoringTeam) + gameModeScoreWidget.gameModeScoreScoringTeam = gameModeScoreScoringTeam + + gameModeScoreWidget:registerEventHandler("hud_update_refresh", CoD.Reimagined.GameModeScoreArea.UpdateVisibility) + gameModeScoreWidget:registerEventHandler("hud_update_bit_" .. CoD.BIT_HUD_VISIBLE, CoD.Reimagined.GameModeScoreArea.UpdateVisibility) + gameModeScoreWidget:registerEventHandler("hud_update_bit_" .. CoD.BIT_EMP_ACTIVE, CoD.Reimagined.GameModeScoreArea.UpdateVisibility) + gameModeScoreWidget:registerEventHandler("hud_update_bit_" .. CoD.BIT_DEMO_CAMERA_MODE_MOVIECAM, CoD.Reimagined.GameModeScoreArea.UpdateVisibility) + gameModeScoreWidget:registerEventHandler("hud_update_bit_" .. CoD.BIT_DEMO_ALL_GAME_HUD_HIDDEN, CoD.Reimagined.GameModeScoreArea.UpdateVisibility) + gameModeScoreWidget:registerEventHandler("hud_update_bit_" .. CoD.BIT_IN_VEHICLE, CoD.Reimagined.GameModeScoreArea.UpdateVisibility) + gameModeScoreWidget:registerEventHandler("hud_update_bit_" .. CoD.BIT_IN_GUIDED_MISSILE, CoD.Reimagined.GameModeScoreArea.UpdateVisibility) + gameModeScoreWidget:registerEventHandler("hud_update_bit_" .. CoD.BIT_IN_REMOTE_KILLSTREAK_STATIC, CoD.Reimagined.GameModeScoreArea.UpdateVisibility) + gameModeScoreWidget:registerEventHandler("hud_update_bit_" .. CoD.BIT_AMMO_COUNTER_HIDE, CoD.Reimagined.GameModeScoreArea.UpdateVisibility) + gameModeScoreWidget:registerEventHandler("hud_update_bit_" .. CoD.BIT_IS_FLASH_BANGED, CoD.Reimagined.GameModeScoreArea.UpdateVisibility) + gameModeScoreWidget:registerEventHandler("hud_update_bit_" .. CoD.BIT_UI_ACTIVE, CoD.Reimagined.GameModeScoreArea.UpdateVisibility) + gameModeScoreWidget:registerEventHandler("hud_update_bit_" .. CoD.BIT_SPECTATING_CLIENT, CoD.Reimagined.GameModeScoreArea.UpdateVisibility) + gameModeScoreWidget:registerEventHandler("hud_update_bit_" .. CoD.BIT_SCOREBOARD_OPEN, CoD.Reimagined.GameModeScoreArea.UpdateVisibility) + gameModeScoreWidget:registerEventHandler("hud_update_bit_" .. CoD.BIT_PLAYER_DEAD, CoD.Reimagined.GameModeScoreArea.UpdateVisibility) + gameModeScoreWidget:registerEventHandler("hud_update_bit_" .. CoD.BIT_IS_SCOPED, CoD.Reimagined.GameModeScoreArea.UpdateVisibility) + gameModeScoreWidget:registerEventHandler("hud_update_bit_" .. CoD.BIT_IS_PLAYER_ZOMBIE, CoD.Reimagined.GameModeScoreArea.UpdateVisibility) + gameModeScoreWidget:registerEventHandler("hud_update_team_change", CoD.Reimagined.GameModeScoreArea.UpdateTeamChange) + gameModeScoreWidget:registerEventHandler("hud_update_scores", CoD.Reimagined.GameModeScoreArea.UpdateScores) + gameModeScoreWidget:registerEventHandler("hud_update_player_count", CoD.Reimagined.GameModeScoreArea.UpdatePlayerCount) + gameModeScoreWidget:registerEventHandler("hud_update_scoring_team", CoD.Reimagined.GameModeScoreArea.UpdateScoringTeam) + local containmentWidget = LUI.UIElement.new() containmentWidget:setLeftRight(true, true, 7, 7) containmentWidget:setTopBottom(true, false, 3, 3) @@ -527,6 +606,142 @@ CoD.Reimagined.GameModeNameArea.UpdateGameModeName = function(Menu, ClientInstan Menu.gameModeNameText:setText(gameModeNameName) end +CoD.Reimagined.GameModeScoreArea = {} +CoD.Reimagined.GameModeScoreArea.UpdateVisibility = function(Menu, ClientInstance) + local controller = ClientInstance.controller + if UIExpression.DvarBool(nil, "ui_hud_game_mode_score") == 1 and UIExpression.IsVisibilityBitSet(controller, CoD.BIT_HUD_VISIBLE) == 1 and UIExpression.IsVisibilityBitSet(controller, CoD.BIT_EMP_ACTIVE) == 0 and UIExpression.IsVisibilityBitSet(controller, CoD.BIT_DEMO_CAMERA_MODE_MOVIECAM) == 0 and UIExpression.IsVisibilityBitSet(controller, CoD.BIT_DEMO_ALL_GAME_HUD_HIDDEN) == 0 and UIExpression.IsVisibilityBitSet(controller, CoD.BIT_IN_VEHICLE) == 0 and UIExpression.IsVisibilityBitSet(controller, CoD.BIT_IN_GUIDED_MISSILE) == 0 and UIExpression.IsVisibilityBitSet(controller, CoD.BIT_IN_REMOTE_KILLSTREAK_STATIC) == 0 and UIExpression.IsVisibilityBitSet(controller, CoD.BIT_AMMO_COUNTER_HIDE) == 0 and UIExpression.IsVisibilityBitSet(controller, CoD.BIT_IS_FLASH_BANGED) == 0 and UIExpression.IsVisibilityBitSet(controller, CoD.BIT_UI_ACTIVE) == 0 and UIExpression.IsVisibilityBitSet(controller, CoD.BIT_SCOREBOARD_OPEN) == 0 and UIExpression.IsVisibilityBitSet(controller, CoD.BIT_IN_KILLCAM) == 0 and UIExpression.IsVisibilityBitSet(controller, CoD.BIT_IS_SCOPED) == 0 and UIExpression.IsVisibilityBitSet(controller, CoD.BIT_IS_PLAYER_ZOMBIE) == 0 and (not CoD.IsShoutcaster(controller) or CoD.ExeProfileVarBool(controller, "shoutcaster_scorestreaks") and Engine.IsSpectatingActiveClient(controller)) and CoD.FSM_VISIBILITY(controller) == 0 then + if Menu.visible ~= true then + Menu:setAlpha(1) + Menu.visible = true + end + elseif Menu.visible == true then + Menu:setAlpha(0) + Menu.visible = nil + end +end + +CoD.Reimagined.GameModeScoreArea.UpdateTeamChange = function(Menu, ClientInstance) + if UIExpression.DvarString(nil, "ui_zm_gamemodegroup") ~= CoD.Zombie.GAMETYPEGROUP_ZENCOUNTER then + return + end + + if Menu.team ~= ClientInstance.team then + Menu.team = ClientInstance.team + local FactionTeam = Engine.GetFactionForTeam(ClientInstance.team) + local EnemyFactionTeam = Engine.GetFactionForTeam(CoD.Reimagined.GetOtherTeam(ClientInstance.team)) + if FactionTeam ~= "" then + Menu.gameModeScoreFriendlyIcon:setImage(RegisterMaterial("faction_" .. FactionTeam)) + Menu.gameModeScoreFriendlyIcon:setAlpha(1) + Menu.gameModeScoreEnemyIcon:setImage(RegisterMaterial("faction_" .. EnemyFactionTeam)) + Menu.gameModeScoreEnemyIcon:setAlpha(1) + + if Menu.yourScore ~= nil and Menu.enemyScore ~= nil then + Menu.yourScore, Menu.enemyScore = Menu.enemyScore, Menu.yourScore + + CoD.Reimagined.GameModeScoreArea.UpdateScores(Menu, ClientInstance) + end + + if Menu.yourPlayerCount ~= nil and Menu.enemyPlayerCount ~= nil then + Menu.yourPlayerCount, Menu.enemyPlayerCount = Menu.enemyPlayerCount, Menu.yourPlayerCount + + CoD.Reimagined.GameModeScoreArea.UpdatePlayerCount(Menu, ClientInstance) + end + + if Menu.scoringTeam ~= nil then + if Menu.scoringTeam == 1 then + Menu.scoringTeam = 2 + elseif Menu.scoringTeam == 2 then + Menu.scoringTeam = 1 + end + + CoD.Reimagined.GameModeScoreArea.UpdateScoringTeam(Menu, ClientInstance) + end + else + Menu.gameModeScoreFriendlyIcon:setAlpha(0) + Menu.gameModeScoreEnemyIcon:setAlpha(0) + end + end +end + +CoD.Reimagined.GameModeScoreArea.UpdateScores = function(Menu, ClientInstance) + if UIExpression.DvarString(nil, "ui_zm_gamemodegroup") ~= CoD.Zombie.GAMETYPEGROUP_ZENCOUNTER then + return + end + + if ClientInstance.yourScore ~= nil and ClientInstance.enemyScore ~= nil then + Menu.yourScore = ClientInstance.yourScore + Menu.enemyScore = ClientInstance.enemyScore + end + + Menu.gameModeScoreFriendlyText:setText(Menu.yourScore) + Menu.gameModeScoreEnemyText:setText(Menu.enemyScore) +end + +CoD.Reimagined.GameModeScoreArea.UpdatePlayerCount = function(Menu, ClientInstance) + if UIExpression.DvarString(nil, "ui_zm_gamemodegroup") ~= CoD.Zombie.GAMETYPEGROUP_ZENCOUNTER then + return + end + + if ClientInstance.data ~= nil then + Menu.yourPlayerCount = ClientInstance.data[1] + Menu.enemyPlayerCount = ClientInstance.data[2] + end + + if Menu.yourPlayerCount > 0 then + local offset = (4 - Menu.yourPlayerCount) * (Menu.iconSize / 8) + Menu.gameModeScoreFriendlyPlayerCount:setLeftRight(false, false, -40 + offset - (Menu.iconSize / 2), -40 + offset + (Menu.iconSize / 2)) + + Menu.gameModeScoreFriendlyPlayerCount:setImage(RegisterMaterial("chalkmarks_hellcatraz_" .. Menu.yourPlayerCount)) + Menu.gameModeScoreFriendlyPlayerCount:setAlpha(1) + else + Menu.gameModeScoreFriendlyPlayerCount:setAlpha(0) + end + + if Menu.enemyPlayerCount > 0 then + local offset = (4 - Menu.enemyPlayerCount) * (Menu.iconSize / 8) + Menu.gameModeScoreEnemyPlayerCount:setLeftRight(false, false, 40 + offset - (Menu.iconSize / 2), 40 + offset + (Menu.iconSize / 2)) + + Menu.gameModeScoreEnemyPlayerCount:setImage(RegisterMaterial("chalkmarks_hellcatraz_" .. Menu.enemyPlayerCount)) + Menu.gameModeScoreEnemyPlayerCount:setAlpha(1) + else + Menu.gameModeScoreEnemyPlayerCount:setAlpha(0) + end +end + +CoD.Reimagined.GameModeScoreArea.UpdateScoringTeam = function(Menu, ClientInstance) + if UIExpression.DvarString(nil, "ui_zm_gamemodegroup") ~= CoD.Zombie.GAMETYPEGROUP_ZENCOUNTER then + return + end + + if ClientInstance.data ~= nil then + Menu.scoringTeam = ClientInstance.data[1] + end + + if Menu.scoringTeam == 0 then + Menu.gameModeScoreScoringTeam:setLeftRight(false, false, 0 - (Menu.gameModeScoreScoringTeam.iconSize / 2), 0 + (Menu.gameModeScoreScoringTeam.iconSize / 2)) + Menu.gameModeScoreScoringTeam:setRGB(1, 1, 1) + Menu.gameModeScoreScoringTeam:setAlpha(1) + elseif Menu.scoringTeam == 1 then + Menu.gameModeScoreScoringTeam:setLeftRight(false, false, -105 - (Menu.gameModeScoreScoringTeam.iconSize / 2), -105 + (Menu.gameModeScoreScoringTeam.iconSize / 2)) + Menu.gameModeScoreScoringTeam:setRGB(0, 1, 0) + Menu.gameModeScoreScoringTeam:setAlpha(1) + elseif Menu.scoringTeam == 2 then + Menu.gameModeScoreScoringTeam:setLeftRight(false, false, 105 - (Menu.gameModeScoreScoringTeam.iconSize / 2), 105 + (Menu.gameModeScoreScoringTeam.iconSize / 2)) + Menu.gameModeScoreScoringTeam:setRGB(1, 0, 0) + Menu.gameModeScoreScoringTeam:setAlpha(1) + elseif Menu.scoringTeam == 3 then + Menu.gameModeScoreScoringTeam:setLeftRight(false, false, 0 - (Menu.gameModeScoreScoringTeam.iconSize / 2), 0 + (Menu.gameModeScoreScoringTeam.iconSize / 2)) + Menu.gameModeScoreScoringTeam:setRGB(1, 1, 0) + Menu.gameModeScoreScoringTeam:setAlpha(1) + elseif Menu.scoringTeam == 4 then + Menu.gameModeScoreScoringTeam:setLeftRight(false, false, 0 - (Menu.gameModeScoreScoringTeam.iconSize / 2), 0 + (Menu.gameModeScoreScoringTeam.iconSize / 2)) + Menu.gameModeScoreScoringTeam:setRGB(0.5, 0.5, 0.5) + Menu.gameModeScoreScoringTeam:setAlpha(0.5) + else + Menu.gameModeScoreScoringTeam:setAlpha(0) + end +end + CoD.Reimagined.ContainmentArea = {} CoD.Reimagined.ContainmentArea.UpdateVisibility = function(Menu, ClientInstance) local controller = ClientInstance.controller @@ -586,3 +801,13 @@ CoD.Reimagined.ConvertNumToTime = function(num) return time end + +CoD.Reimagined.GetOtherTeam = function(team) + if team == CoD.TEAM_ALLIES then + return CoD.TEAM_AXIS + elseif team == CoD.TEAM_AXIS then + return CoD.TEAM_ALLIES + end + + return team +end