Added Console to replace magic debug keys, added version file

This commit is contained in:
2019-08-07 14:49:49 -05:00
parent 12a588304b
commit ffae3ae14e
6 changed files with 148 additions and 44 deletions

View File

@@ -64,6 +64,7 @@ end
$debug = ARGV.join.include?("--debug") ? true : false $debug = ARGV.join.include?("--debug") ? true : false
include CyberarmEngine include CyberarmEngine
require_relative "lib/version"
require_relative "lib/common_methods" require_relative "lib/common_methods"
require_relative "lib/trees/aabb_tree_debug" require_relative "lib/trees/aabb_tree_debug"
@@ -88,6 +89,8 @@ require_relative "lib/states/game_states/game"
require_relative "lib/states/game_states/loading_state" require_relative "lib/states/game_states/loading_state"
require_relative "lib/states/menus/main_menu" require_relative "lib/states/menus/main_menu"
require_relative "lib/ui/console"
require_relative "lib/objects/entity" require_relative "lib/objects/entity"
require_relative "lib/objects/model_loader" require_relative "lib/objects/model_loader"
require_relative "lib/objects/light" require_relative "lib/objects/light"

View File

@@ -81,7 +81,7 @@ class IMICFPS
def button_up(id) def button_up(id)
window.close if id == Gosu::KbEscape window.close if id == Gosu::KbEscape
if Gosu::MsLeft if id == Gosu::MsLeft
@elements.each do |e| @elements.each do |e|
next unless e.is_a?(Link) next unless e.is_a?(Link)
if mouse_over?(e) if mouse_over?(e)

101
lib/ui/console.rb Normal file
View File

@@ -0,0 +1,101 @@
class IMICFPS
class Console
Z = 100_000
PADDING = 2
include CommonMethods
def initialize
@text_input = Gosu::TextInput.new
@input = Text.new("", x: 4, y: window.height / 4 * 3 - (PADDING * 2), z: Console::Z + 1)
@input.y -= @input.height
@history_height = window.height / 4 * 3 - (PADDING * 2 + @input.textobject.height)
@history = Text.new("=== #{IMICFPS::NAME} v#{IMICFPS::VERSION} (#{IMICFPS::RELEASE_NAME}) ===\n\n", x: 4, y: @history_height, z: Console::Z + 1)
update_history
@background_color = Gosu::Color.rgba(0, 0, 0, 200)
@foreground_color = Gosu::Color.rgba(100, 100, 100, 100)
@input_color = Gosu::Color.rgba(100, 100, 100, 200)
@showing_cursor = false
@active_text_input = nil
@show_caret = true
@caret_last_change = Gosu.milliseconds
@caret_interval = 250
@caret_color = Gosu::Color::WHITE
@width = window.width / 4 * 3
@height = window.height / 4 * 3
end
def draw
# Background/Border
draw_rect(0, 0, @width, @height, @background_color, Console::Z)
# Foregound/History
draw_rect(PADDING, PADDING, @width - (PADDING * 2), @height - (PADDING * 2), @foreground_color, Console::Z)
# Text bar
draw_rect(2, @input.y, @width - (PADDING * 2), @input.height, @input_color, Console::Z)
@history.draw
@input.draw
# Caret
draw_rect(@input.x + caret_pos, @input.y, Console::PADDING, @input.height, @caret_color, Console::Z + 2) if @show_caret
end
def caret_pos
return 0 if @text_input.caret_pos == 0
@input.textobject.text_width(@text_input.text[0..@text_input.caret_pos-1])
end
def update
if Gosu.milliseconds - @caret_last_change >= @caret_interval
@caret_last_change = Gosu.milliseconds
@show_caret = !@show_caret
end
@input.text = @text_input.text
end
def button_down(id)
case id
when Gosu::KbEnter, Gosu::KbReturn
return unless @text_input.text.length > 0
@history.text += "\n> #{@text_input.text}"
update_history
@text_input.text = ""
when Gosu::KbBacktick
# Removed backtick character from input
if @text_input.text.size > 1
@text_input.text = @text_input.text[0..@text_input.text.size - 2]
else
@text_input.text = ""
end
end
end
def button_up(id)
end
def update_history
@history.y = @history_height - (@history.text.lines.count * (@history.textobject.height))
end
def focus
@active_text_input = window.text_input
window.text_input = @text_input
@showing_cursor = window.show_cursor
window.show_cursor = true
@show_caret = true
@caret_last_change = Gosu.milliseconds
end
def blur
window.text_input = @active_text_input
window.show_cursor = @showing_cursor
end
end
end

View File

@@ -1,43 +0,0 @@
class Menu
def initialize
@elements = []
setup
end
def setup
end
def draw
@elements.each(&:draw)
end
def update
@elements.each(&:update)
end
def button(text, x:, y:, &block)
@element << Button.new(text, x, y, block)
end
def label(text, x:, y:)
@element << Text.new(text, x: x, y: y, size: 24)
end
class Button
PADDING = 10
def initialize(text, x, y, block)
@text = Text.new(text, x: x, y: y)
end
def draw
Gosu.draw_rect(x-PADDING, y-PADDING, @text.width+PADDING, @text.height+PADDING, Gosu::Color.rgb(0, 100, 0))
@text.draw
end
def update
end
def mouse_over?
end
end
end

5
lib/version.rb Normal file
View File

@@ -0,0 +1,5 @@
class IMICFPS
NAME = "I-MIC FPS"
RELEASE_NAME = "InDev"
VERSION = "0.0.1"
end

View File

@@ -15,7 +15,45 @@ class IMICFPS
@needs_cursor = false @needs_cursor = false
@number_of_vertices = 0 @number_of_vertices = 0
self.caption = "#{IMICFPS::NAME} v#{IMICFPS::VERSION} (#{IMICFPS::RELEASE_NAME})"
@show_console = false
@console = Console.new
push_state(MainMenu) push_state(MainMenu)
end end
def draw
super
@console.draw if @show_console
end
def update
super
@console.update if @show_console
end
def button_down(id)
if @show_console
@console.button_down(id)
else
super
end
if id == Gosu::KbBacktick
@show_console ? @console.blur : @console.focus
@show_console = !@show_console
end
end
def button_up(id)
if @show_console
@console.button_up(id)
else
super
end
end
end end
end end