Refreshed a few menus, stubbed Settings menu

This commit is contained in:
2020-05-05 10:46:23 -05:00
parent c1eb02a106
commit a078645b94
11 changed files with 259 additions and 40 deletions

View File

@@ -58,6 +58,7 @@ require_relative "lib/ui/console"
require_relative "lib/ui/menus/main_menu" require_relative "lib/ui/menus/main_menu"
require_relative "lib/ui/menus/settings_menu" require_relative "lib/ui/menus/settings_menu"
require_relative "lib/ui/menus/extras_menu" require_relative "lib/ui/menus/extras_menu"
require_relative "lib/ui/menus/multiplayer_menu"
require_relative "lib/ui/menus/level_select_menu" require_relative "lib/ui/menus/level_select_menu"
require_relative "lib/ui/menus/game_pause_menu" require_relative "lib/ui/menus/game_pause_menu"

View File

@@ -10,7 +10,7 @@ class IMICFPS
raise "Unable to load map, missing :map_file or :map_parser" raise "Unable to load map, missing :map_file or :map_parser"
end end
title "I-MIC FPS" title IMICFPS::NAME
@subheading = Text.new("Loading Map: #{@map_parser.metadata.name}", y: 100, size: 50, alignment: :center) @subheading = Text.new("Loading Map: #{@map_parser.metadata.name}", y: 100, size: 50, alignment: :center)
@description = Text.new("Map created by: #{@map_parser.metadata.authors.join(", ")}\n#{@map_parser.metadata.description}", y: 180, size: 24, alignment: :center) @description = Text.new("Map created by: #{@map_parser.metadata.authors.join(", ")}\n#{@map_parser.metadata.description}", y: 180, size: 24, alignment: :center)
@state = Text.new("Preparing...", y: window.height/2-40, size: 40, alignment: :center) @state = Text.new("Preparing...", y: window.height/2-40, size: 40, alignment: :center)

View File

@@ -1,13 +1,9 @@
class IMICFPS class IMICFPS
class AssetViewerTool class AssetViewerTool
class MainMenu < CyberarmEngine::GuiState class MainMenu < Menu
include CommonMethods
def setup def setup
window.needs_cursor = true window.needs_cursor = true
label "#{IMICFPS::NAME}", text_size: 50
label "Asset Viewer", text_size: 28
@manifests = [] @manifests = []
Dir.glob(GAME_ROOT_PATH + "/assets/**/manifest.yaml").each do |manifest| Dir.glob(GAME_ROOT_PATH + "/assets/**/manifest.yaml").each do |manifest|
begin begin
@@ -19,24 +15,31 @@ class IMICFPS
@manifests.sort_by! { |m| m.name.downcase } @manifests.sort_by! { |m| m.name.downcase }
button "Back", margin_bottom: 25 do label "#{IMICFPS::NAME}", text_size: 100, color: Gosu::Color::BLACK
pop_state label "Asset Viewer", text_size: 50
end
flow(margin: 10) do flow(width: 1.0, height: 1.0) do
@manifests.each do |manifest| stack(width: 0.25, height: 1.0) do
button manifest.name do button "Refresh" do
push_state(TurnTable, manifest: manifest) request_recalculate
end
button "Back", margin_bottom: 25 do
pop_state
end
end
stack(width: 0.5, height: 1.0) do
flow(width: 1.0, height: 1.0) do
@manifests.each do |manifest|
button manifest.name do
push_state(TurnTable, manifest: manifest)
end
end
end end
end end
end end
end end
def draw
menu_background(Menu::PRIMARY_COLOR, Menu::ACCENT_COLOR, Menu::BAR_COLOR_STEP, Menu::BAR_ALPHA, Menu::BAR_SIZE, Menu::BAR_SLOPE)
super
end
def update def update
super super

View File

@@ -1,8 +1,6 @@
class IMICFPS class IMICFPS
class MapEditorTool class MapEditorTool
class MainMenu < CyberarmEngine::GuiState class MainMenu < Menu
include CommonMethods
def setup def setup
window.needs_cursor = true window.needs_cursor = true
@@ -37,11 +35,6 @@ class IMICFPS
end end
end end
def draw
menu_background(Menu::PRIMARY_COLOR, Menu::ACCENT_COLOR, Menu::BAR_COLOR_STEP, Menu::BAR_ALPHA, Menu::BAR_SIZE, Menu::BAR_SLOPE)
super
end
def update def update
super super

View File

@@ -1,5 +1,7 @@
class IMICFPS class IMICFPS
class Menu < IMICFPS::GameState class Menu < IMICFPS::GuiState
include CommonMethods
PRIMARY_COLOR = Gosu::Color.rgba(255, 127, 0, 200) PRIMARY_COLOR = Gosu::Color.rgba(255, 127, 0, 200)
ACCENT_COLOR = Gosu::Color.rgba(155, 27, 0, 200) ACCENT_COLOR = Gosu::Color.rgba(155, 27, 0, 200)
@@ -53,13 +55,15 @@ class IMICFPS
window.scene.draw window.scene.draw
end end
super
end end
def draw_menu_box def draw_menu_box
draw_rect( draw_rect(
window.width/4, 0, window.width / 4, 0,
window.width/2, window.height, window.width / 2, window.height,
Gosu::Color.new(0x22222222), Gosu::Color.new(0x11ffffff),
) )
end end
@@ -79,6 +83,8 @@ class IMICFPS
window.scene.update(window.dt) window.scene.update(window.dt)
end end
super
@__version_text.x = window.width - (@__version_text.width + 10) @__version_text.x = window.width - (@__version_text.width + 10)
@__version_text.y = window.height - (@__version_text.height + 10) @__version_text.y = window.height - (@__version_text.height + 10)
end end
@@ -92,6 +98,8 @@ class IMICFPS
end end
end end
end end
super
end end
def mouse_over?(object) def mouse_over?(object)

View File

@@ -1,7 +1,7 @@
class IMICFPS class IMICFPS
class ExtrasMenu < Menu class ExtrasMenu < Menu
def setup def setup
title "I-MIC FPS" title IMICFPS::NAME
subtitle "Extras" subtitle "Extras"
link "Asset Viewer" do link "Asset Viewer" do

View File

@@ -1,8 +1,8 @@
class IMICFPS class IMICFPS
class GamePauseMenu < Menu class GamePauseMenu < Menu
def setup def setup
@background_alpha = 50 @bar_alpha = 50
title "I-MIC FPS" title IMICFPS::NAME
subtitle "Paused" subtitle "Paused"
link "Resume" do link "Resume" do

View File

@@ -1,7 +1,7 @@
class IMICFPS class IMICFPS
class LevelSelectMenu < Menu class LevelSelectMenu < Menu
def setup def setup
title "I-MIC FPS" title IMICFPS::NAME
subtitle "Choose a Map" subtitle "Choose a Map"
Dir.glob(GAME_ROOT_PATH + "/maps/*.json").map { |file| [file, MapParser.new(map_file: file)]}.each do |file, map| Dir.glob(GAME_ROOT_PATH + "/maps/*.json").map { |file| [file, MapParser.new(map_file: file)]}.each do |file, map|

View File

@@ -1,13 +1,17 @@
class IMICFPS class IMICFPS
class MainMenu < Menu class MainMenu < Menu
def setup def setup
title "I-MIC FPS" title IMICFPS::NAME
link "Single Player" do link "Single Player" do
push_state(LevelSelectMenu) push_state(LevelSelectMenu)
# push_state(LoadingState.new(forward: Game, map_file: GAME_ROOT_PATH + "/maps/test_map.json")) # push_state(LoadingState.new(forward: Game, map_file: GAME_ROOT_PATH + "/maps/test_map.json"))
end end
link "Multiplayer" do
push_state(MultiplayerMenu)
end
link "Settings" do link "Settings" do
push_state(SettingsMenu) push_state(SettingsMenu)
end end

View File

@@ -0,0 +1,14 @@
class IMICFPS
class MultiplayerMenu < Menu
def setup
title IMICFPS::NAME
subtitle "Multiplayer"
link "Online"
link "LAN"
link "Back" do
pop_state
end
end
end
end

View File

@@ -1,14 +1,210 @@
class IMICFPS class IMICFPS
class SettingsMenu < Menu class SettingsMenu < Menu
include CommonMethods
def setup def setup
title "I-MIC FPS" @categories = [
subtitle "Settings" "Display",
"Graphics",
"Audio",
"Controls",
"Multiplayer"
]
@pages = {}
@current_page = nil
link "\"There is no spoon.\"" label "Settings", text_size: 100, color: Gosu::Color::BLACK
link "Back" do flow(width: 1.0, height: 1.0) do
pop_state stack(width: 0.25, height: 1.0) do
@categories.each do |category|
button category, width: 1.0 do
show_page(:"#{category}".downcase)
end
end
button "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
if respond_to?(:"create_page_#{category}".downcase)
self.send(:"create_page_#{category}".downcase)
end
end
end
end end
show_page(:display)
end
def show_page(page)
if element = @pages.dig(page)
@current_page.hide if @current_page
@current_page = element
element.show
end
end
def create_page_display
label "Display", text_size: 50
label "Resolution"
flow do
stack do
label "Width"
label "Height"
end
stack do
edit_line "#{window.width}"
edit_line "#{window.height}"
end
end
label ""
check_box "Fullscreen"
label ""
flow do
stack do
label "Gamma Correction"
label "Brightness"
label "Contrast"
end
stack do
slider
slider
slider
end
stack do
label "0.0"
label "0.0"
label "0.0"
end
end
end
def create_page_audio
label "Audio", text_size: 50
flow do
stack do
label "Master Volume"
label "Sound Effects"
label "Dialog"
label "Cinematic"
end
stack do
slider range: 0.0..1.0, value: 1.0
slider range: 0.0..1.0, value: 1.0
slider range: 0.0..1.0, value: 1.0
slider range: 0.0..1.0, value: 1.0
end
stack do
label "0.0"
label "0.0"
label "0.0"
label "0.0"
end
end
end
def create_page_controls
label "Controls", text_size: 50
InputMapper.keymap.each do |key, values|
flow do
label "#{key}"
[values].flatten.each do |value|
button Gosu.button_id_to_char(value)
end
end
end
end
def create_page_graphics
label "Graphics", text_size: 50
flow do
check_box "V-Sync"
label "(No Supported)"
end
flow do
label "Field of View"
slider range: 70.0..110.0
label "90.0"
end
flow do
stack do
label "Detail"
end
stack do
slider range: 1..3
end
stack do
label "High"
end
end
advanced_mode = check_box "Advanced Mode"
advanced_settings = stack do |element|
element.hide
flow do
stack do
label "Geometry Detail"
label "Shadow Detail"
label "Texture Detail"
label "Particle Detail"
label "Surface Effect Detail"
end
stack do
slider
slider
slider
slider
slider
end
stack do
label "High"
label "High"
label "High"
label "High"
label "High"
end
end
flow do
stack do
label "Lighting Mode"
edit_line ""
end
stack do
label "Texture Filtering"
edit_line ""
end
end
end
advanced_mode.subscribe(:changed) do |element, value|
advanced_settings.show if value
advanced_settings.hide unless value
end
end
def create_page_multiplayer
label "Multiplayer", text_size: 50
check_box "Show player names"
end end
end end
end end