mutators: gui rewrite part 1 (no checkboxes yet)

gui_mod is no longer needed, will be removed next commit
created a separate mod for mutators manager
This commit is contained in:
UnShame 2018-02-21 18:55:20 +03:00
parent a28a09f15c
commit 15b89cdd0a
10 changed files with 507 additions and 62 deletions

View file

@ -21,5 +21,4 @@ lua = [
"scripts/mods/vmf/modules/gui/*" "scripts/mods/vmf/modules/gui/*"
"scripts/mods/vmf/modules/options_menu/*" "scripts/mods/vmf/modules/options_menu/*"
"scripts/mods/vmf/modules/mutators/*" "scripts/mods/vmf/modules/mutators/*"
"scripts/mods/vmf/modules/mod_gui/*"
] ]

View file

@ -1,5 +1,5 @@
local vmf = get_mod("VMF") local manager = get_mod("vmf_mutator_manager")
local mutators = vmf.mutators local mutators = manager.mutators
local banner_level_widget = UIWidgets.create_texture_with_text_and_tooltip("title_bar", "Mutators", "map_level_setting_tooltip", "banner_level", "banner_level_text", { local banner_level_widget = UIWidgets.create_texture_with_text_and_tooltip("title_bar", "Mutators", "map_level_setting_tooltip", "banner_level", "banner_level_text", {
@ -50,7 +50,7 @@ local function create_window(map_view)
for i, mutator in ipairs(mutators) do for i, mutator in ipairs(mutators) do
local title = mutator:get_config().title or mutator:get_name() local title = mutator:get_config().title or mutator:get_name()
window:create_checkbox("checkbox_" .. mutator:get_name(), {30, 360 - 40 * (i - 1)}, {30, 30}, title, mutator:is_enabled(), function(self) window:create_checkbox("checkbox_" .. mutator:get_name(), {65, 360 - 40 * (i - 1)}, {30, 30}, title, mutator:is_enabled(), function(self)
if self.value then if self.value then
if not mutator:is_enabled() and mutator:can_be_enabled() then if not mutator:is_enabled() and mutator:can_be_enabled() then
mutator:enable() mutator:enable()
@ -85,58 +85,58 @@ local function reload_window()
end end
end end
vmf:hook("MapView.on_enter", function(func, self, ...) manager:hook("MapView.on_enter", function(func, self, ...)
func(self, ...) func(self, ...)
print("on_enter") print("on_enter")
vmf.sort_mutators() manager.sort_mutators()
vmf.disable_impossible_mutators() manager.disable_impossible_mutators()
vmf:pcall(function() create_window(self) end) manager:pcall(function() create_window(self) end)
end) end)
vmf:hook("MapView.on_level_index_changed", function(func, self, ...) manager:hook("MapView.on_level_index_changed", function(func, self, ...)
func(self, ...) func(self, ...)
print("on_level_index_changed") print("on_level_index_changed")
vmf.disable_impossible_mutators() manager.disable_impossible_mutators()
vmf:pcall(function() create_window(self) end) manager:pcall(function() create_window(self) end)
end) end)
vmf:hook("MapView.on_difficulty_index_changed", function(func, self, ...) manager:hook("MapView.on_difficulty_index_changed", function(func, self, ...)
func(self, ...) func(self, ...)
print("on_difficulty_index_changed") print("on_difficulty_index_changed")
vmf.disable_impossible_mutators() manager.disable_impossible_mutators()
vmf:pcall(function() create_window(self) end) manager:pcall(function() create_window(self) end)
end) end)
vmf:hook("MapView.set_difficulty_stepper_index", function(func, self, ...) manager:hook("MapView.set_difficulty_stepper_index", function(func, self, ...)
func(self, ...) func(self, ...)
print("set_difficulty_stepper_index") print("set_difficulty_stepper_index")
vmf.disable_impossible_mutators() manager.disable_impossible_mutators()
vmf:pcall(function() create_window(self) end) manager:pcall(function() create_window(self) end)
end) end)
vmf:hook("MapView.on_exit", function(func, self, ...) manager:hook("MapView.on_exit", function(func, self, ...)
func(self, ...) func(self, ...)
print("on_exit") print("on_exit")
vmf:pcall(function() destroy_window(self) end) manager:pcall(function() destroy_window(self) end)
window_opened = false window_opened = false
end) end)
vmf:hook("MapView.suspend", function(func, self, ...) manager:hook("MapView.suspend", function(func, self, ...)
func(self, ...) func(self, ...)
print("suspend") print("suspend")
vmf:pcall(function() destroy_window(self) end) manager:pcall(function() destroy_window(self) end)
end) end)
vmf:hook("MapView.update", function(func, self, dt, t) manager:hook("MapView.update", function(func, self, dt, t)
func(self, dt, t) func(self, dt, t)
vmf:pcall(function() update_window_visibility(self) end) manager:pcall(function() update_window_visibility(self) end)
end) end)
vmf:hook("MapView.draw", function(func, self, input_service, gamepad_active, dt) manager:hook("MapView.draw", function(func, self, input_service, gamepad_active, dt)
local ui_renderer = self.ui_renderer local ui_renderer = self.ui_renderer
local ui_scenegraph = self.ui_scenegraph local ui_scenegraph = self.ui_scenegraph
@ -157,7 +157,6 @@ vmf:hook("MapView.draw", function(func, self, input_service, gamepad_active, dt)
if window_opened or not self.settings_button_widget.content.toggled then if window_opened or not self.settings_button_widget.content.toggled then
for widget_name, widget in pairs(self.normal_settings_widgets) do for widget_name, widget in pairs(self.normal_settings_widgets) do
local skipped_widgets_keys = { local skipped_widgets_keys = {
"stepper_level",
"level_preview", "level_preview",
"level_preview_text", "level_preview_text",
"banner_level" "banner_level"
@ -167,7 +166,7 @@ vmf:hook("MapView.draw", function(func, self, input_service, gamepad_active, dt)
end end
end end
if window_opened then if window_opened then
vmf:pcall(function() UIRenderer.draw_widget(ui_renderer, banner_level) end) manager:pcall(function() UIRenderer.draw_widget(ui_renderer, banner_level) end)
end end
else else
for widget_name, widget in pairs(self.advanced_settings_widgets) do for widget_name, widget in pairs(self.advanced_settings_widgets) do

View file

@ -1,4 +1,4 @@
local vmf = get_mod("VMF") local manager = get_mod("vmf_mutator_manager")
local missions = { local missions = {
"bonus_dice_hidden_mission", "bonus_dice_hidden_mission",
@ -12,7 +12,7 @@ local num_dice_per_mission = {
grimoire_hidden_mission = 0 grimoire_hidden_mission = 0
} }
vmf:hook("GameModeManager.complete_level", function(func, self) manager:hook("GameModeManager.complete_level", function(func, self)
local num_dice = 0 local num_dice = 0
local max_dice = 7 local max_dice = 7
local mission_system = Managers.state.entity:system("mission_system") local mission_system = Managers.state.entity:system("mission_system")

View file

@ -0,0 +1,269 @@
local manager = get_mod("vmf_mutator_manager")
local mutators = manager.mutators
local definitions = manager:dofile("scripts/mods/vmf/modules/mutators/mutator_gui_definitions")
local PER_PAGE = 5
local mutators_view = {
initialized = false,
active = false,
was_active = false,
map_view = nil,
current_page = 1,
init = function(self, map_view)
if self.initialized then return end
self.map_view = map_view
if not self.map_view then return end
-- Recreate the map_view scenegraph defs
self.map_view.scenegraph_definition = UISceneGraph.init_scenegraph(definitions.scenegraph_definition)
-- Setup custom widgets
self.widgets = {
banner_mutators = UIWidget.init(definitions.new_widgets.banner_mutators_widget),
mutators_button = UIWidget.init(definitions.new_widgets.mutators_button_widget),
}
-- Save widgets we're gonna mess with
local widgets = self.map_view.normal_settings_widget_types
self.saved_widgets = {
level_preview = widgets.adventure.level_preview,
level_preview_text = widgets.adventure.level_preview_text
}
-- Add our button to render lists
widgets.adventure.mutators_button = self.widgets.mutators_button
widgets.survival.mutators_button = self.widgets.mutators_button
self.map_view.advanced_settings_widgets.mutators_button = self.widgets.mutators_button
-- Move other buttons over
self.map_view.ui_scenegraph.settings_button.position[1] = -50
self.map_view.ui_scenegraph.lobby_button.position[1] = 150
self.map_view.ui_scenegraph.friends_button.position[1] = 50
-- Alter level select stepper's callback
self.map_view.steppers.level.callback = function(index_change)
self:on_mutators_page_change(index_change)
end
self:setup_hooks()
self.initialized = true
print("INIT")
end,
deinitialize = function(self)
if not self.initialized then return end
self:deactivate()
self.was_active = false
-- Reset the stepper callback
self.map_view.steppers.level.callback = callback(self.map_view, "on_level_index_changed")
-- Remove our button
self.map_view.normal_settings_widget_types.adventure.mutators_button = nil
self.map_view.normal_settings_widget_types.survival.mutators_button = nil
self.map_view.advanced_settings_widgets.mutators_button = nil
-- Move other buttons back
self.map_view.ui_scenegraph.settings_button.position[1] = -100
self.map_view.ui_scenegraph.lobby_button.position[1] = 100
self.map_view.ui_scenegraph.friends_button.position[1] = 0
self.saved_widgets = {}
self:reset_hooks()
self.map_view = nil
self.initialized = false
print("DEINIT")
end,
update = function(self)
if not self.initialized then
self:init()
end
if not self.initialized or not self.map_view.active then return end
local transitioning = self.map_view:transitioning()
local friends = self.map_view.friends
local friends_menu_active = friends:is_active()
local mutators_button = self.widgets.mutators_button
local mutators_button_hotspot = mutators_button.content.button_hotspot
local settings_button = self.map_view.settings_button_widget
-- Handle menu toggles
if not transitioning and not friends_menu_active then
if mutators_button_hotspot.on_release then
self.map_view:play_sound("Play_hud_select")
mutators_button.content.toggled = not mutators_button.content.toggled
if mutators_button.content.toggled then
settings_button.content.toggled = false
end
elseif settings_button.content.toggled then
mutators_button.content.toggled = false
end
end
-- Open/close mutators view
if mutators_button.content.toggled then
self:activate()
self.was_active = true
else
self:deactivate()
self.was_active = false
end
if self.active then
-- Disable the Mission banner tooltip
local widgets = self.map_view.normal_settings_widget_types
widgets.adventure.banner_level.content.tooltip_hotspot.disabled = true
widgets.survival.banner_level.content.tooltip_hotspot.disabled = true
end
end,
activate = function(self)
if not self.initialized or not self.map_view.active or self.active then return end
-- Hiding widgets
local widgets = self.map_view.normal_settings_widget_types
widgets.adventure.level_preview = nil
widgets.adventure.level_preview_text = nil
widgets.adventure.banner_mutators = self.widgets.banner_mutators
widgets.survival.level_preview = nil
widgets.survival.level_preview_text = nil
widgets.survival.banner_mutators = self.widgets.banner_mutators
-- "Mission" banner position
self.map_view.ui_scenegraph.banner_level_text.position[2] = -10000
-- Update steppers
self.map_view.steppers.level.widget.style.setting_text.offset[2] = -10000
local level_stepper_widget = self.map_view.steppers.level.widget
local num_pages = math.ceil(#mutators/PER_PAGE)
level_stepper_widget.content.left_button_hotspot.disable_button = num_pages <= 1
level_stepper_widget.content.right_button_hotspot.disable_button = num_pages <= 1
self.active = true
print("ACTIVE")
end,
deactivate = function(self)
if not self.initialized or not self.active then return end
-- Showing widgets
local widgets = self.map_view.normal_settings_widget_types
widgets.adventure.level_preview = self.saved_widgets.level_preview
widgets.adventure.level_preview_text = self.saved_widgets.level_preview
widgets.adventure.banner_mutators = nil
widgets.survival.level_preview = self.saved_widgets.level_preview
widgets.survival.level_preview_text = self.saved_widgets.level_preview
widgets.survival.banner_mutators = nil
-- "Mission" banner position
self.map_view.ui_scenegraph.banner_level_text.position[2] = 0
-- Update steppers
self.map_view.steppers.level.widget.style.setting_text.offset[2] = -120
self.map_view:update_level_stepper()
self.active = false
print("DEACTIVE")
end,
on_mutators_page_change = function(self, index_change)
if not self.initialized then return end
if self.active then
local current_index = self.current_page
local new_index = current_index + index_change
local num_pages = math.ceil(#mutators/PER_PAGE)
if new_index < 1 then
new_index = num_pages
elseif num_pages < new_index then
new_index = 1
end
self.current_page = new_index
print("TEST", tostring(new_index))
else
self.map_view:on_level_index_changed(index_change)
end
end,
setup_hooks = function(self)
-- Update the view after map_view has updated
manager:hook("MapView.update", function(func, map_view, dt, t)
func(map_view, dt, t)
manager:pcall(function() self:update(dt, t) end)
end)
-- Activate the view on enter if it was active on exit
manager:hook("MapView.on_enter", function(func, map_view)
func(map_view)
if self.was_active then
self.widgets.mutators_button.content.toggled = true
manager:pcall(function() self:activate() end)
end
end)
-- Deactivate the view on exit
manager:hook("MapView.on_exit", function(func, map_view)
func(map_view)
manager:pcall(function() self:deactivate() end)
end)
-- We don't want to let the game disable steppers when mutators view is active
manager:hook("MapView.update_level_stepper", function(func, map_view)
if not self.active then
func(map_view)
end
end)
end,
reset_hooks = function(self)
manager:hook_remove("MapView.update")
manager:hook_remove("MapView.on_enter")
manager:hook_remove("MapView.on_exit")
manager:hook_remove("MapView.update_level_stepper")
end,
}
-- Initialize mutators view after map view
manager:hook("MapView.init", function(func, self, ...)
func(self, ...)
manager:pcall(function() mutators_view:init(self) end)
end)
-- Destroy mutators view after map view
manager:hook("MapView.destroy", function(func, ...)
mutators_view:deinitialize()
func(...)
end)
-- Initialize mutators view when map_view has been initialized already
local function get_map_view()
local ingame_ui = Managers.matchmaking and Managers.matchmaking.ingame_ui
return ingame_ui and ingame_ui.views and ingame_ui.views.map_view
end
manager:pcall(function() mutators_view:init(get_map_view()) end)
return mutators_view

View file

@ -0,0 +1,172 @@
local definitions = local_require("scripts/ui/views/map_view_definitions")
definitions.scenegraph_definition.mutators_button = {
vertical_alignment = "bottom",
parent = "banner_party",
horizontal_alignment = "center",
size = {
64,
64
},
position = {
-150,
90,
1
}
}
definitions.scenegraph_definition.banner_mutators_text = {
vertical_alignment = "center",
parent = "banner_level",
horizontal_alignment = "center",
size = {
300,
40
},
position = {
0,
0,
1
}
}
definitions.new_widgets = {
banner_mutators_widget = UIWidgets.create_texture_with_text_and_tooltip("title_bar", "Mutators", "Enable and disable mutators", "banner_level", "banner_mutators_text", {
vertical_alignment = "center",
scenegraph_id = "banner_mutators_text",
localize = false,
font_size = 28,
horizontal_alignment = "center",
font_type = "hell_shark",
text_color = Colors.get_color_table_with_alpha("cheeseburger", 255)
},
{
font_size = 24,
max_width = 500,
localize = false,
horizontal_alignment = "left",
vertical_alignment = "top",
font_type = "hell_shark",
text_color = Colors.get_color_table_with_alpha("white", 255),
line_colors = {},
offset = {
0,
0,
50
}
}),
mutators_button_widget = {
element = UIElements.ToggleIconButton,
content = {
click_texture = "octagon_button_clicked",
toggle_hover_texture = "octagon_button_toggled_hover",
toggle_texture = "octagon_button_toggled",
hover_texture = "octagon_button_hover",
normal_texture = "octagon_button_normal",
icon_texture = "map_icon_browser_01",
icon_hover_texture = "map_icon_browser_01",
tooltip_text = "Mutators",
toggled_tooltip_text = "Mutators",
button_hotspot = {}
},
style = {
normal_texture = {
color = {
255,
255,
255,
255
}
},
hover_texture = {
color = {
255,
255,
255,
255
}
},
click_texture = {
color = {
255,
255,
255,
255
}
},
toggle_texture = {
color = {
255,
255,
255,
255
}
},
toggle_hover_texture = {
color = {
255,
255,
255,
255
}
},
icon_texture = {
color = {
255,
255,
255,
255
},
offset = {
0,
0,
1
}
},
icon_hover_texture = {
color = {
255,
255,
255,
255
},
offset = {
0,
0,
1
}
},
icon_click_texture = {
color = {
255,
255,
255,
255
},
offset = {
0,
-1,
1
}
},
tooltip_text = {
font_size = 24,
max_width = 500,
localize = false,
horizontal_alignment = "left",
vertical_alignment = "top",
font_type = "hell_shark",
text_color = Colors.get_color_table_with_alpha("white", 255),
line_colors = {},
offset = {
0,
0,
20
}
}
},
scenegraph_id = "mutators_button"
}
}
return definitions

View file

@ -1,5 +1,5 @@
local vmf = get_mod("VMF") local manager = get_mod("vmf_mutator_manager")
local mutators = vmf.mutators local mutators = manager.mutators
local were_enabled_before = false local were_enabled_before = false
@ -59,7 +59,7 @@ local function get_member_func(client_cookie)
end end
vmf:hook("IngamePlayerListUI.set_difficulty_name", function(func, self, name) manager:hook("IngamePlayerListUI.set_difficulty_name", function(func, self, name)
local mutators_name = get_enabled_mutators_names(true) local mutators_name = get_enabled_mutators_names(true)
if mutators_name then if mutators_name then
name = name .. " " .. mutators_name name = name .. " " .. mutators_name
@ -67,7 +67,7 @@ vmf:hook("IngamePlayerListUI.set_difficulty_name", function(func, self, name)
self.headers.content.game_difficulty = name self.headers.content.game_difficulty = name
end) end)
vmf:hook("MatchmakingStateHostGame.host_game", function(func, self, ...) manager:hook("MatchmakingStateHostGame.host_game", function(func, self, ...)
func(self, ...) func(self, ...)
set_lobby_data() set_lobby_data()
local names = get_enabled_mutators_names() local names = get_enabled_mutators_names()
@ -80,13 +80,13 @@ vmf:hook("MatchmakingStateHostGame.host_game", function(func, self, ...)
end end
end) end)
vmf:hook("MatchmakingManager.rpc_matchmaking_request_join_lobby", function(func, self, sender, client_cookie, host_cookie, lobby_id, friend_join) manager:hook("MatchmakingManager.rpc_matchmaking_request_join_lobby", function(func, self, sender, client_cookie, host_cookie, lobby_id, friend_join)
local name = get_enabled_mutators_names(false) local name = get_enabled_mutators_names(false)
if name then if name then
local message = "[Automated message] This lobby has the following difficulty mod active : " .. name local message = "[Automated message] This lobby has the following difficulty mod active : " .. name
vmf:hook("Managers.chat.channels[1].members_func", get_member_func(client_cookie)) manager:hook("Managers.chat.channels[1].members_func", get_member_func(client_cookie))
Managers.chat:send_system_chat_message(1, message, 0, true) Managers.chat:send_system_chat_message(1, message, 0, true)
vmf:hook_remove("Managers.chat.channels[1].members_func") manager:hook_remove("Managers.chat.channels[1].members_func")
end end
func(self, sender, client_cookie, host_cookie, lobby_id, friend_join) func(self, sender, client_cookie, host_cookie, lobby_id, friend_join)
end) end)

View file

@ -1,13 +1,13 @@
local vmf = get_mod("VMF") local manager = new_mod("vmf_mutator_manager")
-- List of mods that are also mutators in order in which they should be enabled -- List of mods that are also mutators in order in which they should be enabled
-- This is populated via VMFMod.register_as_mutator -- This is populated via VMFMod.register_as_mutator
vmf.mutators = {} manager.mutators = {}
local mutators = vmf.mutators local mutators = manager.mutators
local mutators_config = {} local mutators_config = {}
local default_config = dofile("scripts/mods/vmf/modules/mutators/default_config") local default_config = manager:dofile("scripts/mods/vmf/modules/mutators/mutator_default_config")
-- This lists mutators and which ones should be enabled after them -- This lists mutators and which ones should be enabled after them
-- This is populated via VMFMod.register_as_mutator -- This is populated via VMFMod.register_as_mutator
@ -29,12 +29,12 @@ local mutators_sorted = false
]]-- ]]--
-- Sorts mutators in order they should be enabled -- Sorts mutators in order they should be enabled
vmf.sort_mutators = function() manager.sort_mutators = function()
if mutators_sorted then return end if mutators_sorted then return end
-- LOG -- -- LOG --
vmf:dump(mutators_sequence, "seq", 5) manager:dump(mutators_sequence, "seq", 5)
for i, v in ipairs(mutators) do for i, v in ipairs(mutators) do
print(i, v:get_name()) print(i, v:get_name())
end end
@ -73,7 +73,7 @@ vmf.sort_mutators = function()
numIter = numIter + 1 numIter = numIter + 1
if numIter > maxIter then if numIter > maxIter then
vmf:error("Mutators: too many iterations. Check for loops in 'enable_before_these'/'enable_after_these'.") manager:error("Mutators: too many iterations. Check for loops in 'enable_before_these'/'enable_after_these'.")
return return
end end
end end
@ -88,7 +88,7 @@ vmf.sort_mutators = function()
end end
-- Disables mutators that cannot be enabled right now -- Disables mutators that cannot be enabled right now
vmf.disable_impossible_mutators = function() manager.disable_impossible_mutators = function()
local disabled_mutators = {} local disabled_mutators = {}
for _, mutator in pairs(mutators) do for _, mutator in pairs(mutators) do
if mutator:is_enabled() and not mutator:can_be_enabled() then if mutator:is_enabled() and not mutator:can_be_enabled() then
@ -104,9 +104,9 @@ end
PRIVATE METHODS PRIVATE METHODS
]]-- ]]--
local update_mutators_view, get_map_view = dofile("scripts/mods/vmf/modules/mutators/gui") local mutators_view = manager:dofile("scripts/mods/vmf/modules/mutators/mutator_gui")
local addDice, removeDice = dofile("scripts/mods/vmf/modules/mutators/dice") local addDice, removeDice = manager:dofile("scripts/mods/vmf/modules/mutators/mutator_dice")
local set_lobby_data = dofile("scripts/mods/vmf/modules/mutators/info") local set_lobby_data = manager:dofile("scripts/mods/vmf/modules/mutators/mutator_info")
-- Adds mutator names from enable_these_after to the list of mutators that should be enabled after the mutator_name -- Adds mutator names from enable_these_after to the list of mutators that should be enabled after the mutator_name
local function update_mutators_sequence(mutator_name, enable_these_after) local function update_mutators_sequence(mutator_name, enable_these_after)
@ -116,7 +116,7 @@ local function update_mutators_sequence(mutator_name, enable_these_after)
for _, other_mutator_name in ipairs(enable_these_after) do for _, other_mutator_name in ipairs(enable_these_after) do
if mutators_sequence[other_mutator_name] and table.has_item(mutators_sequence[other_mutator_name], mutator_name) then if mutators_sequence[other_mutator_name] and table.has_item(mutators_sequence[other_mutator_name], mutator_name) then
vmf:error("Mutators '" .. mutator_name .. "' and '" .. other_mutator_name .. "' are both set to load after the other one.") manager:error("Mutators '" .. mutator_name .. "' and '" .. other_mutator_name .. "' are both set to load after the other one.")
elseif not table.has_item(mutators_sequence[mutator_name], other_mutator_name) then elseif not table.has_item(mutators_sequence[mutator_name], other_mutator_name) then
table.insert(mutators_sequence[mutator_name], other_mutator_name) table.insert(mutators_sequence[mutator_name], other_mutator_name)
end end
@ -186,7 +186,7 @@ local function disable_incompatible_with(mutator)
end end
if names then if names then
-- TODO: output this to the menu instead of chat -- TODO: output this to the menu instead of chat
vmf:echo("These mutators are incompatible with " .. mutator:get_name() .. " and were disabled: " .. names) manager:echo("These mutators are incompatible with " .. mutator:get_name() .. " and were disabled: " .. names)
end end
end end
@ -223,7 +223,7 @@ local function set_mutator_state(mutator, state)
-- Sort mutators if this is the first call -- Sort mutators if this is the first call
if not mutators_sorted then if not mutators_sorted then
vmf.sort_mutators() manager.sort_mutators()
end end
-- Disable mutators that aren't compatible -- Disable mutators that aren't compatible
@ -268,8 +268,6 @@ local function set_mutator_state(mutator, state)
end end
end end
update_mutators_view()
print("---------") print("---------")
end end
@ -280,12 +278,12 @@ end
-- Enables mutator (pcall for now) -- Enables mutator (pcall for now)
local function enable_mutator(self) local function enable_mutator(self)
vmf:pcall(function() set_mutator_state(self, true) end) manager:pcall(function() set_mutator_state(self, true) end)
end end
-- Disables mutator (pcall for now) -- Disables mutator (pcall for now)
local function disable_mutator(self) local function disable_mutator(self)
vmf:pcall(function() set_mutator_state(self, false) end) manager:pcall(function() set_mutator_state(self, false) end)
end end
-- Checks current difficulty and map selection screen settings to determine if a mutator can be enabled -- Checks current difficulty and map selection screen settings to determine if a mutator can be enabled
@ -296,7 +294,7 @@ local function can_be_enabled(self)
local actual_difficulty = Managers.state and Managers.state.difficulty:get_difficulty() local actual_difficulty = Managers.state and Managers.state.difficulty:get_difficulty()
local right_difficulty = not actual_difficulty or table.has_item(mutator_difficulties, actual_difficulty) local right_difficulty = not actual_difficulty or table.has_item(mutator_difficulties, actual_difficulty)
local map_view = get_map_view() local map_view = mutators_view.map_view
local map_view_active = map_view and map_view.active local map_view_active = map_view and map_view.active
local right_unapplied_difficulty = false local right_unapplied_difficulty = false
@ -366,8 +364,8 @@ end
--[[ --[[
HOOKS HOOKS
]]-- ]]--
vmf:hook("DifficultyManager.set_difficulty", function(func, self, difficulty) manager:hook("DifficultyManager.set_difficulty", function(func, self, difficulty)
local disabled_mutators = vmf.disable_impossible_mutators() local disabled_mutators = manager.disable_impossible_mutators()
if #disabled_mutators > 0 then if #disabled_mutators > 0 then
local message = "MUTATORS DISABLED DUE TO DIFFICULTY CHANGE:" local message = "MUTATORS DISABLED DUE TO DIFFICULTY CHANGE:"
for _, mutator in ipairs(disabled_mutators) do for _, mutator in ipairs(disabled_mutators) do

View file

@ -132,10 +132,21 @@ local options_widgets = {
["default_value"] = 0 ["default_value"] = 0
} }
} }
} },
{
["setting_name"] = "win",
["widget_type"] = "keybind",
["text"] = "WIN",
["default_value"] = {},
["action"] = "win"
},
} }
vmf:create_options(options_widgets, false, "Vermintide Mod Framework") vmf:create_options(options_widgets, false, "Vermintide Mod Framework")
vmf.win = function()
Managers.state.game_mode:complete_level()
end
vmf.setting_changed = function (setting_name) vmf.setting_changed = function (setting_name)
if setting_name == "vmf_options_scrolling_speed" then if setting_name == "vmf_options_scrolling_speed" then

View file

@ -21,10 +21,7 @@ return {
dofile("scripts/mods/vmf/modules/options_menu/vmf_options_view") dofile("scripts/mods/vmf/modules/options_menu/vmf_options_view")
dofile("scripts/mods/vmf/modules/vmf_options") dofile("scripts/mods/vmf/modules/vmf_options")
dofile("scripts/mods/vmf/modules/mod_gui/basic_gui") dofile("scripts/mods/vmf/modules/mutators/mutator_manager")
dofile("scripts/mods/vmf/modules/mod_gui/gui")
dofile("scripts/mods/vmf/modules/mutators/mutators")
object.vmf = get_mod("VMF") object.vmf = get_mod("VMF")