Custom Textures: fixed V2 reloading crash

This commit is contained in:
bi 2018-05-16 11:20:56 +03:00
parent 79ba4f5496
commit 00836e1edb
2 changed files with 20 additions and 0 deletions

View file

@ -149,6 +149,8 @@ VMFMod.inject_materials = function (self, ui_renderer_creator, ...)
ui_renderer.gui = World.create_screen_gui(ui_renderer.world, "immediate", unpack(new_materials_list)) ui_renderer.gui = World.create_screen_gui(ui_renderer.world, "immediate", unpack(new_materials_list))
ui_renderer.gui_retained = World.create_screen_gui(ui_renderer.world, unpack(new_materials_list)) ui_renderer.gui_retained = World.create_screen_gui(ui_renderer.world, unpack(new_materials_list))
vmf_data.is_modified = true
end end
end end
end end
@ -159,6 +161,8 @@ end
vmf:hook("UIRenderer.create", function(func, world, ...) vmf:hook("UIRenderer.create", function(func, world, ...)
local is_modified = false
-- FINDING OUT WHO CREATED UI_RENDERER -- FINDING OUT WHO CREATED UI_RENDERER
local ui_renderer_creator = nil local ui_renderer_creator = nil
@ -191,6 +195,7 @@ vmf:hook("UIRenderer.create", function(func, world, ...)
table.insert(ui_renderer_materials, "material") table.insert(ui_renderer_materials, "material")
table.insert(ui_renderer_materials, injected_material) table.insert(ui_renderer_materials, injected_material)
end end
is_modified = true
end end
-- DEBUG INFO -- DEBUG INFO
@ -213,6 +218,7 @@ vmf:hook("UIRenderer.create", function(func, world, ...)
local vmf_data = {} local vmf_data = {}
vmf_data.original_materials = {...} vmf_data.original_materials = {...}
vmf_data.ui_renderer_creator = ui_renderer_creator vmf_data.ui_renderer_creator = ui_renderer_creator
vmf_data.is_modified = is_modified
rawset(ui_renderer, "vmf_data", vmf_data) rawset(ui_renderer, "vmf_data", vmf_data)
return ui_renderer return ui_renderer
@ -258,6 +264,19 @@ vmf.load_custom_textures_settings = function()
_SHOW_DEBUG_INFO = vmf:get("developer_mode") and vmf:get("log_ui_renderers_info") _SHOW_DEBUG_INFO = vmf:get("developer_mode") and vmf:get("log_ui_renderers_info")
end end
vmf.reset_guis = function()
for ui_renderer, _ in pairs(UI_RENDERERS) do
local vmf_data = rawget(ui_renderer, "vmf_data")
if vmf_data.is_modified then
World.destroy_gui(ui_renderer.world, ui_renderer.gui)
World.destroy_gui(ui_renderer.world, ui_renderer.gui_retained)
ui_renderer.gui = World.create_screen_gui(ui_renderer.world, "immediate", unpack(vmf_data.original_materials))
ui_renderer.gui_retained = World.create_screen_gui(ui_renderer.world, unpack(vmf_data.original_materials))
vmf_data.is_modified = false
end
end
end
-- #################################################################################################################### -- ####################################################################################################################
-- ##### Script ####################################################################################################### -- ##### Script #######################################################################################################
-- #################################################################################################################### -- ####################################################################################################################

View file

@ -76,6 +76,7 @@ return {
on_unload = function(object) on_unload = function(object)
print("VMF:ON_UNLOAD()") print("VMF:ON_UNLOAD()")
object.vmf.reset_guis()
object.vmf.save_chat_history() object.vmf.save_chat_history()
object.vmf.save_unsaved_settings_to_file() object.vmf.save_unsaved_settings_to_file()
object.vmf = nil object.vmf = nil