Inital Import of asterisk_gosu into launcher, non-functional.

This commit is contained in:
2022-06-03 22:58:26 -05:00
parent fc968ffe32
commit c0eac0104b
12 changed files with 682 additions and 43 deletions

83
lib/asterisk/config.rb Normal file
View File

@@ -0,0 +1,83 @@
class W3DHub
class Asterisk
class Config
CONFIG_PATH = "#{GAME_ROOT_PATH}/data/asterisk.json"
attr_reader :settings, :server_profiles, :games, :irc_profiles
def initialize
@config = nil
save_new_config unless load_config
load_config unless @config
end
def save_new_config
hash = {
settings: {
theme: :default,
server_profile: "",
game: "",
launch_arguments: "",
irc_profile: "None",
nickname: "",
password: "",
server_hostname: "",
server_port: "",
preload_app: "",
enable_preload_app: false,
post_launch_app: "",
enable_post_launch_app: false,
},
server_profiles: [],
games: [],
irc_profiles: []
}
save_config(hash)
end
def load_config
return false unless File.exist?(CONFIG_PATH)
begin
hash = JSON.parse(File.read(CONFIG_PATH), symbolize_names: true)
@config ||= {}
@config[:settings] = @settings = Settings.new(hash[:settings])
@config[:server_profiles] = @server_profiles = []
hash[:server_profiles].each { |profile| @server_profiles << ServerProfile.new(profile) }
@config[:games] = @games = []
hash[:games].each { |game| @games << Game.new(game) }
@config[:irc_profiles] = @irc_profiles = []
hash[:irc_profiles].each { |profile| @irc_profiles << IRCProfile.new(profile) }
rescue JSON::ParserError
puts "Config corrupted"
false
end
end
def hard_reset!
save_new_config
load_config
end
def save_config(config = @config)
File.write(CONFIG_PATH, config.to_json)
end
end
end
end

21
lib/asterisk/game.rb Normal file
View File

@@ -0,0 +1,21 @@
class W3DHub
class Asterisk
class Game
attr_accessor :title, :path
def initialize(hash = nil)
return unless hash
@title = hash[:title]
@path = hash[:path]
end
def to_json(options)
{
title: @title,
path: @path
}.to_json(options)
end
end
end
end

View File

@@ -0,0 +1,29 @@
class W3DHub
class Asterisk
class IRCProfile
attr_accessor :name, :nickname, :password, :server_hostname, :server_port, :server_bot
def initialize(hash = nil)
return unless hash
@name = hash[:name]
@nickname = hash[:nickname]
@password = hash[:password]
@server_hostname = hash[:server_hostname]
@server_port = hash[:server_port]
@server_bot = hash[:server_bot]
end
def to_json(options)
{
name: @name,
nickname: @nickname,
password: @password,
server_hostname: @server_hostname,
server_port: @server_port,
server_bot: @server_bot
}.to_json(options)
end
end
end
end

View File

@@ -0,0 +1,38 @@
class W3DHub
class Asterisk
class ServerProfile
attr_accessor :name, :nickname, :password,
:game, :launch_arguments,
:server_profile, :server_hostname, :server_port,
:irc_profile
def initialize(hash = nil)
return unless hash
@name = hash[:name]
@nickname = hash[:nickname]
@password = hash[:password]
@server_profile = hash[:server_profile]
@server_hostname = hash[:server_hostname]
@server_port = hash[:server_port]
@game = hash[:game]
@launch_arguments = hash[:launch_arguments]
@irc_profile = hash[:irc_profile]
end
def to_json(options)
{
name: @name,
nickname: @nickname,
password: @password,
server_profile: @server_profile,
server_hostname: @server_hostname,
server_port: @server_port,
game_title: @game_title,
launch_arguments: @launch_arguments,
irc_profile: @irc_profile
}.to_json(options)
end
end
end
end

26
lib/asterisk/settings.rb Normal file
View File

@@ -0,0 +1,26 @@
class W3DHub
class Asterisk
class Settings
attr_accessor :theme, :preload_app, :enable_preload_app, :post_launch_app, :enable_post_launch_app
def initialize(hash)
@theme = hash[:theme].to_sym
@preload_app = hash[:preload_app]
@enable_preload_app = hash[:enable_preload_app]
@post_launch_app = hash[:post_launch_app]
@enable_post_launch_app = hash[:enable_post_launch_app]
end
def to_json(options)
{
theme: @theme,
preload_app: @preload_app,
enable_preload_app: @enable_preload_app,
post_launch_app: @post_launch_app,
enable_post_launch_app: @enable_post_launch_app
}.to_json(options)
end
end
end
end

View File

@@ -0,0 +1,102 @@
class W3DHub
class Asterisk
class States
class GameForm < CyberarmEngine::GuiState
def setup
@game = @options[:editing]
theme W3DHub::THEME
background 0xee_444444
stack(width: 1.0, height: 1.0, margin: 256, background: 0xee_222222) do
# Title bar
flow(width: 1.0, height: 32, padding: 8) do
background 0x88_000000
# image "#{GAME_ROOT_PATH}/media/ui_icons/export.png", width: 32, align: :center, color: 0xaa_ffffff
# tagline "<b>#{I18n.t(:"server_browser.direct_connect")}</b>", fill: true, text_align: :center
tagline @game ? "Update Game" : "Add Game", width: 1.0, text_align: :center
end
stack(width: 1.0, fill: true, padding_left: 8, padding_right: 8) do
stack(width: 1.0, height: 60) do
para "Game or Mod Title:"
@game_title = edit_line "#{@game&.title}", width: 1.0
end
stack(width: 1.0, height: 60) do
para "Path to Executable:"
flow(width: 1.0) do
@game_path = edit_line "#{@game&.path}", width: 0.749
button "Browse...", width: 0.25, enabled: W3DHub.unix?, tip: W3DHub.unix? ? "Browse for game executable" : "Not available on Windows" do
path = W3DHub.ask_file
@game_path.value = path if !path.empty? && File.exist?(path)
end
end
end
flow(fill: true)
flow(width: 1.0, margin_top: 8, height: 40, padding_bottom: 8) do
button "Cancel", fill: true, margin_right: 4 do
pop_state
end
flow(fill: true)
@save_button = button "Save", fill: true, margin_left: 4, enabled: false do
pop_state
@options[:save_callback].call(
@game,
@game_path.value,
@game_title.value
)
end
end
end
end
end
def draw
previous_state&.draw
Gosu.flush
super
end
def update
super
@save_button.enabled = valid?
end
def close
pop_state
end
def button_down(id)
super
case id
when Gosu::KB_ESCAPE
pop_state
end
end
def valid?
existing_game = W3DHub::Store[:asterisk_config].games.find { |g| g.title == @game_title.value }
existing_game = nil if existing_game == @game
@game_title.value.length.positive? &&
@game_path.value.length.positive? &&
File.exist?(@game_path.value) &&
!existing_game
end
end
end
end
end

View File

@@ -0,0 +1,117 @@
class W3DHub
class Asterisk
class States
class IRCProfileForm < CyberarmEngine::GuiState
def setup
@profile = @options[:editing]
theme W3DHub::THEME
background 0xcc_000000
stack(width: 1.0, height: 248, margin: 48, padding: 16) do
caption @game ? "Update IRC Profile" : "Add IRC Profile", width: 1.0, text_align: :center
stack(width: 1.0, height: 60) do
flow(width: 1.0, height: 1.0) do
stack(width: 0.6, height: 1.0) do
para "IRC Nickname:"
@irc_nickname = edit_line "#{@profile&.nickname}", width: 1.0
end
stack(width: 0.4, height: 1.0) do
para "IRC Password:"
@irc_password = edit_line "#{@profile ? Base64.strict_decode64(@profile.password) : ''}", width: 1.0#, type: :password
end
end
end
stack(width: 1.0, height: 60) do
flow(width: 1.0, height: 1.0) do
stack(width: 0.75, height: 1.0) do
para "IRC Server IP or Hostname:"
@irc_hostname = edit_line "#{@profile&.server_hostname}", width: 1.0
end
stack(width: 0.249, height: 1.0) do
para "IRC Port:"
@irc_port = edit_line "#{@profile&.server_port || '6667'}", width: 1.0
end
end
end
stack(width: 1.0, height: 60) do
para "IRC Bot Name:"
@irc_bot = edit_line "#{@profile&.server_bot}", width: 1.0
end
flow(width: 1.0, margin_top: 8) do
button "Cancel", width: 0.5, margin_right: 4 do
pop_state
end
@save_button = button "Save", width: 0.5, margin_left: 4, enabled: false do
pop_state
@options[:save_callback].call(
@profile,
@irc_nickname.value,
@irc_password.value,
@irc_hostname.value,
@irc_port.value,
@irc_bot.value
)
end
end
end
end
# def draw
# previous_state&.draw
# Gosu.flush
# super
# end
def update
super
@save_button.enabled = valid?
end
def close
pop_state
end
def button_down(id)
super
case id
when Gosu::KB_ESCAPE
pop_state
end
end
def valid?
generated_name = IRCProfileForm.generate_profile_name(
@irc_nickname.value,
@irc_hostname.value,
@irc_port.value,
@irc_bot.value
)
existing_profile = W3DHub::Store[:asterisk_config].irc_profiles.find { |profile| profile.name == generated_name }
@irc_nickname.value.length.positive? &&
@irc_password.value.length.positive? && # May be optional?
@irc_hostname.value.length.positive? &&
@irc_port.value.length.positive? &&
@irc_bot.value.length.positive?
end
def self.generate_profile_name(nickname, hostname, port, bot)
"#{bot}@#{hostname}:#{port} as #{nickname}"
end
end
end
end
end

View File

@@ -0,0 +1,76 @@
class W3DHub
class Asterisk
class States
class ServerProfileForm < CyberarmEngine::GuiState
def setup
@server_profile = @options[:editing]
theme W3DHub::THEME
background 0xee_444444
stack(width: 1.0, height: 1.0, margin: 256, background: 0xee_222222) do
# Title bar
flow(width: 1.0, height: 32, padding: 8) do
background 0x88_000000
# image "#{GAME_ROOT_PATH}/media/ui_icons/export.png", width: 32, align: :center, color: 0xaa_ffffff
# tagline "<b>#{I18n.t(:"server_browser.direct_connect")}</b>", fill: true, text_align: :center
tagline @server_profile ? "Update Server Profile" : "Add Server Profile", width: 1.0, text_align: :center
end
stack(width: 1.0, fill: true, padding_left: 8, padding_right: 8) do
stack(width: 1.0, height: 65) do
para "Server Profile Name:"
@server_name = edit_line "#{@server_profile&.name}", width: 1.0
@server_name.subscribe(:changed) do |label|
@save_button.enabled = label.value.length.positive?
end
end
flow(fill: true)
flow(width: 1.0, height: 40, padding_bottom: 8) do
button "Cancel", fill: true, margin_right: 4 do
pop_state
end
flow(fill: true)
@save_button = button "Save", fill: true, margin_left: 4 do
pop_state
@options[:save_callback].call(
@server_profile,
@server_name.value
)
end
end
end
end
end
def draw
previous_state&.draw
Gosu.flush
super
end
def close
pop_state
end
def button_down(id)
super
case id
when Gosu::KB_ESCAPE
pop_state
end
end
end
end
end
end