mirror of
https://github.com/cyberarm/w3d_hub_linux_launcher.git
synced 2025-12-16 17:22:35 +00:00
Prototyped Game Settings dialog and an All Games view, both disabled atm.
This commit is contained in:
@@ -50,6 +50,17 @@ class W3DHub
|
|||||||
def settings(app_id, channel)
|
def settings(app_id, channel)
|
||||||
logger.info(LOG_TAG) { "Settings Request: #{app_id}-#{channel}" }
|
logger.info(LOG_TAG) { "Settings Request: #{app_id}-#{channel}" }
|
||||||
|
|
||||||
|
if (app_data = installed?(app_id, channel))
|
||||||
|
_application = Store.applications.games.find { |g| g.id == app_id }
|
||||||
|
_channel = _application.channels.find { |c| c.id == channel }
|
||||||
|
|
||||||
|
push_state(W3DHub::States::GameSettingsDialog, title: "#{_application.name} (#{_channel.name}) Settings", app_id: app_id, channel: channel)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def wwconfig(app_id, channel)
|
||||||
|
logger.info(LOG_TAG) { "WWConfig Request: #{app_id}-#{channel}" }
|
||||||
|
|
||||||
# open wwconfig.exe or config.exe for ecw
|
# open wwconfig.exe or config.exe for ecw
|
||||||
|
|
||||||
if (app_data = installed?(app_id, channel))
|
if (app_data = installed?(app_id, channel))
|
||||||
|
|||||||
@@ -33,6 +33,16 @@ class W3DHub
|
|||||||
@games_list_container.clear do
|
@games_list_container.clear do
|
||||||
background 0xff_121920
|
background 0xff_121920
|
||||||
|
|
||||||
|
stack(width: 128, height: 1.0) do
|
||||||
|
flow(fill: true)
|
||||||
|
|
||||||
|
button "All Games", enabled: false, tip: "Under Construction" do
|
||||||
|
populate_all_games_view
|
||||||
|
end
|
||||||
|
|
||||||
|
flow(fill: true)
|
||||||
|
end
|
||||||
|
|
||||||
Store.applications.games.each do |game|
|
Store.applications.games.each do |game|
|
||||||
selected = game == @focused_game
|
selected = game == @focused_game
|
||||||
|
|
||||||
@@ -170,7 +180,8 @@ class W3DHub
|
|||||||
button get_image("#{GAME_ROOT_PATH}/media/ui_icons/gear.png"), tip: I18n.t(:"games.game_options"), image_height: 32, margin_left: 0 do |btn|
|
button get_image("#{GAME_ROOT_PATH}/media/ui_icons/gear.png"), tip: I18n.t(:"games.game_options"), image_height: 32, margin_left: 0 do |btn|
|
||||||
items = []
|
items = []
|
||||||
|
|
||||||
items << { label: I18n.t(:"games.game_settings"), block: proc { Store.application_manager.settings(game.id, channel.id) } }
|
items << { label: I18n.t(:"games.game_settings"), block: proc { Store.application_manager.wwconfig(game.id, channel.id) } }
|
||||||
|
# items << { label: I18n.t(:"games.game_settings"), block: proc { Store.application_manager.settings(game.id, channel.id) } }
|
||||||
items << { label: I18n.t(:"games.wine_configuration"), block: proc { Store.application_manager.wine_configuration(game.id, channel.id) } } if W3DHub.unix?
|
items << { label: I18n.t(:"games.wine_configuration"), block: proc { Store.application_manager.wine_configuration(game.id, channel.id) } } if W3DHub.unix?
|
||||||
items << { label: I18n.t(:"games.game_modifications"), block: proc { populate_game_modifications(game, channel) } } unless Store.offline_mode
|
items << { label: I18n.t(:"games.game_modifications"), block: proc { populate_game_modifications(game, channel) } } unless Store.offline_mode
|
||||||
if game.id != "ren"
|
if game.id != "ren"
|
||||||
@@ -262,6 +273,70 @@ class W3DHub
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def populate_all_games_view
|
||||||
|
@game_page_container.clear do
|
||||||
|
background 0x88_353535
|
||||||
|
@game_page_container.style.background_image_color = 0x88_353535
|
||||||
|
@game_page_container.style.default[:background_image_color] = 0x88_353535
|
||||||
|
@game_page_container.update_background_image
|
||||||
|
|
||||||
|
@focused_game = nil
|
||||||
|
@focused_channel = nil
|
||||||
|
|
||||||
|
populate_games_list
|
||||||
|
|
||||||
|
flow(width: 1.0, height: 1.0) do
|
||||||
|
games_view_container = nil
|
||||||
|
# Options
|
||||||
|
stack(width: 360, height: 1.0, padding: 8, scroll: true, border_thickness_right: 1, border_color_right: W3DHub::BORDER_COLOR) do
|
||||||
|
background 0x55_000000
|
||||||
|
|
||||||
|
flow(width: 1.0, height: 48) do
|
||||||
|
button "All Games", width: 280 do
|
||||||
|
# games_view_container.clear
|
||||||
|
end
|
||||||
|
tagline Store.applications.games.count.to_s, fill: true, text_align: :right
|
||||||
|
end
|
||||||
|
|
||||||
|
flow(width: 1.0, height: 48, margin_top: 8) do
|
||||||
|
button "Installed", width: 280
|
||||||
|
tagline "0", fill: true, text_align: :right
|
||||||
|
end
|
||||||
|
|
||||||
|
flow(width: 1.0, height: 48, margin_top: 8) do
|
||||||
|
button "Favorites", width: 280
|
||||||
|
tagline "0", fill: true, text_align: :right
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Games list
|
||||||
|
games_view_container = stack(fill: true, height: 1.0, padding: 8, margin: 8) do
|
||||||
|
title "All Games"
|
||||||
|
|
||||||
|
flow(width: 1.0, fill: true, scroll: true) do
|
||||||
|
Store.applications.games.each do |game|
|
||||||
|
stack(width: 150, height: 200, padding: 8, margin: 8, background: 0x88_151515, border_color: game.color, border_thickness: 1) do
|
||||||
|
flow(width: 1.0, height: 24) do
|
||||||
|
para "Favorite", fill: true
|
||||||
|
toggle_button checked: false, height: 1.0, padding_top: 3, padding_right: 3, padding_bottom: 3, padding_left: 3
|
||||||
|
end
|
||||||
|
|
||||||
|
image_path = File.exist?("#{GAME_ROOT_PATH}/media/icons/#{game.id}.png") ? "#{GAME_ROOT_PATH}/media/icons/#{game.id}.png" : "#{GAME_ROOT_PATH}/media/icons/default_icon.png"
|
||||||
|
flow(width: 1.0, margin_top: 8) do
|
||||||
|
flow(fill: true)
|
||||||
|
image image_path, width: 0.5
|
||||||
|
flow(fill: true)
|
||||||
|
end
|
||||||
|
|
||||||
|
caption game.name, margin_top: 8
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def fetch_game_news(game)
|
def fetch_game_news(game)
|
||||||
lock = Cache.acquire_net_lock("game_news_#{game.id}")
|
lock = Cache.acquire_net_lock("game_news_#{game.id}")
|
||||||
return false unless lock
|
return false unless lock
|
||||||
|
|||||||
163
lib/states/game_settings_dialog.rb
Normal file
163
lib/states/game_settings_dialog.rb
Normal file
@@ -0,0 +1,163 @@
|
|||||||
|
class W3DHub
|
||||||
|
class States
|
||||||
|
class GameSettingsDialog < CyberarmEngine::GuiState
|
||||||
|
BUTTON_STYLE = { text_size: 18, padding_top: 3, padding_bottom: 3, padding_left: 3, padding_right: 3 }
|
||||||
|
def setup
|
||||||
|
window.show_cursor = true
|
||||||
|
|
||||||
|
theme(W3DHub::THEME)
|
||||||
|
|
||||||
|
background 0xee_444444
|
||||||
|
|
||||||
|
stack(width: 1.0, max_width: 720, height: 1.0, max_height: 512, v_align: :center, h_align: :center, background: 0xee_222222) do
|
||||||
|
flow(width: 1.0, height: 0.1, padding: 8) do
|
||||||
|
background 0x88_000000
|
||||||
|
|
||||||
|
image "#{GAME_ROOT_PATH}/media/icons/#{@options[:app_id]}.png", width: 0.04, align: :center
|
||||||
|
|
||||||
|
tagline "<b>#{@options[:title]}</b>", width: 0.9, text_align: :center
|
||||||
|
end
|
||||||
|
|
||||||
|
stack(width: 1.0, fill: true, padding: 16) do
|
||||||
|
flow(width: 1.0, fill: true) do
|
||||||
|
stack(width: 0.5, height: 1.0) do
|
||||||
|
caption "General"
|
||||||
|
|
||||||
|
flow(width: 1.0, height: 24, margin: 4) do
|
||||||
|
para "Default to First Person", fill: true
|
||||||
|
toggle_button tip: "Default to First Person", **BUTTON_STYLE
|
||||||
|
end
|
||||||
|
|
||||||
|
flow(width: 1.0, height: 24, margin: 4) do
|
||||||
|
para "Enable Chat Log", fill: true
|
||||||
|
toggle_button tip: "Enable Chat Log", **BUTTON_STYLE
|
||||||
|
end
|
||||||
|
|
||||||
|
flow(width: 1.0, height: 24, margin: 4) do
|
||||||
|
para "Background Downloads", fill: true
|
||||||
|
toggle_button tip: "Background Downloads", **BUTTON_STYLE
|
||||||
|
end
|
||||||
|
|
||||||
|
flow(width: 1.0, height: 24, margin: 4) do
|
||||||
|
para "Show FPS", fill: true
|
||||||
|
toggle_button tip: "Show FPS", **BUTTON_STYLE
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
stack(width: 0.5, height: 1.0) do
|
||||||
|
caption "Video"
|
||||||
|
|
||||||
|
flow(width: 1.0, height: 24, margin: 4) do
|
||||||
|
para "Resolution", fill: true
|
||||||
|
list_box items: ["#{Gosu.screen_width}x#{Gosu.screen_height}"], width: 128, **BUTTON_STYLE
|
||||||
|
end
|
||||||
|
|
||||||
|
flow(width: 1.0, height: 24, margin: 4) do
|
||||||
|
para "Windowed Mode", fill: true
|
||||||
|
list_box items: ["Windowed", "Borderless", "Fullscreen"], width: 128, **BUTTON_STYLE
|
||||||
|
end
|
||||||
|
|
||||||
|
flow(width: 1.0, height: 24, margin: 4) do
|
||||||
|
para "Enable VSync", fill: true
|
||||||
|
toggle_button tip: "Enable VSync", **BUTTON_STYLE
|
||||||
|
end
|
||||||
|
|
||||||
|
flow(width: 1.0, height: 24, margin: 4) do
|
||||||
|
para "MSAA Mode", fill: true
|
||||||
|
list_box items: %w[0 2 4 8 16], width: 48, **BUTTON_STYLE
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
flow(width: 1.0, fill: true) do
|
||||||
|
stack(width: 0.5, height: 1.0) do
|
||||||
|
caption "Audio"
|
||||||
|
|
||||||
|
flow(width: 1.0, height: 24, margin: 4) do
|
||||||
|
para "Sound Effects", fill: true
|
||||||
|
slider height: 1.0, width: 172, margin_right: 8
|
||||||
|
toggle_button tip: "Sound Effects", checked: true, **BUTTON_STYLE
|
||||||
|
end
|
||||||
|
|
||||||
|
flow(width: 1.0, height: 24, margin: 4) do
|
||||||
|
para "Dialogue", fill: true
|
||||||
|
slider height: 1.0, width: 172, margin_right: 8
|
||||||
|
toggle_button tip: "Dialogue", checked: true, **BUTTON_STYLE
|
||||||
|
end
|
||||||
|
|
||||||
|
flow(width: 1.0, height: 24, margin: 4) do
|
||||||
|
para "Music", fill: true
|
||||||
|
slider height: 1.0, width: 172, margin_right: 8
|
||||||
|
toggle_button tip:"Music", checked: true, **BUTTON_STYLE
|
||||||
|
end
|
||||||
|
|
||||||
|
flow(width: 1.0, height: 24, margin: 4) do
|
||||||
|
para "Cinematic", fill: true
|
||||||
|
slider height: 1.0, width: 172, margin_right: 8
|
||||||
|
toggle_button tip: "Cinematic", checked: true, **BUTTON_STYLE
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
stack(width: 0.5, height: 1.0) do
|
||||||
|
caption "Performance"
|
||||||
|
flow(width: 1.0, height: 24, margin: 4) do
|
||||||
|
para "Texture Detail", fill: true
|
||||||
|
list_box items: ["Low", "Medium", "High"], width: 128, **BUTTON_STYLE
|
||||||
|
end
|
||||||
|
|
||||||
|
flow(width: 1.0, height: 24, margin: 4) do
|
||||||
|
para "Shader Detail", fill: true
|
||||||
|
list_box items: ["Low", "Medium", "High"], width: 128, **BUTTON_STYLE
|
||||||
|
end
|
||||||
|
|
||||||
|
flow(width: 1.0, height: 24, margin: 4) do
|
||||||
|
para "Post Proccessing Detail", fill: true
|
||||||
|
list_box items: ["Low", "Medium", "High"], width: 128, **BUTTON_STYLE
|
||||||
|
end
|
||||||
|
|
||||||
|
flow(width: 1.0, height: 24, margin: 4) do
|
||||||
|
para "Shadow Detail", fill: true
|
||||||
|
list_box items: ["Low", "Medium", "High"], width: 128, **BUTTON_STYLE
|
||||||
|
end
|
||||||
|
|
||||||
|
flow(width: 1.0, height: 24, margin: 4) do
|
||||||
|
para "High Quality Shadows", fill: true
|
||||||
|
toggle_button tip: "High Quality Shadows", **BUTTON_STYLE
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
flow(width: 1.0, height: 0.1, padding: 8) do
|
||||||
|
button "Cancel", width: 0.25 do
|
||||||
|
pop_state
|
||||||
|
@options[:cancel_callback]&.call
|
||||||
|
end
|
||||||
|
|
||||||
|
flow(fill: true)
|
||||||
|
|
||||||
|
button "WWConfig", width: 0.25 do
|
||||||
|
pop_state
|
||||||
|
Store.application_manager.wwconfig(@options[:app_id], @options[:channel])
|
||||||
|
end
|
||||||
|
|
||||||
|
flow(fill: true)
|
||||||
|
|
||||||
|
button "Save", width: 0.25 do
|
||||||
|
pop_state
|
||||||
|
@options[:accept_callback]&.call
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def draw
|
||||||
|
previous_state&.draw
|
||||||
|
|
||||||
|
Gosu.flush
|
||||||
|
|
||||||
|
super
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
18
lib/theme.rb
18
lib/theme.rb
@@ -76,6 +76,24 @@ class W3DHub
|
|||||||
ListBox: {
|
ListBox: {
|
||||||
padding_left: 8,
|
padding_left: 8,
|
||||||
padding_right: 8
|
padding_right: 8
|
||||||
|
},
|
||||||
|
Slider: {
|
||||||
|
border_color: 0xff_00acff
|
||||||
|
},
|
||||||
|
Handle: {
|
||||||
|
text_size: 18,
|
||||||
|
padding_top: 8,
|
||||||
|
padding_left: 2,
|
||||||
|
padding_right: 2,
|
||||||
|
padding_bottom: 8,
|
||||||
|
border_color: Gosu::Color::NONE,
|
||||||
|
background: 0xff_00acff,
|
||||||
|
hover: {
|
||||||
|
background: 0xff_bee6fd
|
||||||
|
},
|
||||||
|
active: {
|
||||||
|
background: 0xff_add5ec
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -87,6 +87,7 @@ require_relative "lib/states/message_dialog"
|
|||||||
require_relative "lib/states/prompt_dialog"
|
require_relative "lib/states/prompt_dialog"
|
||||||
require_relative "lib/states/confirm_dialog"
|
require_relative "lib/states/confirm_dialog"
|
||||||
require_relative "lib/states/direct_connect_dialog"
|
require_relative "lib/states/direct_connect_dialog"
|
||||||
|
require_relative "lib/states/game_settings_dialog"
|
||||||
|
|
||||||
require_relative "lib/api"
|
require_relative "lib/api"
|
||||||
require_relative "lib/api/service_status"
|
require_relative "lib/api/service_status"
|
||||||
|
|||||||
Reference in New Issue
Block a user