From 79dfa963c21a09271e7ec85e5afbb0afd37f36ce Mon Sep 17 00:00:00 2001 From: Cyberarm Date: Thu, 10 Sep 2026 18:47:53 -0500 Subject: [PATCH] Stub all games display, added default game_cover image --- lib/pages/games.rb | 48 ++++++++++++++++++++++++++++++++---- lib/pages/server_browser.rb | 2 +- media/game_cover.png | Bin 0 -> 17166 bytes 3 files changed, 44 insertions(+), 6 deletions(-) create mode 100644 media/game_cover.png diff --git a/lib/pages/games.rb b/lib/pages/games.rb index de0f8c1..d9b5274 100644 --- a/lib/pages/games.rb +++ b/lib/pages/games.rb @@ -9,13 +9,18 @@ module W3DHubLauncher @current_app = @games.first @current_channel = @current_app&.channels&.first + @display_mode = :all_games + # game bar container flow(width: 1.0, height: 60) do - widget(width: 220, height: 1.0, style_class: [:all_button]) do - flow(width: 1.0, height: 40, margin_left: PADDING, v_align: :center, h_align: :center) do + widget(width: 220, height: 1.0, style_class: [:all_button]) do |w| + flow(width: 1.0, height: 40, margin_left: PADDING, v_align: :center) do image safe_get_image("#{ROOT_PATH}/media/icons/menuGrid.png"), height: 40, color: 0xff_bbbbbb link "ALL GAMES", text_size: 24, font: FONT_BLACK, height: 1.0, text_v_align: :center end + w.subscribe(:clicked_left_mouse_button) do + populate_all_games + end end @games_list_container = flow(fill: true, height: 1.0, background_nine_slice: NINE_SLICE_ROUNDED, background_nine_slice_from_edge: NINE_SLICE_EDGE, background_nine_slice_color: ALPHA_GRAY, margin_left: PADDING) do @@ -23,7 +28,14 @@ module W3DHubLauncher end # game content container - flow(width: 1.0, fill: true, margin_top: LARGE_PADDING) do + @game_content_container = flow(width: 1.0, fill: true, margin_top: LARGE_PADDING) do + end + + populate_game + end + + def populate_game_content_container + @game_content_container.clear do # game info container @game_info_container = stack(width: 340, height: 1.0) do end @@ -45,11 +57,33 @@ module W3DHubLauncher end end end + end - populate_game + def populate_all_games + @display_mode = :all_games + + @game_content_container.clear do + flow(fill: true, height: 1.0, scroll: true, tag: :hi_mom) do |e| + @games.each do |app| + image safe_get_image("#{ROOT_PATH}/media/co1oqw.png"), aspect_ratio: 3 / 4.0, width: 1.0 / game_cover_width_ratio(e), margin_left: HALF_PADDING, margin_right: HALF_PADDING, margin_bottom: PADDING, tip: app.name + end + + e.subscribe(:size_changed) do |e| + e.children.each do |child| + child.style.width = 1.0 / game_cover_width_ratio(e) + end + end + end + end end def populate_game(game = @current_app, channel = @current_channel) + if @display_mode == :all_games + @display_mode = :game + + populate_game_content_container + end + @current_app = game @current_channel = game&.channels&.first @@ -100,7 +134,7 @@ module W3DHubLauncher def populate_games_list @games_list_container.clear do - @games.each_with_index do |game, i| + @games.each do |game| btn = button(safe_get_image("#{CACHE_PATH}/icon_#{game.id}.png"), tag: :"image_icon_#{game.id}", style_class: [:app_icon_button], enabled: @current_app.id != game.id, tip: game.name) do |btn| populate_game(game, game&.channels&.first) end @@ -200,6 +234,10 @@ module W3DHubLauncher end end + def game_cover_width_ratio(e) + (e.width / 300.0).round.clamp(1..10) + end + def news_item_width_ratio (@news_container.width / 400.0).round.clamp(1..10) end diff --git a/lib/pages/server_browser.rb b/lib/pages/server_browser.rb index 7cab49e..3cc03ca 100644 --- a/lib/pages/server_browser.rb +++ b/lib/pages/server_browser.rb @@ -11,7 +11,7 @@ module W3DHubLauncher # game bar container flow(width: 1.0, height: 60) do widget(width: 220, height: 1.0, style_class: [:all_button]) do |w| - flow(width: 1.0, height: 40, margin_left: PADDING, v_align: :center, h_align: :center) do + flow(width: 1.0, height: 40, margin_left: PADDING, v_align: :center) do image safe_get_image("#{ROOT_PATH}/media/icons/menuGrid.png"), height: 40, color: 0xff_bbbbbb link "ALL SERVERS", text_size: 24, font: FONT_BLACK, height: 1.0, text_v_align: :center end diff --git a/media/game_cover.png b/media/game_cover.png new file mode 100644 index 0000000000000000000000000000000000000000..3347fdfaa4d9091b72e6eade59aa7c604f69f101 GIT binary patch literal 17166 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
ZLw z`#Ng9`{4D_Up#%D#rvj>q@N5M@~pYmRX=j`+!GzoQbW@ZjSl=U%dx!gm(gp}i$;F? zV&S!rxc;B=PUa81!QC_YY5h8%wBnJUuljU-CW*BQ7K_tcTYaDZ7WYuCD_=Fd1}gQ+b~H#A|(=u^}4;w;_XThV`y_38IbZqM6Wv#HflV#rxga<1=PWrpH|@4%?wLOFt<7l7q4PJMH$QevtH>J}@KE%Wi))jD3^{$5&YAWJOdkL>m~gi*P&rTf zv{;sC@-ONc%WluZPuf%Gmazi3x|iIU)g!D zXeg&VJ!SN+Y0vlTbi+G66pxlv-m5%UQnx8iql#9yz3Qyh9ebP5^!8&@pw)+~HsoEn v^dt&e#K_I)^v>v9$JVZ&@