From ecd37edc3f833526518cf6a6abb2bd128fd0a51c Mon Sep 17 00:00:00 2001 From: uniboi <64006268+uniboi@users.noreply.github.com> Date: Wed, 21 Sep 2022 21:44:20 +0000 Subject: Change modlist interface (#401) * Change modlist interface * add the settings file * new current mod enabled indicator * Only show requiredOnClient warning when required * filter by required on client status * fix ONLY_REQUIRED instead of ONLY_NOT_REQUIRED * update list slider position when reopening * colorblind colors * convar for reversed list and allow unicode search * better colors for the blind * Update filtered modlist after changing mod status * fix some things * mod enabled color blind icon * move enabled icon --- Northstar.Client/mod.json | 10 + .../northstar_client_localisation_english.txt | 2 + .../mod/resource/ui/menus/modlist.menu | 1003 +++++++++++--------- .../resource/ui/menus/panels/modlist_settings.res | 79 ++ .../mod/scripts/vscripts/ui/menu_ns_modmenu.nut | 679 ++++++++----- 5 files changed, 1110 insertions(+), 663 deletions(-) create mode 100644 Northstar.Client/mod/resource/ui/menus/panels/modlist_settings.res diff --git a/Northstar.Client/mod.json b/Northstar.Client/mod.json index 17b015432..7dcfcd210 100644 --- a/Northstar.Client/mod.json +++ b/Northstar.Client/mod.json @@ -31,6 +31,16 @@ { "Name": "filter_map_hide_locked", "DefaultValue": "0" + }, + { + "Name": "modlist_show_convars", + "DefaultValue": "0", + "Flags": 16777216 + }, + { + "Name": "modlist_reverse", + "DefaultValue": "0", + "Flags": 16777216 } ], "Scripts": [ diff --git a/Northstar.Client/mod/resource/northstar_client_localisation_english.txt b/Northstar.Client/mod/resource/northstar_client_localisation_english.txt index 8c6cadcff..3382e5b17 100644 --- a/Northstar.Client/mod/resource/northstar_client_localisation_english.txt +++ b/Northstar.Client/mod/resource/northstar_client_localisation_english.txt @@ -301,6 +301,8 @@ Press Yes if you agree to this. This choice can be changed in the mods menu at a "SHOW_ALL" "All" "SHOW_ONLY_ENABLED" "Only Enabled" "SHOW_ONLY_DISABLED" "Only Disabled" + "SHOW_ONLY_NOT_REQUIRED" "Only Optional Mods" + "SHOW_ONLY_REQUIRED" "Only Required Mods" // Maps menu "HIDE_LOCKED" "Hide locked" diff --git a/Northstar.Client/mod/resource/ui/menus/modlist.menu b/Northstar.Client/mod/resource/ui/menus/modlist.menu index ffe9a2572..da59bcddc 100644 --- a/Northstar.Client/mod/resource/ui/menus/modlist.menu +++ b/Northstar.Client/mod/resource/ui/menus/modlist.menu @@ -1,4 +1,4 @@ -resource/ui/menus/mods_browse.menu +resource/ui/menus/modlist.menu { menu { @@ -18,497 +18,654 @@ resource/ui/menus/mods_browse.menu Vignette { - ControlName ImagePanel - InheritProperties MenuVignette + ControlName ImagePanel + InheritProperties MenuVignette } Title { - ControlName Label - InheritProperties MenuTitle - labelText "#MENU_TITLE_MODS" + ControlName Label + InheritProperties MenuTitle + labelText "#MENU_TITLE_MODS" } ImgTopBar { - ControlName ImagePanel - InheritProperties MenuTopBar + ControlName ImagePanel + InheritProperties MenuTopBar } - + ButtonRowAnchor { - ControlName Label - labelText "" + ControlName Label + labelText "" - xpos 120 - ypos 160 + xpos 120 + ypos 160 } - + FilterButtonsRowAnchor { - ControlName Label - labelText "" + ControlName Label + labelText "" - xpos 90 - ypos 848 + xpos 90 + ypos 848 } - + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// PANELS //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - BtnMod1 - { - ControlName RuiButton - InheritProperties RuiSmallButton - classname ModButton - scriptID 0 - navUp BtnMod15 - navDown BtnMod2 - - pin_to_sibling ButtonRowAnchor - pin_corner_to_sibling TOP_LEFT - pin_to_sibling_corner TOP_LEFT - } - BtnMod2 - { - ControlName RuiButton - InheritProperties RuiSmallButton - classname ModButton - scriptID 1 - pin_to_sibling BtnMod1 - pin_corner_to_sibling TOP_LEFT - pin_to_sibling_corner BOTTOM_LEFT - navUp BtnMod1 - navDown BtnMod3 - } - BtnMod3 - { - ControlName RuiButton - InheritProperties RuiSmallButton - classname ModButton - scriptID 2 - pin_to_sibling BtnMod2 - pin_corner_to_sibling TOP_LEFT - pin_to_sibling_corner BOTTOM_LEFT - navUp BtnMod2 - navDown BtnMod4 - } - BtnMod4 - { - ControlName RuiButton - InheritProperties RuiSmallButton - classname ModButton - scriptID 3 - pin_to_sibling BtnMod3 - pin_corner_to_sibling TOP_LEFT - pin_to_sibling_corner BOTTOM_LEFT - //ypos 11 - navUp BtnMod3 - navDown BtnMod5 - } - BtnMod5 - { - ControlName RuiButton - InheritProperties RuiSmallButton - classname ModButton - scriptID 4 - pin_to_sibling BtnMod4 - pin_corner_to_sibling TOP_LEFT - pin_to_sibling_corner BOTTOM_LEFT - navUp BtnMod4 - navDown BtnMod6 - } - BtnMod6 - { - ControlName RuiButton - InheritProperties RuiSmallButton - classname ModButton - scriptID 5 - pin_to_sibling BtnMod5 - pin_corner_to_sibling TOP_LEFT - pin_to_sibling_corner BOTTOM_LEFT - navUp BtnMod5 - navDown BtnMod7 - } - BtnMod7 - { - ControlName RuiButton - InheritProperties RuiSmallButton - classname ModButton - scriptID 6 - pin_to_sibling BtnMod6 - pin_corner_to_sibling TOP_LEFT - pin_to_sibling_corner BOTTOM_LEFT - navUp BtnMod6 - navDown BtnMod8 - } - BtnMod8 - { - ControlName RuiButton - InheritProperties RuiSmallButton - classname ModButton - scriptID 7 - pin_to_sibling BtnMod7 - pin_corner_to_sibling TOP_LEFT - pin_to_sibling_corner BOTTOM_LEFT - navUp BtnMod7 - navDown BtnMod9 - } - BtnMod9 - { - ControlName RuiButton - InheritProperties RuiSmallButton - classname ModButton - scriptID 8 - pin_to_sibling BtnMod8 - pin_corner_to_sibling TOP_LEFT - pin_to_sibling_corner BOTTOM_LEFT - navUp BtnMod8 - navDown BtnMod10 - } - BtnMod10 - { - ControlName RuiButton - InheritProperties RuiSmallButton - classname ModButton - scriptID 9 - pin_to_sibling BtnMod9 - pin_corner_to_sibling TOP_LEFT - pin_to_sibling_corner BOTTOM_LEFT - navUp BtnMod9 - navDown BtnMod11 - } - BtnMod11 - { - ControlName RuiButton - InheritProperties RuiSmallButton - classname ModButton - scriptID 10 - pin_to_sibling BtnMod10 - pin_corner_to_sibling TOP_LEFT - pin_to_sibling_corner BOTTOM_LEFT - navUp BtnMod10 - navDown BtnMod12 - } - BtnMod12 - { - ControlName RuiButton - InheritProperties RuiSmallButton - classname ModButton - scriptID 11 - pin_to_sibling BtnMod11 - pin_corner_to_sibling TOP_LEFT - pin_to_sibling_corner BOTTOM_LEFT - navUp BtnMod11 - navDown BtnMod13 - } - BtnMod13 - { - ControlName RuiButton - InheritProperties RuiSmallButton - classname ModButton - scriptID 12 - pin_to_sibling BtnMod12 - pin_corner_to_sibling TOP_LEFT - pin_to_sibling_corner BOTTOM_LEFT - navUp BtnMod12 - navDown BtnMod14 - } - BtnMod14 - { - ControlName RuiButton - InheritProperties RuiSmallButton - classname ModButton - scriptID 13 - pin_to_sibling BtnMod13 - pin_corner_to_sibling TOP_LEFT - pin_to_sibling_corner BOTTOM_LEFT - navUp BtnMod13 - navDown BtnMod15 - } - BtnMod15 - { - ControlName RuiButton - InheritProperties RuiSmallButton - classname ModButton - scriptID 14 - pin_to_sibling BtnMod14 - pin_corner_to_sibling TOP_LEFT - pin_to_sibling_corner BOTTOM_LEFT - navUp BtnMod14 - navDown BtnMod1 - } - BtnMod16 - { - ControlName RuiButton - InheritProperties RuiSmallButton - classname ModButton - scriptID 15 - pin_to_sibling BtnMod15 - pin_corner_to_sibling TOP_LEFT - pin_to_sibling_corner BOTTOM_LEFT - navUp BtnMod15 - navDown BtnMod17 - } - BtnMod17 - { - ControlName RuiButton - InheritProperties RuiSmallButton - classname ModButton - scriptID 16 - pin_to_sibling BtnMod16 - pin_corner_to_sibling TOP_LEFT - pin_to_sibling_corner BOTTOM_LEFT - navUp BtnMod16 - navDown BtnMod18 + Panel1 + { + ControlName CNestedPanel + classname ModSelectorPanel + scriptID 1 + + controlSettingsFile "resource/ui/menus/panels/modlist_settings.res" + wide %100 + tall 45 + + pin_to_sibling ButtonRowAnchor + pin_corner_to_sibling TOP_LEFT + pin_to_sibling_corner BOTTOM_LEFT + } + + Panel2 + { + ControlName "CNestedPanel" + classname ModSelectorPanel + scriptID 2 + + controlSettingsFile "resource/ui/menus/panels/modlist_settings.res" + wide %100 + tall 45 + + pin_to_sibling Panel1 + pin_corner_to_sibling TOP_LEFT + pin_to_sibling_corner BOTTOM_LEFT + } + + Panel3 + { + ControlName "CNestedPanel" + classname ModSelectorPanel + scriptID 3 + + controlSettingsFile "resource/ui/menus/panels/modlist_settings.res" + wide %100 + tall 45 + + pin_to_sibling Panel2 + pin_corner_to_sibling TOP_LEFT + pin_to_sibling_corner BOTTOM_LEFT + } + + Panel4 + { + ControlName "CNestedPanel" + classname ModSelectorPanel + scriptID 4 + + controlSettingsFile "resource/ui/menus/panels/modlist_settings.res" + wide %100 + tall 45 + + pin_to_sibling Panel3 + pin_corner_to_sibling TOP_LEFT + pin_to_sibling_corner BOTTOM_LEFT + } + + Panel5 + { + ControlName "CNestedPanel" + classname ModSelectorPanel + scriptID 5 + + controlSettingsFile "resource/ui/menus/panels/modlist_settings.res" + wide %100 + tall 45 + + pin_to_sibling Panel4 + pin_corner_to_sibling TOP_LEFT + pin_to_sibling_corner BOTTOM_LEFT + } + + Panel6 + { + ControlName "CNestedPanel" + classname ModSelectorPanel + scriptID 6 + + controlSettingsFile "resource/ui/menus/panels/modlist_settings.res" + wide %100 + tall 45 + + pin_to_sibling Panel5 + pin_corner_to_sibling TOP_LEFT + pin_to_sibling_corner BOTTOM_LEFT + } + + Panel7 + { + ControlName "CNestedPanel" + classname ModSelectorPanel + scriptID 7 + + controlSettingsFile "resource/ui/menus/panels/modlist_settings.res" + wide %100 + tall 45 + + pin_to_sibling Panel6 + pin_corner_to_sibling TOP_LEFT + pin_to_sibling_corner BOTTOM_LEFT + } + + Panel8 + { + ControlName "CNestedPanel" + classname ModSelectorPanel + scriptID 8 + + controlSettingsFile "resource/ui/menus/panels/modlist_settings.res" + wide %100 + tall 45 + + pin_to_sibling Panel7 + pin_corner_to_sibling TOP_LEFT + pin_to_sibling_corner BOTTOM_LEFT + } + + Panel9 + { + ControlName "CNestedPanel" + classname ModSelectorPanel + scriptID 9 + + controlSettingsFile "resource/ui/menus/panels/modlist_settings.res" + wide %100 + tall 45 + + pin_to_sibling Panel8 + pin_corner_to_sibling TOP_LEFT + pin_to_sibling_corner BOTTOM_LEFT + } + + Panel10 + { + ControlName "CNestedPanel" + classname ModSelectorPanel + scriptID 10 + + controlSettingsFile "resource/ui/menus/panels/modlist_settings.res" + wide %100 + tall 45 + + pin_to_sibling Panel9 + pin_corner_to_sibling TOP_LEFT + pin_to_sibling_corner BOTTOM_LEFT + } + + Panel11 + { + ControlName "CNestedPanel" + classname ModSelectorPanel + scriptID 11 + + controlSettingsFile "resource/ui/menus/panels/modlist_settings.res" + wide %100 + tall 45 + + pin_to_sibling Panel10 + pin_corner_to_sibling TOP_LEFT + pin_to_sibling_corner BOTTOM_LEFT + } + + Panel12 + { + ControlName "CNestedPanel" + classname ModSelectorPanel + scriptID 12 + + controlSettingsFile "resource/ui/menus/panels/modlist_settings.res" + wide %100 + tall 45 + + pin_to_sibling Panel11 + pin_corner_to_sibling TOP_LEFT + pin_to_sibling_corner BOTTOM_LEFT } + Panel13 + { + ControlName "CNestedPanel" + classname ModSelectorPanel + scriptID 13 + + controlSettingsFile "resource/ui/menus/panels/modlist_settings.res" + wide %100 + tall 45 + + pin_to_sibling Panel12 + pin_corner_to_sibling TOP_LEFT + pin_to_sibling_corner BOTTOM_LEFT + } + + Panel14 + { + ControlName "CNestedPanel" + classname ModSelectorPanel + scriptID 14 + + controlSettingsFile "resource/ui/menus/panels/modlist_settings.res" + wide %100 + tall 45 + + pin_to_sibling Panel13 + pin_corner_to_sibling TOP_LEFT + pin_to_sibling_corner BOTTOM_LEFT + } + + Panel15 + { + ControlName "CNestedPanel" + classname ModSelectorPanel + scriptID 15 + + controlSettingsFile "resource/ui/menus/panels/modlist_settings.res" + wide %100 + tall 45 + + pin_to_sibling Panel14 + pin_corner_to_sibling TOP_LEFT + pin_to_sibling_corner BOTTOM_LEFT + } + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - +// FILTERS +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + FilterPanel { - ControlName RuiPanel - wide 800 - tall 112 - xpos -8 - classname FilterPanelChild - - rui "ui/knowledgebase_panel.rpak" + ControlName RuiPanel + classname FilterPanelChild + + wide 800 + tall 112 + xpos -8 + zpos -1 - visible 1 - zpos -1 + rui "ui/knowledgebase_panel.rpak" + visible 1 - pin_to_sibling FilterButtonsRowAnchor - pin_corner_to_sibling TOP_LEFT - pin_to_sibling_corner TOP_LEFT + pin_to_sibling FilterButtonsRowAnchor + pin_corner_to_sibling TOP_LEFT + pin_to_sibling_corner TOP_LEFT } - + BtnSearchLabel { - ControlName RuiButton - InheritProperties RuiSmallButton - labelText "#SEARCHBAR_LABEL" - textAlignment west - classname FilterPanelChild - - wide 500 - xpos -23 - ypos -16 - - wrap 1 - visible 1 - zpos 0 - - pin_to_sibling FilterButtonsRowAnchor - pin_corner_to_sibling TOP_LEFT - pin_to_sibling_corner TOP_LEFT - } - + ControlName RuiButton + InheritProperties RuiSmallButton + classname FilterPanelChild + + labelText #SEARCHBAR_LABEL + textAlignment west + + wide 500 + xpos -23 + ypos -16 + zpos 0 + wrap 1 + visible 1 + + + + pin_to_sibling FilterButtonsRowAnchor + pin_corner_to_sibling TOP_LEFT + pin_to_sibling_corner TOP_LEFT + } + BtnModsSearch { - ControlName TextEntry - classname FilterPanelChild - zpos 100 // This works around input weirdness when the control is constructed by code instead of VGUI blackbox. - xpos -400 - ypos -5 - wide 390 - tall 30 - textHidden 0 - editable 1 - font Default_21 - allowRightClickMenu 0 - allowSpecialCharacters 0 - unicode 0 - - pin_to_sibling BtnSearchLabel - pin_corner_to_sibling TOP_LEFT - pin_to_sibling_corner TOP_RIGHT + ControlName TextEntry + classname FilterPanelChild + + zpos 100 // This works around input weirdness when the control is constructed by code instead of VGUI blackbox. + xpos -400 + ypos -5 + wide 390 + tall 30 + + textHidden 0 // Why? + editable 1 + font Default_21 + + allowRightClickMenu 0 + allowSpecialCharacters 0 + unicode 1 + + pin_to_sibling BtnSearchLabel + pin_corner_to_sibling TOP_LEFT + pin_to_sibling_corner TOP_RIGHT } - + SwtBtnShowFilter { - ControlName RuiButton - InheritProperties SwitchButton - labelText "#SHOW" - ConVar "filter_mods" - classname FilterPanelChild + ControlName RuiButton + InheritProperties SwitchButton + classname FilterPanelChild + + labelText "#SHOW" + ConVar "filter_mods" wide 500 - + list { - "#SHOW_ALL" 0 - "#SHOW_ONLY_ENABLED" 1 - "#SHOW_ONLY_DISABLED" 2 + "#SHOW_ALL" 0 + "#SHOW_ONLY_ENABLED" 1 + "#SHOW_ONLY_DISABLED" 2 + "#SHOW_ONLY_NOT_REQUIRED" 3 + "#SHOW_ONLY_REQUIRED" 4 } - - pin_to_sibling BtnSearchLabel - pin_corner_to_sibling TOP_LEFT - pin_to_sibling_corner BOTTOM_LEFT + + pin_to_sibling BtnSearchLabel + pin_corner_to_sibling TOP_LEFT + pin_to_sibling_corner BOTTOM_LEFT } - + + BtnListReverse + { + ControlName RuiButton + InheritProperties SwitchButton + classname FilterPanelChild + + xpos -15 + ypos -15 + + labelText "Reverse" + ConVar "modlist_reverse" + wide 260 + + list + { + "low first" 0 + "high first" 1 + } + + pin_to_sibling FilterPanel + pin_corner_to_sibling TOP_RIGHT + pin_to_sibling_corner TOP_RIGHT + } + BtnFiltersClear { - ControlName RuiButton - InheritProperties RuiSmallButton - labelText "#CLEAR_FILTERS" - classname FilterPanelChild - wide 100 - xpos -15 - ypos -55 - zpos 90 - - scriptID 999 - - pin_to_sibling FilterPanel - pin_corner_to_sibling TOP_RIGHT - pin_to_sibling_corner BOTTOM_RIGHT + ControlName RuiButton + InheritProperties RuiSmallButton + classname FilterPanelChild + + labelText "#CLEAR_FILTERS" + wide 100 + xpos -15 + ypos -55 + zpos 90 + + pin_to_sibling FilterPanel + pin_corner_to_sibling TOP_RIGHT + pin_to_sibling_corner BOTTOM_RIGHT } - + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// MOD INFO +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + ModButtonsPanel + { + ControlName RuiPanel + classname FilterPanelChild + + wide 950 + tall 112 + + rui "ui/knowledgebase_panel.rpak" + + pin_to_sibling LabelDetails + pin_corner_to_sibling TOP + pin_to_sibling_corner BOTTOM + } + + HideCVButton + { + ControlName RuiButton + InheritProperties SwitchButton + + labelText "ConVars" + ConVar "modlist_show_convars" + wide 300 + + list + { + "Hidden" 0 + "Shown" 1 + } + + pin_to_sibling ModButtonsPanel + pin_corner_to_sibling TOP_LEFT + pin_to_sibling_corner TOP_LEFT + } + + ModPageButton + { + ControlName RuiButton + InheritProperties RuiSmallButton + + textAlignment west + visible 0 + + pin_to_sibling HideCVButton + pin_corner_to_sibling TOP_LEFT + pin_to_sibling_corner BOTTOM_LEFT + } + + WarningLegendImage + { + ControlName RuiPanel + + rui ui/basic_image.rpak + wide 30 + tall 30 + xpos -10 + ypos -5 + visible 0 + + pin_to_sibling ModButtonsPanel + pin_corner_to_sibling BOTTOM_LEFT + pin_to_sibling_corner BOTTOM_LEFT + } + + WarningLegendLabel + { + ControlName Label + + labelText " : This mod gets (un)loaded automatically" + wide 500 + tall 50 + visible 0 + + pin_to_sibling WarningLegendImage + pin_corner_to_sibling LEFT + pin_to_sibling_corner RIGHT + } + LabelDetails { - ControlName RuiPanel - xpos 900 - ypos 160 - tall 800 - wide 950 - rui "ui/knowledgebase_panel.rpak" - wrap 1 - visible 1 - zpos 1 + ControlName RuiPanel + + xpos 900 + ypos 160 + zpos 1 + + tall 688 + wide 950 + rui "ui/knowledgebase_panel.rpak" + wrap 1 + visible 1 } - + + ModEnabledBar + { + ControlName RuiPanel + + rui ui/basic_image.rpak + wide 950 + tall 7 + zpos 2 + visible 0 + + pin_to_sibling LabelDetails + pin_corner_to_sibling TOP_LEFT + pin_to_sibling_corner TOP_LEFT + } + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// SLIDER //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + BtnModListUpArrow { - ControlName RuiButton - InheritProperties RuiSmallButton - //labelText "A" - wide 40 - tall 40 - xpos 2 - ypos 2 - - image "vgui/hud/white" - drawColor "255 255 255 128" - - pin_to_sibling LabelDetails - pin_corner_to_sibling TOP_RIGHT - pin_to_sibling_corner TOP_LEFT - } - + ControlName RuiButton + InheritProperties RuiSmallButton + + wide 40 + tall 40 + xpos 2 + ypos 2 + + image "vgui/hud/white" + drawColor "255 255 255 128" + + pin_to_sibling LabelDetails + pin_corner_to_sibling TOP_RIGHT + pin_to_sibling_corner TOP_LEFT + } + BtnModListUpArrowPanel { - ControlName RuiPanel - wide 40 - tall 40 - xpos 2 - ypos 2 - - rui "ui/knowledgebase_panel.rpak" - - visible 1 - zpos -1 - - pin_to_sibling LabelDetails - pin_corner_to_sibling TOP_RIGHT - pin_to_sibling_corner TOP_LEFT - } - + ControlName RuiPanel + + wide 40 + tall 40 + xpos 2 + ypos 2 + + rui "ui/knowledgebase_panel.rpak" + visible 1 + zpos -1 + + pin_to_sibling LabelDetails + pin_corner_to_sibling TOP_RIGHT + pin_to_sibling_corner TOP_LEFT + } + BtnModListDownArrow { - ControlName RuiButton - InheritProperties RuiSmallButton - //labelText "V" - wide 40 - tall 40 - xpos 2 - ypos -646 - - image "vgui/hud/white" - drawColor "255 255 255 128" - - pin_to_sibling LabelDetails - pin_corner_to_sibling TOP_RIGHT - pin_to_sibling_corner TOP_LEFT - } - + ControlName RuiButton + InheritProperties RuiSmallButton + + wide 40 + tall 40 + xpos 2 + ypos -646 + + image "vgui/hud/white" + drawColor "255 255 255 128" + + pin_to_sibling LabelDetails + pin_corner_to_sibling TOP_RIGHT + pin_to_sibling_corner TOP_LEFT + } + BtnModListDownArrowPanel { - ControlName RuiPanel - wide 40 - tall 40 - xpos 2 - ypos -646 - - rui "ui/knowledgebase_panel.rpak" - - visible 1 - zpos -1 - - pin_to_sibling LabelDetails - pin_corner_to_sibling TOP_RIGHT - pin_to_sibling_corner TOP_LEFT - } - + ControlName RuiPanel + + wide 40 + tall 40 + xpos 2 + ypos -646 + zpos -1 + + rui "ui/knowledgebase_panel.rpak" + visible 1 + + pin_to_sibling LabelDetails + pin_corner_to_sibling TOP_RIGHT + pin_to_sibling_corner TOP_LEFT + } + BtnModListSlider { - ControlName RuiButton - InheritProperties RuiSmallButton - //labelText "V" - wide 40 - tall 604 - xpos 2 - ypos -40 - zpos 0 - - image "vgui/hud/white" - drawColor "255 255 255 128" - - pin_to_sibling LabelDetails - pin_corner_to_sibling TOP_RIGHT - pin_to_sibling_corner TOP_LEFT - } - + ControlName RuiButton + InheritProperties RuiSmallButton + + wide 40 + tall 604 + xpos 2 + ypos -40 + zpos 0 + + image "vgui/hud/white" + drawColor "255 255 255 128" + + pin_to_sibling LabelDetails + pin_corner_to_sibling TOP_RIGHT + pin_to_sibling_corner TOP_LEFT + } + BtnModListSliderPanel { - ControlName RuiPanel - wide 40 - tall 604 - xpos 2 - ypos -40 - - rui "ui/knowledgebase_panel.rpak" - - visible 1 - zpos -1 - - pin_to_sibling LabelDetails - pin_corner_to_sibling TOP_RIGHT - pin_to_sibling_corner TOP_LEFT - } - + ControlName RuiPanel + + wide 40 + tall 604 + xpos 2 + ypos -40 + zpos -1 + + rui "ui/knowledgebase_panel.rpak" + visible 1 + + + pin_to_sibling LabelDetails + pin_corner_to_sibling TOP_RIGHT + pin_to_sibling_corner TOP_LEFT + } + // sh_menu_models.gnut has a global function which gets called when // left mouse button gets called while hovering and has mouse // deltaX; deltaY which we can yoink for ourselfes MouseMovementCapture { - ControlName CMouseMovementCapturePanel - wide 40 - tall 604 - xpos 2 - ypos -40 - zpos 1 - - pin_to_sibling LabelDetails - pin_corner_to_sibling TOP_RIGHT - pin_to_sibling_corner TOP_LEFT + ControlName CMouseMovementCapturePanel + + wide 40 + tall 604 + xpos 2 + ypos -40 + zpos 1 + + pin_to_sibling LabelDetails + pin_corner_to_sibling TOP_RIGHT + pin_to_sibling_corner TOP_LEFT } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// FooterButtons { - ControlName CNestedPanel - InheritProperties FooterButtons + ControlName CNestedPanel + InheritProperties FooterButtons } } } diff --git a/Northstar.Client/mod/resource/ui/menus/panels/modlist_settings.res b/Northstar.Client/mod/resource/ui/menus/panels/modlist_settings.res new file mode 100644 index 000000000..cd5962384 --- /dev/null +++ b/Northstar.Client/mod/resource/ui/menus/panels/modlist_settings.res @@ -0,0 +1,79 @@ +resource/ui/menus/panels/modlist_setting.res +{ + BtnMod + { + ControlName RuiButton + InheritProperties RuiSmallButton + classname ModButton + labelText "please show up" + + pin_to_sibling ControlBox + pin_corner_to_sibling LEFT + pin_to_sibling_corner RIGHT + } + + Header + { + ControlName Label + wide 400 + labelText "labelText" + + pin_to_sibling ControlBox + pin_corner_to_sibling LEFT + pin_to_sibling_corner RIGHT + } + + ControlBox + { + ControlName RuiPanel + classname ControlBox + + tall 30 + wide 5 + ypos 5 + rui "ui/basic_image.rpak" + + pin_corner_to_sibling LEFT + pin_to_sibling_corner LEFT + } + + BottomLine + { + ControlName ImagePanel + InheritProperties MenuTopBar + ypos 0 + wide %50 + + pin_to_sibling BtnMod + pin_corner_to_sibling TOP_LEFT + pin_to_sibling_corner BOTTOM_LEFT + } + + WarningImage + { + ControlName RuiPanel + + rui ui/basic_image.rpak + wide 30 + tall 30 + visible 0 + + pin_to_sibling BtnMod + pin_corner_to_sibling LEFT + pin_to_sibling_corner RIGHT + } + + EnabledImage + { + ControlName RuiPanel + + rui ui/basic_image.rpak + wide 30 + tall 30 + visible 0 + + pin_to_sibling BtnMod + pin_corner_to_sibling RIGHT + pin_to_sibling_corner LEFT + } +} diff --git a/Northstar.Client/mod/scripts/vscripts/ui/menu_ns_modmenu.nut b/Northstar.Client/mod/scripts/vscripts/ui/menu_ns_modmenu.nut index 15d78025b..01149bb0e 100644 --- a/Northstar.Client/mod/scripts/vscripts/ui/menu_ns_modmenu.nut +++ b/Northstar.Client/mod/scripts/vscripts/ui/menu_ns_modmenu.nut @@ -5,18 +5,26 @@ global function AddNorthstarModMenu_MainMenuFooter global function ReloadMods -const int BUTTONS_PER_PAGE = 17 - +struct modData { + string name = "" + string version = "" + string link = "" + int loadPriority = 0 + bool enabled = false + array conVars = [] +} -struct modStruct { - int modIndex - string modName +struct panelContent { + modData& mod + bool isHeader = false } enum filterShow { ALL = 0, ONLY_ENABLED = 1, ONLY_DISABLED = 2 + ONLY_NOT_REQUIRED = 3, + ONLY_REQUIRED = 4 } struct { @@ -25,16 +33,19 @@ struct { } mouseDeltaBuffer struct { - bool shouldReloadModsOnEnd - string currentMod - var currentButton - int scrollOffset = 0 - - array modsArrayFiltered - + array mods var menu + array panels + int scrollOffset = 0 + array enabledMods + var currentButton + string searchTerm + modData& lastMod } file +const int PANELS_LEN = 15 +const string[3] CORE_MODS = ["Northstar.Client", "Northstar.Coop", "Northstar.CustomServers"] // Shows a warning if you try to disable these + void function AddNorthstarModMenu() { AddMenu( "ModListMenu", $"resource/ui/menus/modlist.menu", InitModMenu ) @@ -54,11 +65,46 @@ void function AdvanceToModListMenu( var button ) void function InitModMenu() { file.menu = GetMenu( "ModListMenu" ) - + file.panels = GetElementsByClassname( file.menu, "ModSelectorPanel" ) + + var rui = Hud_GetRui( Hud_GetChild( file.menu, "WarningLegendImage" ) ) + RuiSetImage( rui, "basicImage", $"ui/menu/common/dialog_error" ) + + RuiSetFloat( Hud_GetRui( Hud_GetChild( file.menu, "ModEnabledBar" ) ), "basicImageAlpha", 0.8 ) + + // Mod buttons + foreach ( var panel in file.panels ) + { + var button = Hud_GetChild( panel, "BtnMod" ) + AddButtonEventHandler( button, UIE_GET_FOCUS, OnModButtonFocused ) + AddButtonEventHandler( button, UIE_CLICK, OnModButtonPressed ) + + var rui = Hud_GetRui( Hud_GetChild( panel, "WarningImage" ) ) + RuiSetImage( rui, "basicImage", $"ui/menu/common/dialog_error" ) + } + AddMouseMovementCaptureHandler( file.menu, UpdateMouseDeltaBuffer ) + // UI Events AddMenuEventHandler( file.menu, eUIEvent.MENU_OPEN, OnModMenuOpened ) AddMenuEventHandler( file.menu, eUIEvent.MENU_CLOSE, OnModMenuClosed ) + + // up / down buttons + AddButtonEventHandler( Hud_GetChild( file.menu, "BtnModListUpArrow" ), UIE_CLICK, OnUpArrowSelected ) + AddButtonEventHandler( Hud_GetChild( file.menu, "BtnModListDownArrow" ), UIE_CLICK, OnDownArrowSelected ) + + // Mod info buttons + AddButtonEventHandler( Hud_GetChild( file.menu, "ModPageButton" ), UIE_CLICK, OnModLinkButtonPressed ) + + // Filter buttons + AddButtonEventHandler( Hud_GetChild( file.menu, "SwtBtnShowFilter"), UIE_CHANGE, OnFiltersChange ) + AddButtonEventHandler( Hud_GetChild( file.menu, "BtnModsSearch"), UIE_CHANGE, OnFiltersChange ) + AddButtonEventHandler( Hud_GetChild( file.menu, "BtnListReverse"), UIE_CHANGE, OnFiltersChange ) + AddButtonEventHandler( Hud_GetChild( file.menu, "BtnFiltersClear"), UIE_CLICK, OnBtnFiltersClear_Activate ) + + AddButtonEventHandler( Hud_GetChild( file.menu, "HideCVButton"), UIE_CHANGE, OnHideConVarsChange ) + + // Footers AddMenuFooterOption( file.menu, BUTTON_B, "#B_BUTTON_BACK", "#BACK" ) AddMenuFooterOption( file.menu, @@ -74,37 +120,25 @@ void function InitModMenu() "#AUTHENTICATION_AGREEMENT", OnAuthenticationAgreementButtonPressed ) - - foreach ( var button in GetElementsByClassname( file.menu, "ModButton" ) ) - { - AddButtonEventHandler( button, UIE_GET_FOCUS, OnModMenuButtonFocused ) - AddButtonEventHandler( button, UIE_CLICK, OnModMenuButtonPressed ) - } - - AddButtonEventHandler( Hud_GetChild( file.menu, "SwtBtnShowFilter"), UIE_CHANGE, OnFiltersChange ) - AddButtonEventHandler( Hud_GetChild( file.menu, "BtnModsSearch"), UIE_CHANGE, OnFiltersChange ) - - AddButtonEventHandler( Hud_GetChild( file.menu, "BtnModListUpArrow"), UIE_CLICK, OnUpArrowSelected ) - AddButtonEventHandler( Hud_GetChild( file.menu, "BtnModListDownArrow"), UIE_CLICK, OnDownArrowSelected ) - - AddButtonEventHandler( Hud_GetChild( file.menu, "BtnFiltersClear"), UIE_CLICK, OnBtnFiltersClear_Activate ) - + // Nuke weird rui on filter switch RuiSetString( Hud_GetRui( Hud_GetChild( file.menu, "SwtBtnShowFilter")), "buttonText", "") + RuiSetString( Hud_GetRui( Hud_GetChild( file.menu, "HideCVButton")), "buttonText", "") + RuiSetString( Hud_GetRui( Hud_GetChild( file.menu, "BtnListReverse")), "buttonText", "") } +// EVENTS + void function OnModMenuOpened() { - file.shouldReloadModsOnEnd = false - file.scrollOffset = 0 - - RegisterButtonPressedCallback(MOUSE_WHEEL_UP , OnScrollUp) - RegisterButtonPressedCallback(MOUSE_WHEEL_DOWN , OnScrollDown) + file.enabledMods = GetEnabledModsArray() // used to check if mods should be reloaded - Hud_SetText( Hud_GetChild( file.menu, "Title" ), "#MENU_TITLE_MODS" ) + UpdateList() + UpdateListSliderHeight() + UpdateListSliderPosition() - - OnFiltersChange(0) + RegisterButtonPressedCallback(MOUSE_WHEEL_UP , OnScrollUp) + RegisterButtonPressedCallback(MOUSE_WHEEL_DOWN , OnScrollDown) } void function OnModMenuClosed() @@ -115,120 +149,118 @@ void function OnModMenuClosed() DeregisterButtonPressedCallback(MOUSE_WHEEL_DOWN , OnScrollDown) } catch ( ex ) {} - - if ( file.shouldReloadModsOnEnd ) - ReloadMods() -} - -void function OnFiltersChange( var n ) -{ - file.scrollOffset = 0 - - HideAllButtons() - - RefreshModsArray() - - UpdateList() - - UpdateListSliderHeight() -} -void function RefreshModsArray() -{ - string searchTerm = Hud_GetUTF8Text( Hud_GetChild( file.menu, "BtnModsSearch" ) ).tolower() - - file.modsArrayFiltered.clear() - - - bool useSearch = searchTerm != "" - - - array modNames = NSGetModNames() - int modCount = modNames.len() - - foreach ( int index_, mod in modNames ) { - modStruct tempMod - tempMod.modIndex = index_ - tempMod.modName = mod - - int filter = GetConVarInt( "filter_mods" ) - bool enabled = NSIsModEnabled( tempMod.modName ) - - bool containsTerm = tempMod.modName.tolower().find(searchTerm) != null - - if ( filter == filterShow.ALL && (useSearch == true ? containsTerm : true ) ) - { - file.modsArrayFiltered.append( tempMod ) - } - else if ( filter == filterShow.ONLY_ENABLED && enabled && (useSearch == true ? containsTerm : true )) - { - file.modsArrayFiltered.append( tempMod ) - } - else if ( filter == filterShow.ONLY_DISABLED && !enabled && (useSearch == true ? containsTerm : true )) + array current = GetEnabledModsArray() + bool reload + foreach ( string mod in current ) + { + if ( file.enabledMods.find(mod) == -1 ) { - file.modsArrayFiltered.append( tempMod ) + reload = true + break } } + if ( current.len() != file.enabledMods.len() || reload ) // Only reload if we have to + ReloadMods() } -void function HideAllButtons() +void function OnModButtonFocused( var button ) { - array buttons = GetElementsByClassname( file.menu, "ModButton" ) - - // disable all buttons, we'll enable the ones we need later - foreach ( var button in buttons ) + file.currentButton = button + file.lastMod = file.mods[ int ( Hud_GetScriptID( Hud_GetParent( button ) ) ) + file.scrollOffset - 1 ].mod + string modName = file.lastMod.name + var rui = Hud_GetRui( Hud_GetChild( file.menu, "LabelDetails" ) ) + + RuiSetGameTime( rui, "startTime", -99999.99 ) // make sure it skips the whole animation for showing this + RuiSetString( rui, "headerText", modName ) + RuiSetString( rui, "messageText", FormatModDescription( modName ) ) + + // Add a button to open the link with if required + string link = NSGetModDownloadLinkByModName( modName ) + var linkButton = Hud_GetChild( file.menu, "ModPageButton" ) + if ( link.len() ) { - Hud_SetEnabled( button, false ) - Hud_SetVisible( button, false ) + Hud_SetEnabled( linkButton, true ) + Hud_SetVisible( linkButton, true ) + Hud_SetText( linkButton, link ) } + else + { + Hud_SetEnabled( linkButton, false ) + Hud_SetVisible( linkButton, false ) + } + + SetControlBarColor( modName ) + + bool required = NSIsModRequiredOnClient( modName ) + Hud_SetVisible( Hud_GetChild( file.menu, "WarningLegendLabel" ), required ) + Hud_SetVisible( Hud_GetChild( file.menu, "WarningLegendImage" ), required ) } -void function UpdateList() +void function OnModButtonPressed( var button ) { - array buttons = GetElementsByClassname( file.menu, "ModButton" ) - - - int j = file.modsArrayFiltered.len() > 17 ? 17 : file.modsArrayFiltered.len() - - for ( int i = 0; i < j; i++ ) + string modName = file.mods[ int ( Hud_GetScriptID( Hud_GetParent( button ) ) ) + file.scrollOffset - 1 ].mod.name + if ( StaticFind( modName ) && NSIsModEnabled( modName ) ) + CoreModToggleDialog( modName ) + else { - Hud_SetEnabled( buttons[ i ], true ) - Hud_SetVisible( buttons[ i ], true ) - - SetModMenuNameText( buttons[ i ] ) + NSSetModEnabled( modName, !NSIsModEnabled( modName ) ) + var panel = file.panels[ int ( Hud_GetScriptID( Hud_GetParent( button ) ) ) - 1 ] + SetControlBoxColor( Hud_GetChild( panel, "ControlBox" ), modName ) + SetControlBarColor( modName ) + SetModEnabledHelperImageAsset( Hud_GetChild( panel, "EnabledImage" ), modName ) + RefreshMods() } } -void function SetModMenuNameText( var button ) +void function OnReloadModsButtonPressed( var button ) { - modStruct mod = file.modsArrayFiltered[ int ( Hud_GetScriptID( button ) ) + file.scrollOffset ] + ReloadMods() +} - // should be localisation at some point - if ( NSIsModEnabled( mod.modName ) ) - SetButtonRuiText( button, mod.modName + " v" + NSGetModVersionByModName( mod.modName ) ) - else - SetButtonRuiText( button, mod.modName + " (DISABLED)" ) +void function OnAuthenticationAgreementButtonPressed( var button ) +{ + NorthstarMasterServerAuthDialog() } -void function OnModMenuButtonPressed( var button ) +void function OnModLinkButtonPressed( var button ) { - string modName = file.modsArrayFiltered[ int ( Hud_GetScriptID( button ) ) + file.scrollOffset ].modName - if ( ( modName == "Northstar.Client" || modName == "Northstar.Coop" || modName == "Northstar.CustomServers") && NSIsModEnabled( modName ) ) - { - file.currentMod = modName - file.currentButton = button - CoreModToggleDialog( modName ) - } - else - { - NSSetModEnabled( modName, !NSIsModEnabled( modName ) ) + string modName = file.mods[ int ( Hud_GetScriptID( Hud_GetParent( file.currentButton ) ) ) + file.scrollOffset - 1 ].mod.name + string link = NSGetModDownloadLinkByModName( modName ) + if ( link.find("http://") != 0 && link.find("https://") != 0 ) + link = "http://" + link // links without the http or https protocol get opened in the internal browser + LaunchExternalWebBrowser( link, WEBBROWSER_FLAG_FORCEEXTERNAL ) +} + +void function OnFiltersChange( var n ) +{ + file.scrollOffset = 0 - SetModMenuNameText( button ) + UpdateList() + UpdateListSliderHeight() + UpdateListSliderPosition() +} - file.shouldReloadModsOnEnd = true - } +void function OnBtnFiltersClear_Activate( var button ) +{ + Hud_SetText( Hud_GetChild( file.menu, "BtnModsSearch" ), "" ) + + SetConVarInt( "filter_mods", 0 ) + + OnFiltersChange( null ) +} + +void function OnHideConVarsChange( var n ) +{ + string modName = file.lastMod.name + if ( modName == "" ) + return + var rui = Hud_GetRui( Hud_GetChild( file.menu, "LabelDetails" ) ) + RuiSetString( rui, "messageText", FormatModDescription( modName ) ) } +// LIST LOGIC + void function CoreModToggleDialog( string mod ) { DialogData dialogData @@ -247,46 +279,235 @@ void function CoreModToggleDialog( string mod ) void function DisableMod() { - NSSetModEnabled( file.currentMod, false ) + string modName = file.mods[ int ( Hud_GetScriptID( Hud_GetParent( file.currentButton ) ) ) + file.scrollOffset - 1 ].mod.name + NSSetModEnabled( modName, false ) - SetModMenuNameText( file.currentButton ) + var panel = file.panels[ int ( Hud_GetScriptID( Hud_GetParent( file.currentButton ) ) ) - 1] + SetControlBoxColor( Hud_GetChild( panel, "ControlBox" ), modName ) + SetControlBarColor( modName ) + SetModEnabledHelperImageAsset( Hud_GetChild( panel, "EnabledImage" ), modName ) - file.shouldReloadModsOnEnd = true + RefreshMods() } -void function OnModMenuButtonFocused( var button ) +array function GetEnabledModsArray() { - string modName = file.modsArrayFiltered[ int ( Hud_GetScriptID( button ) ) + file.scrollOffset ].modName + array enabledMods + foreach ( string mod in NSGetModNames() ) + { + if ( NSIsModEnabled( mod ) ) + enabledMods.append( mod ) + } + return enabledMods +} - var rui = Hud_GetRui( Hud_GetChild( file.menu, "LabelDetails" ) ) - - RuiSetGameTime( rui, "startTime", -99999.99 ) // make sure it skips the whole animation for showing this - RuiSetString( rui, "headerText", modName ) - RuiSetString( rui, "messageText", FormatModDescription( modName ) ) +void function HideAllPanels() +{ + foreach ( var panel in file.panels ) + { + Hud_SetEnabled( panel, false ) + Hud_SetVisible( panel, false ) + } +} + +void function UpdateList() +{ + HideAllPanels() + RefreshMods() + DisplayModPanels() +} + +void function RefreshMods() +{ + array modNames = NSGetModNames() + file.mods.clear() + + bool reverse = GetConVarBool( "modlist_reverse" ) + + int lastLoadPriority = reverse ? NSGetModLoadPriority( modNames[ modNames.len() - 1 ] ) + 1 : -1 + string searchTerm = Hud_GetUTF8Text( Hud_GetChild( file.menu, "BtnModsSearch" ) ).tolower() + + for ( int i = reverse ? modNames.len() - 1 : 0; + reverse ? ( i >= 0 ) : ( i < modNames.len() ); + i += ( reverse ? -1 : 1) ) + { + string mod = modNames[i] + + if ( searchTerm.len() && mod.tolower().find( searchTerm ) == null ) + continue + + bool enabled = NSIsModEnabled( mod ) + bool required = NSIsModRequiredOnClient( mod ) + switch ( GetConVarInt( "filter_mods" ) ) + { + case filterShow.ONLY_ENABLED: + if ( !enabled ) + continue + break + case filterShow.ONLY_DISABLED: + if ( enabled ) + continue + break + case filterShow.ONLY_REQUIRED: + if ( !required ) + continue + break + case filterShow.ONLY_NOT_REQUIRED: + if( required ) + continue + break + } + + int pr = NSGetModLoadPriority( mod ) + + if ( reverse ? pr < lastLoadPriority : pr > lastLoadPriority ) + { + modData m + m.name = pr.tostring() + + panelContent c + c.mod = m + c.isHeader = true + file.mods.append( c ) + lastLoadPriority = pr + } + + modData m + m.name = mod + m.version = NSGetModVersionByModName( mod ) + m.link = NSGetModDownloadLinkByModName( mod ) + m.loadPriority = NSGetModLoadPriority( mod ) + m.enabled = enabled + m.conVars = NSGetModConvarsByModName( mod ) + + panelContent c + c.mod = m + + file.mods.append( c ) + } +} + +void function DisplayModPanels() +{ + foreach ( int i, var panel in file.panels) + { + if ( i >= file.mods.len() ) // don't try to show more panels than needed + break + + panelContent c = file.mods[ file.scrollOffset + i ] + modData mod = c.mod + var btn = Hud_GetChild( panel, "BtnMod" ) + var headerLabel = Hud_GetChild( panel, "Header" ) + var box = Hud_GetChild( panel, "ControlBox" ) + var line = Hud_GetChild( panel, "BottomLine" ) + var warning = Hud_GetChild( panel, "WarningImage" ) + var enabledImage = Hud_GetChild( panel, "EnabledImage" ) + + if ( c.isHeader ) + { + Hud_SetEnabled( btn, false ) + Hud_SetVisible( btn, false ) + + Hud_SetText( headerLabel, "Load Priority: " + mod.name ) + Hud_SetVisible( headerLabel, true ) + + Hud_SetVisible( box, false ) + Hud_SetVisible( line, true ) + + Hud_SetVisible( warning, false ) + Hud_SetVisible( enabledImage, false ) + } + else + { + Hud_SetEnabled( btn, true ) + Hud_SetVisible( btn, true ) + Hud_SetText( btn, mod.name ) + + Hud_SetVisible( headerLabel, false ) + + SetControlBoxColor( box, mod.name ) + Hud_SetVisible( box, true ) + Hud_SetVisible( line, false ) + + Hud_SetVisible( warning, NSIsModRequiredOnClient( c.mod.name ) ) + + SetModEnabledHelperImageAsset( enabledImage, c.mod.name ) + } + Hud_SetVisible( panel, true ) + } +} + +void function SetModEnabledHelperImageAsset( var panel, string modName ) +{ + if( NSIsModEnabled( modName ) ) + RuiSetImage( Hud_GetRui( panel ), "basicImage", $"rui/menu/common/merit_state_success" ) + else + RuiSetImage( Hud_GetRui( panel ), "basicImage", $"rui/menu/common/merit_state_failure" ) + RuiSetFloat3(Hud_GetRui( panel ), "basicImageColor", GetControlColorForMod( modName ) ) + Hud_SetVisible( panel, true ) +} + +void function SetControlBoxColor( var box, string modName ) +{ + var rui = Hud_GetRui( box ) + // if ( NSIsModEnabled( modName ) ) + // RuiSetFloat3(rui, "basicImageColor", <0,1,0>) + // else + // RuiSetFloat3(rui, "basicImageColor", <1,0,0>) + RuiSetFloat3(rui, "basicImageColor", GetControlColorForMod( modName ) ) +} + +void function SetControlBarColor( string modName ) +{ + var bar_element = Hud_GetChild( file.menu, "ModEnabledBar" ) + var bar = Hud_GetRui( bar_element ) + // if ( NSIsModEnabled( modName ) ) + // RuiSetFloat3(bar, "basicImageColor", <0,1,0>) + // else + // RuiSetFloat3(bar, "basicImageColor", <1,0,0>) + RuiSetFloat3(bar, "basicImageColor", GetControlColorForMod( modName ) ) + Hud_SetVisible( bar_element, true ) +} + +vector function GetControlColorForMod( string modName ) +{ + if ( NSIsModEnabled( modName ) ) + switch ( GetConVarInt( "colorblind_mode" ) ) + { + case 1: + case 2: + case 3: + default: + return <0,1,0> + } + else + switch ( GetConVarInt( "colorblind_mode" ) ) + { + case 1: + case 2: + return <0.29,0,0.57> + case 3: + default: + return <1,0,0> + } + unreachable } string function FormatModDescription( string modName ) { string ret // version - ret += format( "Version %s\n", NSGetModVersionByModName( modName ) ) - - // download link - string modLink = NSGetModDownloadLinkByModName( modName ) - if ( modLink.len() != 0 ) - ret += format( "Download link: \"%s\"\n", modLink ) - + ret += format( "Version %s\n", NSGetModVersionByModName( modName ) ) + // load priority ret += format( "Load Priority: %i\n", NSGetModLoadPriority( modName ) ) - - // todo: add ClientRequired here - + // convars array modCvars = NSGetModConvarsByModName( modName ) - if ( modCvars.len() != 0 ) + if ( modCvars.len() != 0 && GetConVarBool( "modlist_show_convars" ) ) { ret += "ConVars: " - + for ( int i = 0; i < modCvars.len(); i++ ) { if ( i != modCvars.len() - 1 ) @@ -294,76 +515,33 @@ string function FormatModDescription( string modName ) else ret += format( "\"%s\"", modCvars[ i ] ) } - + ret += "\n" } - + // description ret += format( "\n%s\n", NSGetModDescriptionByModName( modName ) ) - - return ret -} - -void function OnReloadModsButtonPressed( var button ) -{ - ReloadMods() -} - -void function ReloadMods() -{ - NSReloadMods() - ClientCommand( "reload_localization" ) - ClientCommand( "loadPlaylists" ) - - bool svCheatsOriginal = GetConVarBool( "sv_cheats" ) - SetConVarBool( "sv_cheats", true ) - ClientCommand( "weapon_reparse" ) // weapon_reparse only works if a server is running and sv_cheats is 1, gotta figure this out eventually - SetConVarBool( "sv_cheats", svCheatsOriginal ) - - // note: the logic for this seems really odd, unsure why it doesn't seem to update, since the same code seems to get run irregardless of whether we've read weapon data before - ClientCommand( "uiscript_reset" ) -} -void function OnAuthenticationAgreementButtonPressed( var button ) -{ - NorthstarMasterServerAuthDialog() + return ret } +//////////// +// SLIDER +//////////// -void function OnBtnFiltersClear_Activate( var button ) -{ - Hud_SetText( Hud_GetChild( file.menu, "BtnModsSearch" ), "" ) - - SetConVarInt( "filter_mods", 0 ) - - OnFiltersChange(0) -} - -////////////////////////////// -// Slider -////////////////////////////// void function UpdateMouseDeltaBuffer(int x, int y) { - mouseDeltaBuffer.deltaX += x - mouseDeltaBuffer.deltaY += y + mouseDeltaBuffer.deltaX = x + mouseDeltaBuffer.deltaY = y SliderBarUpdate() } -void function FlushMouseDeltaBuffer() -{ - mouseDeltaBuffer.deltaX = 0 - mouseDeltaBuffer.deltaY = 0 -} - void function SliderBarUpdate() { - if ( file.modsArrayFiltered.len() <= 17 ) - { - FlushMouseDeltaBuffer() + if ( file.mods.len() <= 15 ) return - } var sliderButton = Hud_GetChild( file.menu , "BtnModListSlider" ) var sliderPanel = Hud_GetChild( file.menu , "BtnModListSliderPanel" ) @@ -376,12 +554,11 @@ void function SliderBarUpdate() float maxYPos = minYPos - (maxHeight - Hud_GetHeight( sliderPanel )) float useableSpace = (maxHeight - Hud_GetHeight( sliderPanel )) - float jump = minYPos - (useableSpace / ( float( file.modsArrayFiltered.len()))) + float jump = minYPos - (useableSpace / ( float( file.mods.len()))) // got local from official respaw scripts, without untyped throws an error local pos = Hud_GetPos(sliderButton)[1] local newPos = pos - mouseDeltaBuffer.deltaY - FlushMouseDeltaBuffer() if ( newPos < maxYPos ) newPos = maxYPos if ( newPos > minYPos ) newPos = minYPos @@ -390,69 +567,65 @@ void function SliderBarUpdate() Hud_SetPos( sliderPanel , 2, newPos ) Hud_SetPos( movementCapture , 2, newPos ) - file.scrollOffset = -int( ( (newPos - minYPos) / useableSpace ) * ( file.modsArrayFiltered.len() - BUTTONS_PER_PAGE) ) + file.scrollOffset = -int( ( (newPos - minYPos) / useableSpace ) * ( file.mods.len() - PANELS_LEN) ) UpdateList() } -void function UpdateListSliderHeight() +void function UpdateListSliderPosition() { var sliderButton = Hud_GetChild( file.menu , "BtnModListSlider" ) var sliderPanel = Hud_GetChild( file.menu , "BtnModListSliderPanel" ) var movementCapture = Hud_GetChild( file.menu , "MouseMovementCapture" ) - - float mods = float ( file.modsArrayFiltered.len() ) - float maxHeight = 604.0 * (GetScreenSize()[1] / 1080.0) - float minHeight = 80.0 * (GetScreenSize()[1] / 1080.0) + float mods = float ( file.mods.len() ) - float height = maxHeight * ( float( BUTTONS_PER_PAGE ) / mods ) + float minYPos = -40.0 * (GetScreenSize()[1] / 1080.0) + float useableSpace = (604.0 * (GetScreenSize()[1] / 1080.0) - Hud_GetHeight( sliderPanel )) - if ( height > maxHeight ) height = maxHeight - if ( height < minHeight ) height = minHeight + float jump = minYPos - (useableSpace / ( mods - float( PANELS_LEN ) ) * file.scrollOffset) - Hud_SetHeight( sliderButton , height ) - Hud_SetHeight( sliderPanel , height ) - Hud_SetHeight( movementCapture , height ) -} + if ( jump > minYPos ) jump = minYPos + Hud_SetPos( sliderButton , 2, jump ) + Hud_SetPos( sliderPanel , 2, jump ) + Hud_SetPos( movementCapture , 2, jump ) +} -void function UpdateListSliderPosition() +void function UpdateListSliderHeight() { var sliderButton = Hud_GetChild( file.menu , "BtnModListSlider" ) var sliderPanel = Hud_GetChild( file.menu , "BtnModListSliderPanel" ) var movementCapture = Hud_GetChild( file.menu , "MouseMovementCapture" ) - - float mods = float ( file.modsArrayFiltered.len() ) - float minYPos = -40.0 * (GetScreenSize()[1] / 1080.0) - float useableSpace = (604.0 * (GetScreenSize()[1] / 1080.0) - Hud_GetHeight( sliderPanel )) + float mods = float ( file.mods.len() ) - float jump = minYPos - (useableSpace / ( mods - float( BUTTONS_PER_PAGE ) ) * file.scrollOffset) + float maxHeight = 604.0 * (GetScreenSize()[1] / 1080.0) + float minHeight = 80.0 * (GetScreenSize()[1] / 1080.0) - //jump = jump * (GetScreenSize()[1] / 1080.0) + float height = maxHeight * ( float( PANELS_LEN ) / mods ) - if ( jump > minYPos ) jump = minYPos + if ( height > maxHeight ) height = maxHeight + if ( height < minHeight ) height = minHeight - Hud_SetPos( sliderButton , 2, jump ) - Hud_SetPos( sliderPanel , 2, jump ) - Hud_SetPos( movementCapture , 2, jump ) + Hud_SetHeight( sliderButton , height ) + Hud_SetHeight( sliderPanel , height ) + Hud_SetHeight( movementCapture , height ) } -void function OnDownArrowSelected( var button ) +void function OnScrollDown( var button ) { - if ( file.modsArrayFiltered.len() <= BUTTONS_PER_PAGE ) return - file.scrollOffset += 1 - if (file.scrollOffset + BUTTONS_PER_PAGE > file.modsArrayFiltered.len()) { - file.scrollOffset = file.modsArrayFiltered.len() - BUTTONS_PER_PAGE + if ( file.mods.len() <= PANELS_LEN ) return + file.scrollOffset += 5 + if (file.scrollOffset + PANELS_LEN > file.mods.len()) { + file.scrollOffset = file.mods.len() - PANELS_LEN } UpdateList() UpdateListSliderPosition() } - -void function OnUpArrowSelected( var button ) +void function OnScrollUp( var button ) { - file.scrollOffset -= 1 + file.scrollOffset -= 5 if (file.scrollOffset < 0) { file.scrollOffset = 0 } @@ -460,23 +633,49 @@ void function OnUpArrowSelected( var button ) UpdateListSliderPosition() } -void function OnScrollDown( var button ) +void function OnDownArrowSelected( var button ) { - if ( file.modsArrayFiltered.len() <= BUTTONS_PER_PAGE ) return - file.scrollOffset += 5 - if (file.scrollOffset + BUTTONS_PER_PAGE > file.modsArrayFiltered.len()) { - file.scrollOffset = file.modsArrayFiltered.len() - BUTTONS_PER_PAGE + if ( file.mods.len() <= PANELS_LEN ) return + file.scrollOffset += 1 + if (file.scrollOffset + PANELS_LEN > file.mods.len()) { + file.scrollOffset = file.mods.len() - PANELS_LEN } UpdateList() UpdateListSliderPosition() } -void function OnScrollUp( var button ) +void function OnUpArrowSelected( var button ) { - file.scrollOffset -= 5 + file.scrollOffset -= 1 if (file.scrollOffset < 0) { file.scrollOffset = 0 } UpdateList() UpdateListSliderPosition() +} + +// + +// Static arrays don't have the .find method for some reason +bool function StaticFind( string mod ) +{ + foreach( string smod in CORE_MODS ) + if ( mod == smod ) + return true + return false +} + +void function ReloadMods() +{ + NSReloadMods() + ClientCommand( "reload_localization" ) + ClientCommand( "loadPlaylists" ) + + bool svCheatsOriginal = GetConVarBool( "sv_cheats" ) + SetConVarBool( "sv_cheats", true ) + ClientCommand( "weapon_reparse" ) // weapon_reparse only works if a server is running and sv_cheats is 1, gotta figure this out eventually + SetConVarBool( "sv_cheats", svCheatsOriginal ) + + // note: the logic for this seems really odd, unsure why it doesn't seem to update, since the same code seems to get run irregardless of whether we've read weapon data before + ClientCommand( "uiscript_reset" ) } \ No newline at end of file -- cgit v1.2.3