Added vertical_/horizontal_margin/padding to Widgets, added HUD command to toggle HUD

This commit is contained in:
2021-06-02 12:55:08 +00:00
parent 5cb48233fb
commit 58b2f8b890
11 changed files with 126 additions and 55 deletions

View File

@@ -79,17 +79,6 @@ end
if prevent_launch?[0] if prevent_launch?[0]
puts prevent_launch?[1] puts prevent_launch?[1]
elsif ARGV.join.include?("--profile")
begin
require "ruby-prof"
RubyProf.start
IMICFPS::Window.new.show
result = RubyProf.stop
printer = RubyProf::MultiPrinter.new(result)
printer.print(path: ".", profile: "profile", min_percent: 2)
rescue LoadError
puts "ruby-prof not installed!"
end
else else
native = ARGV.join.include?("--native") native = ARGV.join.include?("--native")
fps_target = ARGV.first.to_i != 0 ? ARGV.first.to_i : 60 fps_target = ARGV.first.to_i != 0 ? ARGV.first.to_i : 60
@@ -97,11 +86,29 @@ else
window_height = native ? Gosu.screen_height : 720 window_height = native ? Gosu.screen_height : 720
window_fullscreen = native ? true : false window_fullscreen = native ? true : false
IMICFPS::Window.new( window = IMICFPS::Window.new(
width: window_width, width: window_width,
height: window_height, height: window_height,
fullscreen: window_fullscreen, fullscreen: window_fullscreen,
resizable: !window_fullscreen, resizable: !window_fullscreen,
update_interval: 1000.0 / fps_target update_interval: 1000.0 / fps_target
).show )
if ARGV.join.include?("--profile")
begin
require "ruby-prof"
RubyProf.start
window.show
result = RubyProf.stop
printer = RubyProf::MultiPrinter.new(result)
printer.print(path: ".", profile: "profile", min_percent: 2)
rescue LoadError
puts "ruby-prof not installed!"
raise
end
else
window.show
end
end end

View File

@@ -7,21 +7,37 @@ class IMICFPS
# Widget margin from screen edge # Widget margin from screen edge
# or how much widget is pushed in # or how much widget is pushed in
def self.margin def self.vertical_margin
@@margin ||= 10 @@vertical_margin ||= 36
end end
def self.padding=(n) def self.vertical_margin=(n)
@@padding = n @@vertical_margin = n
end
def self.horizontal_margin
@@horizontal_margin ||= 10
end
def self.horizontal_margin=(n)
@@horizontal_margin = n
end end
# Widget element padding # Widget element padding
def self.padding def self.vertical_padding
@@margin ||= 10 @@vertical_padding ||= 10
end end
def self.padding=(n) def self.vertical_padding=(n)
@@padding = n @@vertical_padding = n
end
def self.horizontal_padding
@@horizontal_padding ||= 10
end
def self.horizontal_padding=(n)
@@horizontal_padding = n
end end
attr_reader :options attr_reader :options

View File

@@ -9,11 +9,11 @@ class IMICFPS
end end
def draw def draw
# Gosu.draw_rect( Gosu.draw_rect(
# @text.x - Widget.padding, @text.y - Widget.padding, @text.x - Widget.horizontal_padding, @text.y - Widget.vertical_padding,
# @text.width + Widget.padding * 2, @text.height + Widget.padding * 2, @text.width + Widget.horizontal_padding * 2, @text.height + Widget.vertical_padding * 2,
# @background @background
# ) )
@text.draw @text.draw
end end
@@ -23,8 +23,8 @@ class IMICFPS
@text.text = "#{random}/999" @text.text = "#{random}/999"
end end
@text.x = window.width - (Widget.margin + @text.width + Widget.padding) @text.x = window.width - (Widget.horizontal_margin + @text.width + Widget.horizontal_padding)
@text.y = window.height - (Widget.margin + @text.height + Widget.padding) @text.y = window.height - (Widget.vertical_margin + @text.height + Widget.vertical_padding)
end end
end end
end end

View File

@@ -12,8 +12,8 @@ class IMICFPS
return unless window.text_input return unless window.text_input
Gosu.draw_rect( Gosu.draw_rect(
@text.x - Widget.padding, @text.y - Widget.padding, @text.x - Widget.horizontal_padding, @text.y - Widget.horizontal_padding,
@text.width + Widget.padding * 2, @text.height + Widget.padding * 2, @text.width + Widget.vertical_padding * 2, @text.height + Widget.vertical_padding * 2,
@background @background
) )
@@ -37,8 +37,8 @@ class IMICFPS
end end
@text.text = text.to_s @text.text = text.to_s
@text.x = window.width / 2 - (Widget.margin + @text.width / 2 + Widget.padding) @text.x = window.width / 2 - (Widget.horizontal_margin + @text.width / 2 + Widget.horizontal_padding)
@text.y = window.height - (Widget.margin + @text.height + Widget.padding) @text.y = window.height - (Widget.vertical_margin + @text.height + Widget.vertical_padding)
end end
end end
end end

View File

@@ -9,7 +9,7 @@ class IMICFPS
@text = CyberarmEngine::Text.new( @text = CyberarmEngine::Text.new(
"", "",
size: 16, size: 16,
x: Widget.margin, y: Widget.margin, z: 45, x: Widget.horizontal_margin, y: Widget.vertical_margin, z: 45,
border_color: Gosu::Color::BLACK, border_color: Gosu::Color::BLACK,
font: BOLD_SANS_FONT font: BOLD_SANS_FONT
) )

View File

@@ -19,10 +19,10 @@ class IMICFPS
def draw def draw
@text.draw @text.draw
fill_quad( fill_quad(
window.width / 2 - @width / 2, @spacer + Widget.margin, # TOP LEFT window.width / 2 - @width / 2, @spacer + Widget.vertical_margin, # TOP LEFT
window.width / 2 + @width / 2, @spacer + Widget.margin, # TOP RIGHT window.width / 2 + @width / 2, @spacer + Widget.vertical_margin, # TOP RIGHT
window.width / 2 + @width / 2 - @slant, @spacer + Widget.margin + @height, # BOTTOM RIGHT window.width / 2 + @width / 2 - @slant, @spacer + Widget.vertical_margin + @height, # BOTTOM RIGHT
window.width / 2 - @width / 2 + @slant, @spacer + Widget.margin + @height, # BOTTOM LEFT window.width / 2 - @width / 2 + @slant, @spacer + Widget.vertical_margin + @height, # BOTTOM LEFT
@color @color
) )
@@ -31,10 +31,10 @@ class IMICFPS
# Current Health # Current Health
fill_quad( fill_quad(
window.width / 2 - @width / 2, @spacer + Widget.margin, # TOP LEFT window.width / 2 - @width / 2, @spacer + Widget.vertical_margin, # TOP LEFT
(window.width / 2 - @width / 2) + @width * @health, @spacer + Widget.margin, # TOP RIGHT (window.width / 2 - @width / 2) + @width * @health, @spacer + Widget.vertical_margin, # TOP RIGHT
bottom_right, @spacer + Widget.margin + @height, # BOTTOM RIGHT bottom_right, @spacer + Widget.vertical_margin + @height, # BOTTOM RIGHT
window.width / 2 - @width / 2 + @slant, @spacer + Widget.margin + @height, # BOTTOM LEFT window.width / 2 - @width / 2 + @slant, @spacer + Widget.vertical_margin + @height, # BOTTOM LEFT
@shield @shield
) )
end end
@@ -43,7 +43,7 @@ class IMICFPS
percentage = (@health * 100).round.to_s.rjust(3, "0") percentage = (@health * 100).round.to_s.rjust(3, "0")
@text.text = "[Health #{percentage}%]" @text.text = "[Health #{percentage}%]"
@text.x = window.width / 2 - @text.width / 2 @text.x = window.width / 2 - @text.width / 2
@text.y = @spacer + Widget.margin + @height / 2 - @text.height / 2 @text.y = @spacer + Widget.vertical_margin + @height / 2 - @text.height / 2
@health += 0.1 * window.dt @health += 0.1 * window.dt
@health = 0 if @health > 1.0 @health = 0 if @health > 1.0

View File

@@ -14,34 +14,39 @@ class IMICFPS
@text = Text.new("RADAR", size: 18, font: MONOSPACE_FONT, border: true, border_color: Gosu::Color::BLACK) @text = Text.new("RADAR", size: 18, font: MONOSPACE_FONT, border: true, border_color: Gosu::Color::BLACK)
@image = Gosu::Image.new("#{CYBERARM_ENGINE_ROOT_PATH}/assets/textures/default.png", retro: true) @image = Gosu::Image.new("#{CYBERARM_ENGINE_ROOT_PATH}/assets/textures/default.png", retro: true)
@scale = (@size - Widget.padding * 2.0) / @image.width @scale = (@size - Widget.horizontal_padding * 2.0) / @image.width
end end
def draw def draw
Gosu.draw_rect( Gosu.draw_rect(
Widget.margin, window.height - (@size + Widget.margin), Widget.horizontal_margin, window.height - (@size + Widget.vertical_margin),
@size, @size, @size, @size,
@border_color @border_color
) )
Gosu.draw_rect( Gosu.draw_rect(
Widget.margin + Widget.padding, window.height - (@size + Widget.margin) + Widget.padding, Widget.horizontal_margin + Widget.horizontal_padding,
@size - Widget.padding * 2, @size - Widget.padding * 2, window.height - (@size + Widget.vertical_margin) + Widget.vertical_padding,
@size - Widget.horizontal_padding * 2, @size - Widget.horizontal_padding * 2,
@radar_color @radar_color
) )
@image.draw(Widget.margin + Widget.padding, window.height - (@size + Widget.margin) + Widget.padding, 46, @scale, @scale, 0x88ffffff) @image.draw(
Widget.horizontal_margin + Widget.horizontal_padding,
window.height - (@size + Widget.vertical_margin) + Widget.vertical_padding,
46, @scale, @scale, 0x88ffffff
)
@text.draw @text.draw
end end
def update def update
@size = (window.width / @target_screen_width.to_f * @max_size).clamp(@min_size, @max_size) @size = (window.width / @target_screen_width.to_f * @max_size).clamp(@min_size, @max_size)
@scale = (@size - Widget.padding * 2.0) / @image.width @scale = (@size - Widget.horizontal_padding * 2.0) / @image.width
@text.text = "X: #{@player.position.x.round(1)} Y: #{@player.position.y.round(1)} Z: #{@player.position.z.round(1)}" @text.text = "X: #{@player.position.x.round(1)} Y: #{@player.position.y.round(1)} Z: #{@player.position.z.round(1)}"
@text.x = Widget.margin + @size / 2 - @text.width / 2 @text.x = Widget.horizontal_margin + @size / 2 - @text.width / 2
@text.y = window.height - (Widget.margin + @size + @text.height) @text.y = window.height - (Widget.vertical_margin + @size + @text.height)
end end
end end
end end

View File

@@ -9,7 +9,7 @@ class IMICFPS
@text = CyberarmEngine::Text.new( @text = CyberarmEngine::Text.new(
"", "",
size: 16, size: 16,
x: Widget.margin, y: Widget.margin, z: 45, x: Widget.horizontal_margin, y: Widget.vertical_margin, z: 45,
border: true, border: true,
border_color: Gosu::Color::BLACK, border_color: Gosu::Color::BLACK,
font: BOLD_SANS_FONT font: BOLD_SANS_FONT
@@ -23,7 +23,7 @@ class IMICFPS
end end
def update def update
@text.x = window.width - (@text.markup_width + Widget.margin) @text.x = window.width - (@text.markup_width + Widget.horizontal_margin)
end end
def generate_random_data def generate_random_data

View File

@@ -28,8 +28,8 @@ class IMICFPS
def update def update
@size = (window.width / @target_screen_width.to_f * @max_size).clamp(@min_size, @max_size) @size = (window.width / @target_screen_width.to_f * @max_size).clamp(@min_size, @max_size)
@text.x = Widget.margin + @size + Widget.padding @text.x = Widget.horizontal_margin + @size + Widget.horizontal_padding
@text.y = window.height - (Widget.margin + @text.height) @text.y = window.height - (Widget.vertical_margin + @text.height)
end end
end end
end end

View File

@@ -27,7 +27,7 @@ class IMICFPS
def draw def draw
window.director.map.render(@camera) window.director.map.render(@camera)
@hud.draw @hud.draw if window.config.get(:options, :hud)
end end
def update def update

View File

@@ -0,0 +1,43 @@
# frozen_string_literal: true
class IMICFPS
class Commands
class HUDCommand < Command
def group
:global
end
def command
:hud
end
def setup
$window.config[:options, :hud] = true if $window.config.get(:options, :hud).nil?
end
def handle(arguments, console)
if arguments.size > 1
console.stdin("to many arguments for #{Style.highlight(command.to_s)}, got #{Style.error(arguments.size)} expected #{Style.notice(1)}.")
return
end
case arguments.last
when "", nil
console.stdin("#{Style.highlight(command.to_s)}: #{$window.config.get(:options, command)}")
when "on"
var = $window.config[:options, command] = true
console.stdin("fps => #{Style.highlight(var)}")
when "off"
var = $window.config[:options, command] = false
console.stdin("fps => #{Style.highlight(var)}")
else
console.stdin("Invalid argument for #{Style.highlight(command.to_s)}, got #{Style.error(arguments.last)} expected #{Style.notice('on')}, or #{Style.notice('off')}.")
end
end
def usage
"#{Style.highlight('hud')} #{Style.notice('[on|off]')}"
end
end
end
end