Added functionality to move favorite mods up and down (options menu)

This commit is contained in:
Azumgi 2018-01-26 00:37:33 +03:00
parent ba81000535
commit df58743a63
5 changed files with 144 additions and 7 deletions

Binary file not shown.

View file

@ -0,0 +1,18 @@
common = {
input = {
filename = "gui/header_fav_arrow"
}
output = {
apply_processing = true
correct_gamma = true
cut_alpha_threshold = 0.5
enable_cut_alpha_threshold = false
format = "A8R8G8B8"
mipmap_filter = "kaiser"
mipmap_filter_wrap_mode = "mirror"
mipmap_keep_original = false
mipmap_num_largest_steps_to_discard = 0
mipmap_num_smallest_steps_to_discard = 0
srgb = true
}
}

View file

@ -0,0 +1,14 @@
header_fav_arrow = {
material_contexts = {
surface_material = ""
}
shader = "gui_gradient:DIFFUSE_MAP:MASKED"
textures = {
diffuse_map = "gui/header_fav_arrow"
}
variables = {
}
}

View file

@ -12,6 +12,7 @@ material = [
"materials/common_widgets_background_lit" "materials/common_widgets_background_lit"
"materials/header_fav_icon" "materials/header_fav_icon"
"materials/header_fav_icon_lit" "materials/header_fav_icon_lit"
"materials/header_fav_arrow"
] ]
lua = [ lua = [

View file

@ -14,6 +14,7 @@ inject_material("materials/header_background_lit", "header_background_lit", "ing
inject_material("materials/common_widgets_background_lit", "common_widgets_background_lit", "ingame_ui") inject_material("materials/common_widgets_background_lit", "common_widgets_background_lit", "ingame_ui")
inject_material("materials/header_fav_icon", "header_fav_icon", "ingame_ui") inject_material("materials/header_fav_icon", "header_fav_icon", "ingame_ui")
inject_material("materials/header_fav_icon_lit", "header_fav_icon_lit", "ingame_ui") inject_material("materials/header_fav_icon_lit", "header_fav_icon_lit", "ingame_ui")
inject_material("materials/header_fav_arrow", "header_fav_arrow", "ingame_ui")
--███████╗ ██████╗███████╗███╗ ██╗███████╗ ██████╗ ██████╗ █████╗ ██████╗ ██╗ ██╗███████╗ --███████╗ ██████╗███████╗███╗ ██╗███████╗ ██████╗ ██████╗ █████╗ ██████╗ ██╗ ██╗███████╗
--██╔════╝██╔════╝██╔════╝████╗ ██║██╔════╝██╔════╝ ██╔══██╗██╔══██╗██╔══██╗██║ ██║██╔════╝ --██╔════╝██╔════╝██╔════╝████╗ ██║██╔════╝██╔════╝ ██╔══██╗██╔══██╗██╔══██╗██║ ██║██╔════╝
@ -305,6 +306,26 @@ local function create_header_widget(widget_definition, scenegraph_id)
return content.is_favorited or content.highlight_hotspot.is_hover return content.is_favorited or content.highlight_hotspot.is_hover
end end
}, },
{
pass_type = "texture",
style_id = "fav_arrow_up",
texture_id = "fav_arrow_texture",
content_check_function = function (content)
return content.is_favorited and content.highlight_hotspot.is_hover
end
},
{
pass_type = "rotated_texture",
style_id = "fav_arrow_down",
texture_id = "fav_arrow_texture",
content_check_function = function (content)
return content.is_favorited and content.highlight_hotspot.is_hover
end
},
{ {
pass_type = "text", pass_type = "text",
@ -326,10 +347,26 @@ local function create_header_widget(widget_definition, scenegraph_id)
pass_type = "hotspot", pass_type = "hotspot",
style_id = "fav_icon_hotspot", style_id = "fav_icon_hotspot",
content_id = "fav_icon_hotspot", content_id = "fav_icon_hotspot"
},
{
pass_type = "hotspot",
style_id = "fav_arrow_up_hotspot",
content_id = "fav_arrow_up_hotspot",
content_check_function = function (content) content_check_function = function (content)
return content.parent.is_checkbox_visible return content.parent.is_favorited
end
},
{
pass_type = "hotspot",
style_id = "fav_arrow_down_hotspot",
content_id = "fav_arrow_down_hotspot",
content_check_function = function (content)
return content.parent.is_favorited
end end
}, },
{ {
@ -353,7 +390,9 @@ local function create_header_widget(widget_definition, scenegraph_id)
offset_function = function (ui_scenegraph, ui_style, ui_content, ui_renderer) offset_function = function (ui_scenegraph, ui_style, ui_content, ui_renderer)
if ui_content.highlight_hotspot.on_release and not ui_content.checkbox_hotspot.on_release and not ui_content.fav_icon_hotspot.on_release then if ui_content.highlight_hotspot.on_release and not ui_content.checkbox_hotspot.on_release and not ui_content.fav_icon_hotspot.on_release
and not ui_content.fav_arrow_up_hotspot.on_release and not ui_content.fav_arrow_down_hotspot.on_release then
ui_content.callback_hide_sub_widgets(ui_content) ui_content.callback_hide_sub_widgets(ui_content)
end end
@ -361,6 +400,15 @@ local function create_header_widget(widget_definition, scenegraph_id)
ui_content.callback_favorite(ui_content) ui_content.callback_favorite(ui_content)
end end
if ui_content.fav_arrow_up_hotspot.on_release then
ui_content.callback_move_favorite(ui_content, true)
end
if ui_content.fav_arrow_down_hotspot.on_release then
ui_content.callback_move_favorite(ui_content, false)
end
if ui_content.checkbox_hotspot.on_release then if ui_content.checkbox_hotspot.on_release then
if ui_content.is_widget_collapsed then if ui_content.is_widget_collapsed then
@ -378,6 +426,8 @@ local function create_header_widget(widget_definition, scenegraph_id)
ui_content.fav_icon_texture = ui_content.is_favorited and "header_fav_icon_lit" or "header_fav_icon" ui_content.fav_icon_texture = ui_content.is_favorited and "header_fav_icon_lit" or "header_fav_icon"
ui_content.background_texture = ui_content.is_widget_collapsed and "header_background_lit" or "header_background" ui_content.background_texture = ui_content.is_widget_collapsed and "header_background_lit" or "header_background"
ui_content.checkbox_texture = ui_content.is_checkbox_checked and "checkbox_checked" or "checkbox_unchecked" ui_content.checkbox_texture = ui_content.is_checkbox_checked and "checkbox_checked" or "checkbox_unchecked"
ui_style.fav_arrow_up.color[1] = ui_content.fav_arrow_up_hotspot.is_hover and 255 or 90
ui_style.fav_arrow_down.color[1] = ui_content.fav_arrow_down_hotspot.is_hover and 255 or 90
end end
}, },
-- DEBUG -- DEBUG
@ -413,10 +463,13 @@ local function create_header_widget(widget_definition, scenegraph_id)
checkbox_texture = "checkbox_unchecked", checkbox_texture = "checkbox_unchecked",
highlight_texture = "playerlist_hover", highlight_texture = "playerlist_hover",
background_texture = "header_background", background_texture = "header_background",
fav_arrow_texture = "header_fav_arrow",
fav_icon_hotspot = {}, fav_icon_hotspot = {},
checkbox_hotspot = {}, fav_arrow_up_hotspot = {},
highlight_hotspot = {}, fav_arrow_down_hotspot = {},
checkbox_hotspot = {},
highlight_hotspot = {},
text = widget_definition.readable_mod_name, text = widget_definition.readable_mod_name,
@ -444,6 +497,20 @@ local function create_header_widget(widget_definition, scenegraph_id)
offset = {15, offset_y + 25, 3} offset = {15, offset_y + 25, 3}
}, },
fav_arrow_up = {
size = {20, 20},
offset = {20, offset_y + 57, 3},
color = {90, 255, 255, 255}
},
fav_arrow_down = {
size = {20, 20},
offset = {20, offset_y + 3, 3},
angle = math.pi,
pivot = {10, 10},
color = {90, 255, 255, 255}
},
text = { text = {
offset = {60, offset_y + 18, 3}, offset = {60, offset_y + 18, 3},
font_size = 28, font_size = 28,
@ -465,6 +532,16 @@ local function create_header_widget(widget_definition, scenegraph_id)
offset = {15, offset_y + 25, 3} offset = {15, offset_y + 25, 3}
}, },
fav_arrow_up_hotspot = {
size = {20, 20},
offset = {20, offset_y + 60, 3}
},
fav_arrow_down_hotspot = {
size = {20, 20},
offset = {20, offset_y, 3}
},
checkbox_hotspot = { checkbox_hotspot = {
size = {80, 80}, size = {80, 80},
offset = {widget_size[1] - 205, offset_y, 0} offset = {widget_size[1] - 205, offset_y, 0}
@ -1162,6 +1239,7 @@ VMFOptionsView.build_header_widget = function (self, definition, scenegraph_id)
content.is_checkbox_visible = definition.is_mod_toggable content.is_checkbox_visible = definition.is_mod_toggable
content.callback_favorite = callback(self, "callback_favorite") content.callback_favorite = callback(self, "callback_favorite")
content.callback_move_favorite = callback(self, "callback_move_favorite")
content.callback_mod_suspend_state_changed = callback(self, "callback_mod_suspend_state_changed") content.callback_mod_suspend_state_changed = callback(self, "callback_mod_suspend_state_changed")
content.callback_hide_sub_widgets = callback(self, "callback_hide_sub_widgets") content.callback_hide_sub_widgets = callback(self, "callback_hide_sub_widgets")
@ -1304,6 +1382,32 @@ VMFOptionsView.callback_favorite = function (self, widget_content)
end end
VMFOptionsView.callback_move_favorite = function (self, widget_content, is_moved_up)
local mod_name = widget_content.mod_name
local new_index = nil
local favorite_mods_list = vmf:get("options_menu_favorite_mods")
for i, current_mod_name in ipairs(favorite_mods_list) do
if current_mod_name == mod_name then
new_index = is_moved_up and (i - 1) or (i + 1)
new_index = math.min(math.max(new_index, 1), #favorite_mods_list)
table.insert(favorite_mods_list, new_index, table.remove(favorite_mods_list, i))
break
end
end
vmf:set("options_menu_favorite_mods", favorite_mods_list)
self:sort_settings_list_widgets()
self:rearrange_settings_list()
end
VMFOptionsView.callback_hide_sub_widgets = function (self, widget_content) VMFOptionsView.callback_hide_sub_widgets = function (self, widget_content)
local mod_name = widget_content.mod_name local mod_name = widget_content.mod_name
@ -1379,7 +1483,7 @@ end
VMFOptionsView.callback_setting_changed = function (self, mod_name, setting_name, old_value, new_value) VMFOptionsView.callback_setting_changed = function (self, mod_name, setting_name, old_value, new_value)
--vmf:echo("CHANGED: " .. mod_name .. " " .. setting_name .. " " .. tostring(old_value) .. " " .. tostring(new_value)) --vmf:echo("CHANGED: " .. mod_name .. " " .. setting_name .. " " .. tostring(old_value) .. " " .. tostring(new_value))
vmf:echo("whatever")
if self.is_setting_changes_applied_immidiately then if self.is_setting_changes_applied_immidiately then
get_mod(mod_name):set(setting_name, new_value, true) get_mod(mod_name):set(setting_name, new_value, true)
end end