From 3570a80d67cd28650aa4f2783eb394d3d4267374 Mon Sep 17 00:00:00 2001 From: Cyberarm Date: Thu, 27 May 2021 02:39:32 +0000 Subject: [PATCH] Added icons for settings menu, refreshed menus to unify layouts --- lib/tools/asset_viewer/lib/main_menu.rb | 12 +- lib/tools/map_editor/lib/main_menu.rb | 20 +-- lib/ui/menus/multiplayer_profile_menu.rb | 23 ++-- .../menus/multiplayer_server_browser_menu.rb | 24 ++-- lib/ui/menus/settings_menu.rb | 80 ++++++----- locales/en.yml | 8 +- static/icons/settings_audio.png | Bin 0 -> 1542 bytes static/icons/settings_controls.png | Bin 0 -> 1951 bytes static/icons/settings_display.png | Bin 0 -> 1199 bytes static/icons/settings_graphics.png | Bin 0 -> 952 bytes static/icons/settings_multiplayer.png | Bin 0 -> 8479 bytes svg/icons/settings_audio.svg | 114 ++++++++++++++++ svg/icons/settings_controls.svg | 127 ++++++++++++++++++ svg/icons/settings_display.svg | 113 ++++++++++++++++ svg/icons/settings_graphics.svg | 103 ++++++++++++++ svg/icons/settings_multiplayer.svg | 121 +++++++++++++++++ 16 files changed, 680 insertions(+), 65 deletions(-) create mode 100644 static/icons/settings_audio.png create mode 100644 static/icons/settings_controls.png create mode 100644 static/icons/settings_display.png create mode 100644 static/icons/settings_graphics.png create mode 100644 static/icons/settings_multiplayer.png create mode 100644 svg/icons/settings_audio.svg create mode 100644 svg/icons/settings_controls.svg create mode 100644 svg/icons/settings_display.svg create mode 100644 svg/icons/settings_graphics.svg create mode 100644 svg/icons/settings_multiplayer.svg diff --git a/lib/tools/asset_viewer/lib/main_menu.rb b/lib/tools/asset_viewer/lib/main_menu.rb index 60fc210..28f6db7 100644 --- a/lib/tools/asset_viewer/lib/main_menu.rb +++ b/lib/tools/asset_viewer/lib/main_menu.rb @@ -17,17 +17,19 @@ class IMICFPS @manifests.sort_by! { |m| m.name.downcase } - label IMICFPS::NAME.to_s, text_size: 100, color: Gosu::Color::BLACK - label "Asset Viewer", text_size: 50 + flow(width: 1.0, height: 1.0) do stack(width: 0.25, height: 1.0) do - button "Back", width: 1.0 do - pop_state - end end stack(width: 0.5, height: 1.0) do + label "Asset Viewer", text_size: 100, font: BOLD_SANS_FONT, width: 1.0, text_align: :center + + link I18n.t("menus.back"), width: 1.0 do + pop_state + end + flow(width: 1.0, height: 1.0) do @manifests.each do |manifest| button manifest.name do diff --git a/lib/tools/map_editor/lib/main_menu.rb b/lib/tools/map_editor/lib/main_menu.rb index ec01f35..55817cd 100644 --- a/lib/tools/map_editor/lib/main_menu.rb +++ b/lib/tools/map_editor/lib/main_menu.rb @@ -6,9 +6,6 @@ class IMICFPS def setup window.needs_cursor = true - label IMICFPS::NAME.to_s, text_size: 50 - label "Map Editor", text_size: 28 - @maps = [] Dir.glob("#{GAME_ROOT_PATH}/maps/*.json").each do |map| begin @@ -22,15 +19,20 @@ class IMICFPS flow(width: 1.0, height: 1.0) do stack(width: 0.25, height: 1.0) do - button "New Map", width: 1.0 - - button "Back", margin_top: 64, width: 1.0 do - pop_state - end end stack(width: 0.5, height: 1.0) do - label "Edit Map" + label "Map Editor", text_size: 100, font: BOLD_SANS_FONT, width: 1.0, text_align: :center + + flow width: 1.0 do + link I18n.t("menus.back"), width: 0.32 do + pop_state + end + + button "New Map", width: 1.0, width: 0.64 + end + + label "Edit Map", width: 1.0, text_align: :center, text_size: 50 flow(width: 1.0, height: 1.0) do @maps.each do |map| button map.metadata.name do diff --git a/lib/ui/menus/multiplayer_profile_menu.rb b/lib/ui/menus/multiplayer_profile_menu.rb index b65a281..4f8c32f 100644 --- a/lib/ui/menus/multiplayer_profile_menu.rb +++ b/lib/ui/menus/multiplayer_profile_menu.rb @@ -3,17 +3,22 @@ class IMICFPS class MultiplayerProfileMenu < Menu def setup - label "Profile", text_size: 100, color: Gosu::Color::BLACK - flow(width: 1.0, height: 1.0) do stack(width: 0.25, height: 1.0) do - button "Edit Profile", width: 1.0 - button "Log Out", width: 1.0 - button I18n.t("menus.back"), width: 1.0, margin_top: 64 do - pop_state - end end + stack(width: 0.5, height: 1.0) do + label "Profile", text_size: 100, color: Gosu::Color::BLACK, width: 1.0, text_align: :center + + flow width: 1.0 do + link I18n.t("menus.back"), width: 0.32 do + pop_state + end + + button "Edit Profile", width: 0.32 + button "Log Out", width: 0.32 + end + flow(width: 1.0, padding: 4) do background 0x88_222222 @@ -25,7 +30,7 @@ class IMICFPS end end - flow(margin_top: 4, margin_right: 4) do + flow(margin_top: 4) do stack do label "Kiil/Death Ratio" label "Kills" @@ -36,7 +41,7 @@ class IMICFPS label "Repair Points" end - stack do + stack margin_left: 16 do label "0.72" label "21" label "28" diff --git a/lib/ui/menus/multiplayer_server_browser_menu.rb b/lib/ui/menus/multiplayer_server_browser_menu.rb index 2503d10..e6d70ce 100644 --- a/lib/ui/menus/multiplayer_server_browser_menu.rb +++ b/lib/ui/menus/multiplayer_server_browser_menu.rb @@ -30,19 +30,25 @@ class IMICFPS } ] - label "Server Browser", text_size: 100 - flow width: 1.0, height: 1.0 do + flow(width: 1.0, height: 1.0) do stack width: 0.25 do - button "Host Game", width: 1.0 - button "Direct Connect", width: 1.0 - - button I18n.t("menus.back"), width: 1.0, margin_top: 64 do - pop_state - end end stack width: 0.5, height: 1.0 do - stack width: 1.0, height: 0.75, border_color: 0xffffffff, border_thickness: 1 do + stack width: 1.0, height: 0.25 do + label "Server Browser", text_size: 100, text_align: :center, width: 1.0 + + flow(width: 1.0) do + link I18n.t("menus.back"), width: 0.32 do + pop_state + end + + button "Host Game", width: 0.32 + button "Direct Connect", width: 0.32 + end + end + + stack width: 1.0, height: 0.5, border_color: 0xffffffff, border_thickness: 1 do @sample_games.each_with_index do |game, i| text_size = 18 flow width: 1.0 do diff --git a/lib/ui/menus/settings_menu.rb b/lib/ui/menus/settings_menu.rb index 39feb14..13e33e3 100644 --- a/lib/ui/menus/settings_menu.rb +++ b/lib/ui/menus/settings_menu.rb @@ -17,53 +17,69 @@ class IMICFPS end def setup - @categories = %w[ - Display - Graphics - Audio - Controls - Multiplayer - ] @pages = {} @current_page = nil - label "Settings", text_size: 100, color: Gosu::Color::BLACK - flow(width: 1.0, height: 1.0) do stack(width: 0.25, height: 1.0) do - @categories.each do |category| - button category, width: 1.0 do - show_page(:"#{category}".downcase) + end + + stack(width: 0.5, height: 1.0) do + stack(width: 1.0, height: 0.25) do + label "Settings", color: Gosu::Color::BLACK, text_size: 100, text_align: :center, width: 1.0 + + flow(width: 1.0) do + link I18n.t("menus.back"), width: nil do + pop_state + end + + button get_image("#{GAME_ROOT_PATH}/static/icons/settings_display.png"), image_width: 64, tip: I18n.t("settings.display") do + show_page(:display) + end + + button get_image("#{GAME_ROOT_PATH}/static/icons/settings_graphics.png"), image_width: 64, tip: I18n.t("settings.graphics") do + show_page(:graphics) + end + + button get_image("#{GAME_ROOT_PATH}/static/icons/settings_audio.png"), image_width: 64, tip: I18n.t("settings.audio") do + show_page(:audio) + end + + button get_image("#{GAME_ROOT_PATH}/static/icons/settings_controls.png"), image_width: 64, tip: I18n.t("settings.controls") do + show_page(:controls) + end + + button get_image("#{GAME_ROOT_PATH}/static/icons/settings_multiplayer.png"), image_width: 64, tip: I18n.t("settings.multiplayer") do + show_page(:multiplayer) + end end end - button I18n.t("menus.back"), width: 1.0, margin_top: 64 do - pop_state - end - end - - @categories.each do |category| - stack(width: 0.5, height: 1.0) do |element| - @pages[:"#{category}".downcase] = element - element.hide - - send(:"create_page_#{category}".downcase) if respond_to?(:"create_page_#{category}".downcase) + @page_container = stack(width: 1.0, height: 0.75, scroll: true) do end end end + # @categories.each do |category| + # stack(width: 0.5, height: 1.0) do |element| + # @pages[:"#{category}".downcase] = element + # element.hide + + # send(:"create_page_#{category}".downcase) if respond_to?(:"create_page_#{category}".downcase) + # end + # end + # end + show_page(:display) end def show_page(page) - if element = @pages[page] - @current_page&.hide - @current_page = element - element.show + @page_container.clear do + send(:"page_#{page}") end end - def create_page_display + def page_display label "Display", text_size: 50 label "Resolution" @@ -109,7 +125,7 @@ class IMICFPS end end - def create_page_audio + def page_audio label "Audio", text_size: 50 longest_string = "Dialogue".length volumes = %i[sound music dialogue] @@ -131,7 +147,7 @@ class IMICFPS end end - def create_page_controls + def page_controls label "Controls", text_size: 50 InputMapper.keymap.each do |key, values| @@ -150,7 +166,7 @@ class IMICFPS end end - def create_page_graphics + def page_graphics label "Graphics", text_size: 50 longest_string = "Surface Effect Detail" @@ -218,7 +234,7 @@ class IMICFPS end end - def create_page_multiplayer + def page_multiplayer label "Multiplayer", text_size: 50 flow do diff --git a/locales/en.yml b/locales/en.yml index 317ed67..293dbc4 100644 --- a/locales/en.yml +++ b/locales/en.yml @@ -10,4 +10,10 @@ en: back: Back leave: Leave paused: Paused - resume: Resume \ No newline at end of file + resume: Resume + settings: + display: Display + graphics: Graphics + audio: Audio + controls: Controls + multiplayer: Multiplayer \ No newline at end of file diff --git a/static/icons/settings_audio.png b/static/icons/settings_audio.png new file mode 100644 index 0000000000000000000000000000000000000000..469eb50b9f32ab387dbfd90ba8c53632a0a5c159 GIT binary patch literal 1542 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 literal 0 HcmV?d00001 diff --git a/static/icons/settings_display.png b/static/icons/settings_display.png new file mode 100644 index 0000000000000000000000000000000000000000..f263a7c3396e5323bb91b02fd6f1bb5d2dae998d GIT binary patch literal 1199 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSoCO|{#S9F5he4R}c>anMprB-l zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&3=Awbo-U3d6?5L+J)0*SF46vR zx%@gI;guhiW*^Dv^18Xjx=YtoWr_T0F7~OuUipiXLN{iInog-+(Ul;mY54lmD$hH| z8nrdnBsHDXE7h{`3V(OVN|)6rx%qf;-~IpoQkhL@bDZzBA9Omw?t&GlB&^?az;-^v ze8$ZVf)-{ML_PQ4I-vJKdIQrPzt_@pnX(+*+piy2`*2RsxW;Y0e?#R0E*~*2Rx$DO z!Fp3Q#L^|CrC)!o_T=K@=f8Qk_Qbcj)@#;~G$f9BcgEAphu{XBATo&z}$tksXzf-T$8Ccd_n@h}z|{x|HFrshGUL?KN!D|Fck5|3NH)BD z`I1q`vn@02+5MTKkJnY(J}gyhxN-ddoj>h=*Lbt#B>$cM{9l#b{PN|(h2Pa}8B>mE zGCUS(DC9a|!J06K$-s|MVmU)kFvBsr3Qyk>e;_$QscVtCef_`szF&K)PKH@`-FX>b zcwN<&aTY^$bv1LuB%aHQpDCB$>H+yw>cF*Y-x#K;9NrSTe)r|5JEfkCYZ%t73+?<@ zy`UC$UC*vKqthHg?Pgh@mQDW5`F@MR5%P&9N{q#NW{DD%1Z@y9b z*6siJVs72c>@k(%xA^-n^WKGb3*)l3->&(4c6(0VwFSFN-z+~+cgJ>bo}8_FIrq&& zPoB&MM#Gd-=@xN1SkyRX1#Q$*aG#3)*x~F4q0e zN9_;aKD+-|6E~m1|5wMmvL*5i$31UM_Y3+iabxN4y!zIb{h#N5Q({cX?RuC0>8`N) zy+_Y_U;Fs_rf!<>_iybqyZ=qq-`_F+Vbo!8{JYpQgR#Q6M*Rzi6W4*=53Lp51-uyU z@!jV%Z4zMmQ1`>HL-2>3gTdi)r|tvK8JeW`2?w$4V-tAuVQzrZ2g8O3?eALz8uJ-@ z&U}!)ulzx?VWRZD$HgrBSPV8DF0bi5(9Ymi_oJ_0Fh#au=0od!t`kxjp0&OIA>tUu zI74>dV{ev7mIR;zenB2<2HyXgk?sa(7)<^sr$`>$z;xk*aEjJ#g!$KeZj-; znyCFulxdPr@l0>HT41u8wO8T KKbLh*2~7a7?i7&# literal 0 HcmV?d00001 diff --git a/static/icons/settings_graphics.png b/static/icons/settings_graphics.png new file mode 100644 index 0000000000000000000000000000000000000000..791db366cc76482f9acd7bd136e7f282cc4d807b GIT binary patch literal 952 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 z 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 literal 0 HcmV?d00001 diff --git a/svg/icons/settings_audio.svg b/svg/icons/settings_audio.svg new file mode 100644 index 0000000..7ee9315 --- /dev/null +++ b/svg/icons/settings_audio.svg @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/svg/icons/settings_controls.svg b/svg/icons/settings_controls.svg new file mode 100644 index 0000000..0653638 --- /dev/null +++ b/svg/icons/settings_controls.svg @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/svg/icons/settings_display.svg b/svg/icons/settings_display.svg new file mode 100644 index 0000000..77e2b93 --- /dev/null +++ b/svg/icons/settings_display.svg @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/svg/icons/settings_graphics.svg b/svg/icons/settings_graphics.svg new file mode 100644 index 0000000..f5057a0 --- /dev/null +++ b/svg/icons/settings_graphics.svg @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/svg/icons/settings_multiplayer.svg b/svg/icons/settings_multiplayer.svg new file mode 100644 index 0000000..7db8463 --- /dev/null +++ b/svg/icons/settings_multiplayer.svg @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + +