diff --git a/lib/dialog.rb b/lib/dialog.rb
index 4d31d63..3a31d59 100644
--- a/lib/dialog.rb
+++ b/lib/dialog.rb
@@ -3,7 +3,7 @@ module W3DHubLauncher
def setup
theme(THEME)
- background 0xee_222222
+ background TRANSLUCENT_GRAY
end
end
end
diff --git a/lib/dialogs/about.rb b/lib/dialogs/about.rb
index 8cea50b..63a2e81 100644
--- a/lib/dialogs/about.rb
+++ b/lib/dialogs/about.rb
@@ -4,12 +4,12 @@ module W3DHubLauncher
def setup
super
- stack(width: 1.0, max_width: 600, height: 1.0, max_height: 600, h_align: :center, v_align: :center, background_nine_slice: NINE_SLICE_ROUNDED, background_nine_slice_from_edge: NINE_SLICE_EDGE, background_nine_slice_color: ALPHA_BLACK) do
- flow(width: 1.0, background_nine_slice: NINE_SLICE_ROUNDED_TOP, background_nine_slice_from_edge: NINE_SLICE_EDGE, background_nine_slice_color: ALPHA_GRAY) do
+ stack(width: 1.0, max_width: 600, height: 1.0, max_height: 600, h_align: :center, v_align: :center, background_nine_slice: NINE_SLICE_ROUNDED, background_nine_slice_from_edge: NINE_SLICE_EDGE, background_nine_slice_color: 0xee_63452c) do
+ flow(width: 1.0, background_nine_slice: NINE_SLICE_ROUNDED_TOP, background_nine_slice_from_edge: NINE_SLICE_EDGE, background_nine_slice_color: 0) do
banner "About", width: 1.0, text_align: :center
end
- stack(width: 1.0, fill: true, scroll: true, padding_left: PADDING, padding_right: PADDING) do
+ stack(width: 1.0, fill: true, scroll: true, margin_left: PADDING, margin_right: PADDING, padding: HALF_PADDING, background_nine_slice: NINE_SLICE_ROUNDED, background_nine_slice_from_edge: NINE_SLICE_EDGE, background_nine_slice_color: ALPHA_BLACK) do
title NAME
tagline format("v%s (%s)", VERSION, VERSION_NAME), margin_left: PADDING
para "© 2021 - #{Time.now.year} cyberarm", margin_left: PADDING
@@ -26,10 +26,10 @@ module W3DHubLauncher
end
end
- flow(width: 1.0, padding: PADDING, background_nine_slice: NINE_SLICE_ROUNDED_BOTTOM, background_nine_slice_from_edge: NINE_SLICE_EDGE, background_nine_slice_color: ALPHA_GRAY) do
+ flow(width: 1.0, padding: PADDING, background_nine_slice: NINE_SLICE_ROUNDED_BOTTOM, background_nine_slice_from_edge: NINE_SLICE_EDGE, background_nine_slice_color: 0) do
flow(fill: true)
- button "Close" do
+ button "Close", **CTA_BUTTON_THEME do
pop_state
end
diff --git a/lib/pages/boot/start_up.rb b/lib/pages/boot/start_up.rb
index 2bd027f..a154fe0 100644
--- a/lib/pages/boot/start_up.rb
+++ b/lib/pages/boot/start_up.rb
@@ -5,87 +5,211 @@ module W3DHubLauncher
include GuiExt
def setup
+ @steps = [
+ method(:step_connectivity),
+ method(:step_launcher_update),
+ method(:step_server_list),
+ method(:step_refresh_account_data),
+ method(:step_fetch_applications),
+ method(:step_battlefield_control_established)
+ ]
+ @initialization_acceptable = false
+ @step_count = @steps.size
+
stack(width: 1.0, background_nine_slice: NINE_SLICE_ROUNDED, background_nine_slice_from_edge: 8, background_nine_slice_color: 0x11_ffffff, padding: HALF_PADDING) do
banner "Establishing Battlefield Control", width: 1.0, text_align: :center
tagline "Please stand by...", width: 1.0, text_align: :center
end
stack(width: 1.0, fill: true, padding: PADDING) do
- stack(width: 1.0, fill: true, scroll: true) do
- a = flow(width: 1.0, height: HALF_PADDING + PADDING, visible: false) do
- image safe_get_image("#{ROOT_PATH}/media/icons/checkmark.png"), height: 1.0, v_align: :center
- tagline "DNS resolution", height: 1.0, text_v_align: :center
- end
- after(500) do
- a.show
- end
- b = flow(width: 1.0, height: HALF_PADDING + PADDING, visible: false) do
- image safe_get_image("#{ROOT_PATH}/media/icons/information.png"), height: 1.0, v_align: :center, color: 0xff_ff8800
- tagline "Upstream backend", height: 1.0, text_v_align: :center
- caption "Notice: Unreachable. Accounts will be unavailable.", height: 1.0, text_v_align: :center, color: 0xff_ff8800
- end
- after(1000) do
- b.show
- end
- c = flow(width: 1.0, height: HALF_PADDING + PADDING, visible: false) do
- image safe_get_image("#{ROOT_PATH}/media/icons/checkmark.png"), height: 1.0, v_align: :center
- tagline "Alternate backend", height: 1.0, text_v_align: :center
- end
- after(1500) do
- c.show
- end
- d = flow(width: 1.0, height: HALF_PADDING + PADDING, visible: false) do
- image safe_get_image("#{ROOT_PATH}/media/icons/information.png"), height: 1.0, v_align: :center, color: 0xff_ff8800
- tagline "Refresh account session", height: 1.0, text_v_align: :center
- caption "Notice: Upstream backend unavailable, session not refreshed.", height: 1.0, text_v_align: :center, color: 0xff_ff8800
- end
- after(2000) do
- d.show
- end
- e = flow(width: 1.0, height: HALF_PADDING + PADDING, visible: false) do
- image safe_get_image("#{ROOT_PATH}/media/icons/checkmark.png"), height: 1.0, v_align: :center
- tagline "Fetch game servers", height: 1.0, text_v_align: :center
- end
- after(2500) do
- e.show
- end
- f = flow(width: 1.0, height: HALF_PADDING + PADDING, visible: false) do
- image safe_get_image("#{ROOT_PATH}/media/icons/cross.png"), height: 1.0, v_align: :center, color: 0xff_ff0000
- tagline "Fetch applications", height: 1.0, text_v_align: :center
- caption "Fatal: Failed to retrieve applications list and no local cache exists. Cannot continue.", height: 1.0, text_v_align: :center, color: 0xff_ff0000
- end
- after(3000) do
- puts "HELLO"
- W3DHubLauncher::Worker::Request.new(:w3dhub_api_call, { call: :fetch_applications }) do |result|
- # pp [:CALLBACK, result]
- File.write("applications.json", result.data)
- hash = JSON.parse(result.data)
- applications = hash["applications"]&.map { |app| W3DHubLauncher::Worker::Api::Application.new(app) } || []
- # pp applications.to_json
+ @initialization_container = stack(width: 1.0, fill: true, scroll: true) do
+ # a = flow(width: 1.0, height: HALF_PADDING + PADDING, visible: false) do
+ # image safe_get_image("#{ROOT_PATH}/media/icons/checkmark.png"), height: 1.0, v_align: :center
+ # tagline "DNS resolution", height: 1.0, text_v_align: :center
+ # end
+ # after(500) do
+ # a.show
+ # end
+ # b = flow(width: 1.0, height: HALF_PADDING + PADDING, visible: false) do
+ # image safe_get_image("#{ROOT_PATH}/media/icons/information.png"), height: 1.0, v_align: :center, color: 0xff_ff8800
+ # tagline "Upstream backend", height: 1.0, text_v_align: :center
+ # caption "Notice: Unreachable. Accounts will be unavailable.", height: 1.0, text_v_align: :center, color: 0xff_ff8800
+ # end
+ # after(1000) do
+ # b.show
+ # end
+ # c = flow(width: 1.0, height: HALF_PADDING + PADDING, visible: false) do
+ # image safe_get_image("#{ROOT_PATH}/media/icons/checkmark.png"), height: 1.0, v_align: :center
+ # tagline "Alternate backend", height: 1.0, text_v_align: :center
+ # end
+ # after(1500) do
+ # c.show
+ # end
+ # d = flow(width: 1.0, height: HALF_PADDING + PADDING, visible: false) do
+ # image safe_get_image("#{ROOT_PATH}/media/icons/information.png"), height: 1.0, v_align: :center, color: 0xff_ff8800
+ # tagline "Refresh account session", height: 1.0, text_v_align: :center
+ # caption "Notice: Upstream backend unavailable, session not refreshed.", height: 1.0, text_v_align: :center, color: 0xff_ff8800
+ # end
+ # after(2000) do
+ # d.show
+ # end
+ # e = flow(width: 1.0, height: HALF_PADDING + PADDING, visible: false) do
+ # image safe_get_image("#{ROOT_PATH}/media/icons/checkmark.png"), height: 1.0, v_align: :center
+ # tagline "Fetch game servers", height: 1.0, text_v_align: :center
+ # end
+ # after(2500) do
+ # e.show
+ # end
+ # f = flow(width: 1.0, height: HALF_PADDING + PADDING, visible: false) do
+ # image safe_get_image("#{ROOT_PATH}/media/icons/cross.png"), height: 1.0, v_align: :center, color: 0xff_ff0000
+ # tagline "Fetch applications", height: 1.0, text_v_align: :center
+ # caption "Fatal: Failed to retrieve applications list and no local cache exists. Cannot continue.", height: 1.0, text_v_align: :center, color: 0xff_ff0000
+ # end
+ # after(3000) do
+ # puts "HELLO"
+ # W3DHubLauncher::Worker::Request.new(:w3dhub_api_call, { call: :fetch_applications }) do |result|
+ # # pp [:CALLBACK, result]
+ # File.write("applications.json", result.data)
+ # hash = JSON.parse(result.data)
+ # applications = hash["applications"]&.map { |app| W3DHubLauncher::Worker::Api::Application.new(app) } || []
+ # # pp applications.to_json
- MemCache[:applications] = applications
- end
+ # MemCache[:applications] = applications
+ # end
- f.show
- @progress_bar.type = :linear
- @progress_bar.value = 0.0
- end
+ # f.show
+ # @progress_bar.type = :linear
+ # @progress_bar.value = 0.0
+ # end
- after(3500) do
- parent.page_host.clear do
- banner "Battlefield control established".upcase, width: 1.0, height: 1.0, text_v_align: :center, text_align: :center
- end
- end
- after(3600) do
- pop_state
- push_state(States::Interface)
- end
+ # after(35000) do
+ # parent.page_host.clear do
+ # banner "Battlefield control established".upcase, width: 1.0, height: 1.0, text_v_align: :center, text_align: :center
+ # end
+ # end
+ # after(36000) do
+ # pop_state
+ # push_state(States::Interface)
+ # end
end
flow(width: 1.0, padding_top: PADDING) do
- @progress_bar = progress width: 1.0, type: :marquee
+ @progress_bar = progress width: 1.0, fraction: 0.0
end
end
+
+ next_step
+ end
+
+ def next_step
+ step = @steps.shift
+ step&.call
+
+ pp (1.0 - (@steps.size / @step_count.to_f)), @steps.size, @step_count
+ @progress_bar.value = (1.0 - (@steps.size / @step_count.to_f))
+ puts
+
+ if step.nil? && @initialization_acceptable
+ after(100) do
+ pop_state
+ push_state(States::Interface)
+ end
+ end
+ end
+
+ def step_connectivity
+ @initialization_container.append do
+ tagline "Checking uplink..."
+ # caption "Primary backend services OK", margin_left: LARGE_PADDING
+ # caption "Upstream backend services OK", margin_left: LARGE_PADDING
+ end
+
+ Worker::Api.dns_resolution do |result|
+ @initialization_container.append do
+ if result.okay?
+ caption "DNS Resolution OK", margin_left: LARGE_PADDING
+ next_step
+ else
+ caption "DNS Resolution FAILED", margin_left: LARGE_PADDING
+ caption "Failed to resolve: #{result.error}", color: 0xff_ff0000, margin_left: LARGE_PADDING * 2
+ end
+ end
+ end
+ end
+
+ def step_launcher_update
+ @initialization_container.append do
+ tagline "Checking for updates..."
+ caption "Launcher version OK", margin_left: LARGE_PADDING
+ end
+
+ after(1000) do
+ next_step
+ end
+ end
+
+ def step_server_list
+ @initialization_container.append do
+ tagline "Requesting server listing..."
+ caption "Found 21 servers OK", margin_left: LARGE_PADDING
+ end
+
+ after(1000) do
+ next_step
+ end
+ end
+
+ def step_refresh_account_data
+ @initialization_container.append do
+ tagline "Updating account information..."
+ caption "Refresh session OK", margin_left: LARGE_PADDING
+ caption "Profile data OK", margin_left: LARGE_PADDING
+ end
+
+ after(1000) do
+ next_step
+ end
+ end
+
+ def step_fetch_applications
+ @initialization_container.append do
+ tagline "Requesting application listing..."
+ end
+
+ Worker::Api.applications do |result|
+ if result.okay?
+ File.write("applications.json", result.data)
+ hash = JSON.parse(result.data)
+ applications = hash["applications"]&.map { |app| W3DHubLauncher::Worker::Api::Application.new(app) } || []
+
+ MemCache[:applications] = applications
+
+ @initialization_container.append do
+ caption "Refresh session OK", margin_left: LARGE_PADDING
+ caption "Profile data OK", margin_left: LARGE_PADDING
+ end
+
+ next_step
+ else
+ @initialization_container.append do
+ caption "A fatal error occurred while getting application data.", margin_left: LARGE_PADDING, color: 0xaa_ff0000
+ end
+ end
+ end
+ end
+
+ def step_battlefield_control_established
+ @initialization_acceptable = true
+
+ after(200) do
+ parent.page_host.clear do
+ banner "Battlefield control established".upcase, width: 1.0, height: 1.0, text_v_align: :center, text_align: :center
+ end
+ end
+
+ after(800) do
+ next_step
+ end
end
end
end
diff --git a/lib/pages/games.rb b/lib/pages/games.rb
index c86fe21..9000648 100644
--- a/lib/pages/games.rb
+++ b/lib/pages/games.rb
@@ -118,10 +118,10 @@ module W3DHubLauncher
button safe_get_image("#{ROOT_PATH}/media/icons/gear.png"), tip: "Options", image_height: 1.0, background_nine_slice: NINE_SLICE_ROUNDED_RIGHT, **CTA_BUTTON_THEME
elsif @current_app.servicable?
pp @current_app
- button "Import", tip: "Import existing application installation", fill: true, height: 1.0, background_nine_slice: NINE_SLICE_ROUNDED_LEFT, **CTA_BUTTON_THEME
+ button "Import", enabled: false, tip: "Import existing application installation", fill: true, height: 1.0, background_nine_slice: NINE_SLICE_ROUNDED_LEFT, **CTA_BUTTON_THEME
button "Download", tip: "Download and install application", fill: true, height: 1.0, background_nine_slice: NINE_SLICE_ROUNDED_RIGHT, **CTA_BUTTON_THEME
else
- button "Import", tip: "Import existing application installation", fill: true, height: 1.0, **CTA_BUTTON_THEME
+ button "Import", enabled: false, tip: "Import existing application installation", fill: true, height: 1.0, **CTA_BUTTON_THEME
end
end
# FIXME: the reported version should be the _installed_ version, not the current channel version
diff --git a/lib/theme.rb b/lib/theme.rb
index f9dfc2d..8e7e01e 100644
--- a/lib/theme.rb
+++ b/lib/theme.rb
@@ -2,8 +2,10 @@ module W3DHubLauncher
LARGE_PADDING = 40
PADDING = 20
HALF_PADDING = 10
+
ALPHA_BLACK = 0x88_000000
ALPHA_GRAY = 0x88_5e5c64
+ TRANSLUCENT_GRAY = 0xaa_3d3846
FONT_LIGHT = "#{ROOT_PATH}/media/fonts/NotoSans-Light.ttf"
FONT_REGULAR = "#{ROOT_PATH}/media/fonts/NotoSans-Regular.ttf"
@@ -95,7 +97,9 @@ module W3DHubLauncher
background_nine_slice_color: 0xaa_5e5c64
},
disabled: {
- background: 0
+ color: 0x88_c0bfbc,
+ background: 0,
+ background_nine_slice_color: 0xaa_77767b
}
},
EditLine: {