diff --git a/compat/game21/assets/init.lua b/compat/game21/assets/init.lua index 2fdd017..126fe6f 100644 --- a/compat/game21/assets/init.lua +++ b/compat/game21/assets/init.lua @@ -323,7 +323,7 @@ function assets.get_pack(name) -- styles if pack_data.pack_json.preload_promise and not pack_data.pack_json.preload_promise.executed then -- wait for styles if pending threaded loading not done yet - while not pack_data.preload_promise.executed do + while not pack_data.pack_json.preload_promise.executed do threadify.update() love.timer.sleep(0.01) end diff --git a/compat/game21/init.lua b/compat/game21/init.lua index d4926f5..fb549ef 100644 --- a/compat/game21/init.lua +++ b/compat/game21/init.lua @@ -559,6 +559,7 @@ function public.draw_preview(canvas, pack, level) game.level_status.sides = sides pulse.init(game) beat_pulse.init(game) + game.message_text = "" public.draw(canvas, 0, true) end diff --git a/ui/elements/element.lua b/ui/elements/element.lua index 890f4e9..20ae8d2 100644 --- a/ui/elements/element.lua +++ b/ui/elements/element.lua @@ -67,6 +67,18 @@ function element:check_screen() return self:get_root() == keyboard_navigation.get_screen() end +function element:click(select) + if select == nil then + select = true + end + if not self.selected and select then + keyboard_navigation.select_element(self) + end + if self.click_handler then + self.click_handler(self) + end +end + function element:process_event(name, ...) if name == "mousemoved" or name == "mousepressed" or name == "mousereleased" then local x, y = ... diff --git a/ui/screens/levelselect.lua b/ui/screens/levelselect.lua index 3d37aad..b636fa6 100644 --- a/ui/screens/levelselect.lua +++ b/ui/screens/levelselect.lua @@ -195,6 +195,9 @@ local function make_pack_elements() ) cache_folder_flex[pack.id] = update_element(levels, root, 2, last_levels) end + if root.elements[2] ~= levels then + levels.elements[1]:click(false) + end root.elements[2] = levels end }) @@ -203,19 +206,16 @@ local function make_pack_elements() return elements end +local pack_elems = make_pack_elements() root = flex:new({ --packs flex:new({ dropdown:new({ "All Packs", "Favorites" }, { limit_to_inital_width = true, style = { border_thickness = 5 } }), - flex:new(make_pack_elements(), { direction = "column", align_items = "stretch", scrollable = true }), + flex:new(pack_elems, { direction = "column", align_items = "stretch", scrollable = true }), }, { direction = "column", align_items = "stretch" }), --levels - flex:new({ - flex:new({ - label:new("No level folder or pack selected.", { wrap = true }) - }, { align_items = "center" }), - }, { direction = "column", align_items = "center" }), + flex:new({}, { direction = "column", align_items = "center" }), --leaderboards flex:new({ @@ -225,4 +225,8 @@ root = flex:new({ --todo: "score" element similar to those other two, holds the score data like time, player, place, etc. }, { size_ratios = { 1, 2, 1 }, scrollable = false }) +if #pack_elems > 0 then + pack_elems[1]:click(false) +end + return root