mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-07 13:15:01 +00:00
228 lines
6.5 KiB
Ruby
228 lines
6.5 KiB
Ruby
# To use the console, use the executable explicitly built with the console
|
|
# enabled on Windows. On Linux and macOS, just launch the executable directly
|
|
# from a terminal.
|
|
module Console
|
|
def self.setup_console
|
|
return unless $DEBUG
|
|
echoln "GPU Cache Max: #{Bitmap.max_size}"
|
|
echoln "-------------------------------------------------------------------------------"
|
|
echoln "#{System.game_title} Output Window"
|
|
echoln "-------------------------------------------------------------------------------"
|
|
echoln "If you can see this window, you are running the game in Debug Mode. This means"
|
|
echoln "that you're either playing a debug version of the game, or you're playing from"
|
|
echoln "within RPG Maker XP."
|
|
echoln ""
|
|
echoln "Closing this window will close the game. If you want to get rid of this window,"
|
|
echoln "run the program from the Shell, or download a release version of the game."
|
|
echoln ""
|
|
echoln "-------------------------------------------------------------------------------"
|
|
echoln "Debug Output:"
|
|
echoln "-------------------------------------------------------------------------------"
|
|
echoln ""
|
|
end
|
|
|
|
def self.readInput
|
|
return gets.strip
|
|
end
|
|
|
|
def self.readInput2
|
|
return self.readInput
|
|
end
|
|
|
|
def self.get_input
|
|
echo self.readInput2
|
|
end
|
|
end
|
|
|
|
module Kernel
|
|
def echo(string)
|
|
return unless $DEBUG
|
|
printf(string.is_a?(String) ? string : string.inspect)
|
|
end
|
|
|
|
def echoln(string)
|
|
echo string
|
|
echo "\r\n"
|
|
end
|
|
end
|
|
|
|
Console.setup_console
|
|
|
|
#===============================================================================
|
|
# Console message formatting
|
|
#===============================================================================
|
|
module Console
|
|
module_function
|
|
|
|
#-----------------------------------------------------------------------------
|
|
# echo string into console (example shorthand for common options)
|
|
#-----------------------------------------------------------------------------
|
|
# heading 1
|
|
def echo_h1(msg)
|
|
echoln markup_style("*** #{msg} ***", text: :brown)
|
|
echoln ""
|
|
end
|
|
|
|
# heading 2
|
|
def echo_h2(msg, **options)
|
|
echoln markup_style(msg, **options)
|
|
echoln ""
|
|
end
|
|
|
|
# heading 3
|
|
def echo_h3(msg)
|
|
echoln markup(msg)
|
|
echoln ""
|
|
end
|
|
|
|
# list item
|
|
def echo_li(msg, pad = 0, color = :brown)
|
|
echo markup_style(' -> ', text: color)
|
|
pad = (pad - msg.length) > 0 ? '.' * (pad - msg.length) : ''
|
|
echo markup(msg + pad)
|
|
end
|
|
|
|
# list item with line break after
|
|
def echoln_li(msg, pad = 0, color = :brown)
|
|
self.echo_li(msg, pad, color)
|
|
echoln ""
|
|
end
|
|
|
|
# paragraph with markup
|
|
def echo_p(msg)
|
|
echoln markup(msg)
|
|
end
|
|
|
|
# warning message
|
|
def echo_warn(msg)
|
|
echoln markup_style("WARNING: #{msg}", text: :yellow)
|
|
end
|
|
|
|
# error message
|
|
def echo_error(msg)
|
|
echoln markup_style("ERROR: #{msg}", text: :light_red)
|
|
end
|
|
|
|
# status output
|
|
def echo_status(status)
|
|
if status
|
|
echoln markup_style('OK', text: :green)
|
|
else
|
|
echoln markup_style('FAIL', text: :red)
|
|
end
|
|
end
|
|
|
|
# completion output
|
|
def echo_done(status)
|
|
if status
|
|
echoln markup_style('done', text: :green)
|
|
else
|
|
echoln markup_style('error', text: :red)
|
|
end
|
|
end
|
|
|
|
#-----------------------------------------------------------------------------
|
|
# Markup options
|
|
#-----------------------------------------------------------------------------
|
|
def string_colors
|
|
{
|
|
default: '38', black: '30', red: '31', green: '32', brown: '33',
|
|
blue: '34', purple: '35', cyan: '36', gray: '37',
|
|
dark_gray: '1;30', light_red: '1;31', light_green: '1;32', yellow: '1;33',
|
|
light_blue: '1;34', light_purple: '1;35', light_cyan: '1;36', white: '1;37'
|
|
}
|
|
end
|
|
|
|
def background_colors
|
|
{
|
|
default: '0', black: '40', red: '41', green: '42', brown: '43',
|
|
blue: '44', purple: '45', cyan: '46', gray: '47',
|
|
dark_gray: '100', light_red: '101', light_green: '102', yellow: '103',
|
|
light_blue: '104', light_purple: '105', light_cyan: '106', white: '107'
|
|
}
|
|
end
|
|
|
|
def font_options
|
|
{
|
|
bold: '1', dim: '2', italic: '3', underline: '4', reverse: '7',
|
|
hidden: '8'
|
|
}
|
|
end
|
|
|
|
# Text markup that turns text between them a certain color
|
|
def markup_colors
|
|
{
|
|
'`' => :cyan, '"' => :purple, "'" => :purple, '$' => :green, '~' => :red
|
|
}
|
|
end
|
|
|
|
def markup_options
|
|
{
|
|
'__' => :underline, '*' => :bold, '|' => :italic
|
|
}
|
|
end
|
|
|
|
# apply console coloring
|
|
def markup_style(string, text: :default, bg: :default, **options)
|
|
# get colors
|
|
code_text = string_colors[text]
|
|
code_bg = background_colors[bg]
|
|
# get options
|
|
options_pool = options.select { |key, val| font_options.key?(key) && val }
|
|
markup_pool = options_pool.keys.map { |opt| font_options[opt] }.join(';').squeeze
|
|
# return formatted string
|
|
"\e[#{code_bg};#{markup_pool};#{code_text}m#{string}\e[0m".squeeze(';')
|
|
end
|
|
|
|
#-----------------------------------------------------------------------------
|
|
# Perform markup on text
|
|
#-----------------------------------------------------------------------------
|
|
|
|
def markup_all_options
|
|
@markup_all_options ||= markup_colors.merge(markup_options)
|
|
end
|
|
|
|
def markup_component(string, component, key, options)
|
|
# trim inner markup content
|
|
l = key.length
|
|
trimmed = component[l...-l]
|
|
# merge markup options
|
|
options[trimmed] = {} unless options[trimmed]
|
|
options[trimmed].deep_merge!({}.tap do |new_opt|
|
|
new_opt[:text] = markup_colors[key] if markup_colors.key?(key)
|
|
new_opt[markup_options[key]] = true if markup_options.key?(key)
|
|
end)
|
|
# remove markup from input string
|
|
string.gsub!(component, trimmed)
|
|
# return output
|
|
return string, options
|
|
end
|
|
|
|
def markup_breakdown(string, options = {})
|
|
# iterate through all options
|
|
markup_all_options.each_key do |key|
|
|
# ensure escape
|
|
key_char = key.chars.map { |c| "\\#{c}" }.join
|
|
# define regex
|
|
regex = "#{key_char}.*?#{key_char}"
|
|
# go through matches
|
|
string.scan(/#{regex}/).each do |component|
|
|
return *markup_breakdown(*markup_component(string, component, key, options))
|
|
end
|
|
end
|
|
# return output
|
|
return string, options
|
|
end
|
|
|
|
def markup(string)
|
|
# get a breakdown of all markup options
|
|
string, options = markup_breakdown(string)
|
|
# iterate through each option and apply
|
|
options.each do |key, opt|
|
|
string.gsub!(key, markup_style(key, **opt))
|
|
end
|
|
# return string
|
|
return string
|
|
end
|
|
end
|