8 Commits

25 changed files with 346 additions and 106 deletions

View File

@@ -42,7 +42,7 @@ class Hello < CyberarmEngine::GuiState
end end
end end
class Window < CyberarmEngine::Engine class Window < CyberarmEngine::Window
def initialize def initialize
super super
self.show_cursor = true self.show_cursor = true

View File

@@ -29,8 +29,9 @@ Gem::Specification.new do |spec|
spec.require_paths = ["lib"] spec.require_paths = ["lib"]
spec.add_dependency "gosu", "~> 0.15.0" spec.add_dependency "gosu", "~> 0.15.0"
spec.add_dependency "gosu_more_drawables", "~> 0.3"
spec.add_development_dependency "bundler", "~> 1.16" spec.add_development_dependency "bundler", "~> 1.16"
spec.add_development_dependency "rake", "~> 10.0" spec.add_development_dependency "rake", "~> 13.0"
spec.add_development_dependency "minitest", "~> 5.0" spec.add_development_dependency "minitest", "~> 5.0"
end end

View File

@@ -5,15 +5,15 @@ rescue LoadError => e
require "gosu" require "gosu"
end end
require "json" require "json"
require "gosu_more_drawables"
require_relative "cyberarm_engine/version" require_relative "cyberarm_engine/version"
require_relative "cyberarm_engine/stats"
require_relative "cyberarm_engine/common" require_relative "cyberarm_engine/common"
require_relative "cyberarm_engine/gosu_ext/circle"
require_relative "cyberarm_engine/game_object" require_relative "cyberarm_engine/game_object"
require_relative "cyberarm_engine/engine" require_relative "cyberarm_engine/window"
require_relative "cyberarm_engine/bounding_box" require_relative "cyberarm_engine/bounding_box"
require_relative "cyberarm_engine/vector" require_relative "cyberarm_engine/vector"
@@ -35,15 +35,19 @@ require_relative "cyberarm_engine/ui/style"
require_relative "cyberarm_engine/ui/border_canvas" require_relative "cyberarm_engine/ui/border_canvas"
require_relative "cyberarm_engine/ui/element" require_relative "cyberarm_engine/ui/element"
require_relative "cyberarm_engine/ui/elements/label" require_relative "cyberarm_engine/ui/elements/label"
require_relative "cyberarm_engine/ui/elements/list_box"
require_relative "cyberarm_engine/ui/elements/button" require_relative "cyberarm_engine/ui/elements/button"
require_relative "cyberarm_engine/ui/elements/toggle_button" require_relative "cyberarm_engine/ui/elements/toggle_button"
require_relative "cyberarm_engine/ui/elements/edit_line" require_relative "cyberarm_engine/ui/elements/edit_line"
require_relative "cyberarm_engine/ui/elements/edit_box"
require_relative "cyberarm_engine/ui/elements/image" require_relative "cyberarm_engine/ui/elements/image"
require_relative "cyberarm_engine/ui/elements/container" require_relative "cyberarm_engine/ui/elements/container"
require_relative "cyberarm_engine/ui/elements/flow" require_relative "cyberarm_engine/ui/elements/flow"
require_relative "cyberarm_engine/ui/elements/stack" require_relative "cyberarm_engine/ui/elements/stack"
require_relative "cyberarm_engine/ui/elements/check_box" require_relative "cyberarm_engine/ui/elements/check_box"
require_relative "cyberarm_engine/ui/elements/radio"
require_relative "cyberarm_engine/ui/elements/progress" require_relative "cyberarm_engine/ui/elements/progress"
require_relative "cyberarm_engine/ui/elements/slider"
require_relative "cyberarm_engine/game_state" require_relative "cyberarm_engine/game_state"
require_relative "cyberarm_engine/ui/gui_state" require_relative "cyberarm_engine/ui/gui_state"

View File

@@ -78,15 +78,15 @@ module CyberarmEngine
end end
def get_image(path, retro: false, tileable: false) def get_image(path, retro: false, tileable: false)
get_asset(path, Engine::IMAGES, Gosu::Image, retro, tileable) get_asset(path, Window::IMAGES, Gosu::Image, retro, tileable)
end end
def get_sample(path) def get_sample(path)
get_asset(path, Engine::SAMPLES, Gosu::Sample) get_asset(path, Window::SAMPLES, Gosu::Sample)
end end
def get_song(path) def get_song(path)
get_asset(path, Engine::SONGS, Gosu::Song) get_asset(path, Window::SONGS, Gosu::Song)
end end
def window def window

View File

@@ -1,9 +0,0 @@
module Gosu
# Sourced from https://gist.github.com/ippa/662583
def self.draw_circle(cx,cy,r, z = 9999,color = Gosu::Color::GREEN, step = 10)
0.step(360, step) do |a1|
a2 = a1 + step
draw_line(cx + Gosu.offset_x(a1, r), cy + Gosu.offset_y(a1, r), color, cx + Gosu.offset_x(a2, r), cy + Gosu.offset_y(a2, r), color, z)
end
end
end

View File

@@ -0,0 +1,21 @@
module CyberarmEngine
class Stats
@@hash = {
gui_recalculations_last_frame: 0
}
def self.get(key)
@@hash.dig(key)
end
def self.increment(key, n)
@@hash[key] += n
end
def self.clear
@@hash.each do |key, value|
@@hash[key] = 0
end
end
end
end

View File

@@ -9,7 +9,7 @@ module CyberarmEngine
@text = text.to_s || "" @text = text.to_s || ""
@options = options @options = options
@size = options[:size] || 18 @size = options[:size] || 18
@font = options[:font] || "sans-serif"#Gosu.default_font_name @font = options[:font] || Gosu.default_font_name
@x = options[:x] || 0 @x = options[:x] || 0
@y = options[:y] || 0 @y = options[:y] || 0
@z = options[:z] || 1025 @z = options[:z] || 1025
@@ -98,12 +98,12 @@ module CyberarmEngine
@shadow_color = n @shadow_color = n
end end
def width def width(text = @text)
textobject.text_width(@text) textobject.text_width(text)
end end
def height def height(text = @text)
@text.lines.count > 0 ? (@text.lines.count) * textobject.height : @textobject.height text.lines.count > 0 ? (text.lines.count) * textobject.height : @textobject.height
end end
def draw def draw

View File

@@ -57,6 +57,13 @@ module CyberarmEngine
add_element( Element::Progress.new(options, block) ) add_element( Element::Progress.new(options, block) )
end end
def slider(options = {}, &block)
options[:parent] = element_parent
options[:theme] = current_theme
add_element( Element::Slider.new(options, block) )
end
def background(color = Gosu::Color::NONE) def background(color = Gosu::Color::NONE)
element_parent.style.background = color element_parent.style.background = color
end end

View File

@@ -4,7 +4,7 @@ module CyberarmEngine
include Event include Event
include Common include Common
attr_accessor :x, :y, :z, :enabled attr_accessor :x, :y, :z, :enabled, :tip
attr_reader :parent, :options, :style, :event_handler, :background_canvas, :border_canvas attr_reader :parent, :options, :style, :event_handler, :background_canvas, :border_canvas
def initialize(options = {}, block = nil) def initialize(options = {}, block = nil)
@@ -16,6 +16,7 @@ module CyberarmEngine
@focus = false @focus = false
@enabled = true @enabled = true
@visible = true @visible = true
@tip = @options[:tip] ? @options[:tip] : ""
@style = Style.new(options) @style = Style.new(options)
@@ -110,6 +111,8 @@ module CyberarmEngine
event(:leave) event(:leave)
event(:blur) event(:blur)
event(:changed)
end end
def enabled? def enabled?
@@ -152,6 +155,10 @@ module CyberarmEngine
def button_up(id) def button_up(id)
end end
def draggable?(button)
false
end
def render def render
end end
@@ -212,7 +219,7 @@ module CyberarmEngine
raise "dimension must be either :width or :height" unless dimension == :width || dimension == :height raise "dimension must be either :width or :height" unless dimension == :width || dimension == :height
if size && size.is_a?(Numeric) if size && size.is_a?(Numeric)
if size.between?(0.0, 1.0) if size.between?(0.0, 1.0)
((@parent.send(:"content_#{dimension}") - self.send(:"noncontent_#{dimension}") - 1) * size).round ((@parent.send(:"content_#{dimension}") - self.send(:"noncontent_#{dimension}")) * size).round
else else
size size
end end
@@ -239,6 +246,8 @@ module CyberarmEngine
end end
def root def root
return self if is_root?
unless @root && @root.parent.nil? unless @root && @root.parent.nil?
@root = parent @root = parent
@@ -272,5 +281,9 @@ module CyberarmEngine
def value=(value) def value=(value)
raise "#{self.class}#value= was not overridden!" raise "#{self.class}#value= was not overridden!"
end end
def to_s
"#{self.class} x=#{x} y=#{y} width=#{width} height=#{height} value=#{ value.is_a?(String) ? "\"#{value}\"" : value }"
end
end end
end end

View File

@@ -2,13 +2,32 @@ module CyberarmEngine
class Element class Element
class CheckBox < Flow class CheckBox < Flow
def initialize(text, options, block = nil) def initialize(text, options, block = nil)
super({}, block = nil) super(options, block)
options[:toggled] = options[:checked] options[:toggled] = options[:checked]
@toggle_button = ToggleButton.new(options) @toggle_button = ToggleButton.new(options)
@label = Label.new(text, options) @label = Label.new(text, options)
define_label_singletons @label.subscribe(:holding_left_mouse_button) do |sender, x, y|
@toggle_button.left_mouse_button(sender, x, y)
end
@label.subscribe(:released_left_mouse_button) do |sender, x, y|
@toggle_button.released_left_mouse_button(sender, x, y)
end
@label.subscribe(:clicked_left_mouse_button) do |sender, x, y|
@toggle_button.clicked_left_mouse_button(sender, x, y)
publish(:changed, @toggle_button.value)
end
@label.subscribe(:enter) do |sender|
@toggle_button.enter(sender)
end
@label.subscribe(:leave) do |sender|
@toggle_button.leave(sender)
end
add(@toggle_button) add(@toggle_button)
add(@label) add(@label)
@@ -24,35 +43,8 @@ module CyberarmEngine
end end
def value=(bool) def value=(bool)
@toggle_button.vlaue = bool @toggle_button.value = bool
end publish(:changed, @toggle_button.value)
def define_label_singletons
@label.define_singleton_method(:_toggle_button) do |button|
@_toggle_button = button
end
@label._toggle_button(@toggle_button)
@label.define_singleton_method(:holding_left_mouse_button) do |sender, x, y|
@_toggle_button.left_mouse_button(sender, x, y)
end
@label.define_singleton_method(:released_left_mouse_button) do |sender, x, y|
@_toggle_button.released_left_mouse_button(sender, x, y)
end
@label.define_singleton_method(:clicked_left_mouse_button) do |sender, x, y|
@_toggle_button.clicked_left_mouse_button(sender, x, y)
end
@label.define_singleton_method(:enter) do |sender|
@_toggle_button.enter(sender)
end
@label.define_singleton_method(:leave) do |sender|
@_toggle_button.leave(sender)
end
end end
end end
end end

View File

@@ -22,13 +22,13 @@ module CyberarmEngine
def build def build
@block.call(self) if @block @block.call(self) if @block
recalculate root.gui_state.request_recalculate
end end
def add(element) def add(element)
@children << element @children << element
recalculate root.gui_state.request_recalculate
end end
def clear(&block) def clear(&block)
@@ -41,7 +41,6 @@ module CyberarmEngine
$__current_container__ = old_container $__current_container__ = old_container
recalculate
root.gui_state.request_recalculate root.gui_state.request_recalculate
end end
@@ -57,6 +56,8 @@ module CyberarmEngine
def hit_element?(x, y) def hit_element?(x, y)
@children.reverse_each do |child| @children.reverse_each do |child|
next unless child.visible?
case child case child
when Container when Container
if element = child.hit_element?(x, y) if element = child.hit_element?(x, y)
@@ -73,6 +74,9 @@ module CyberarmEngine
def recalculate def recalculate
@current_position = Vector.new(@style.margin_left + @style.padding_left, @style.margin_top + @style.padding_top) @current_position = Vector.new(@style.margin_left + @style.padding_left, @style.margin_top + @style.padding_top)
return unless visible? return unless visible?
Stats.increment(:gui_recalculations_last_frame, 1)
stylize stylize
layout layout
@@ -90,15 +94,16 @@ module CyberarmEngine
@height = _height ? _height : (@children.map {|c| c.y + c.outer_height}.max || 0).round @height = _height ? _height : (@children.map {|c| c.y + c.outer_height}.max || 0).round
end end
# Move child to parent after positioning # Move child to parent after positioning
@children.each do |child| @children.each do |child|
child.x += @x child.x += (@x + @style.border_thickness_left) - style.margin_left
child.y += @y child.y += (@y + @style.border_thickness_top) - style.margin_top
child.stylize child.stylize
child.recalculate child.recalculate
child.reposition # TODO: Implement top,bottom,left,center, and right positioning child.reposition # TODO: Implement top,bottom,left,center, and right positioning
Stats.increment(:gui_recalculations_last_frame, 1)
end end
update_background update_background
@@ -109,10 +114,12 @@ module CyberarmEngine
end end
def max_width def max_width
@max_width ? @max_width : window.width - (@parent ? @parent.style.margin_right + @style.margin_right : @style.margin_right) _width = dimensional_size(@style.width, :width)
_width ? outer_width : window.width - (@parent ? @parent.style.margin_right + @style.margin_right : @style.margin_right)
end end
def fits_on_line?(element) # Flow def fits_on_line?(element) # Flow
p [@options[:id], @width] if @options[:id]
@current_position.x + element.outer_width <= max_width && @current_position.x + element.outer_width <= max_width &&
@current_position.x + element.outer_width <= window.width @current_position.x + element.outer_width <= window.width
end end
@@ -171,6 +178,25 @@ module CyberarmEngine
def value def value
@children.map {|c| c.class}.join(", ") @children.map {|c| c.class}.join(", ")
end end
def to_s
"#{self.class} x=#{x} y=#{y} width=#{width} height=#{height} children=#{@children.size}"
end
def write_tree(indent = "", index = 0)
puts self
indent = indent + " "
@children.each_with_index do |child, i|
print "#{indent}#{i}: "
if child.is_a?(Container)
child.write_tree(indent)
else
puts child
end
end
end
end end
end end
end end

View File

@@ -0,0 +1,6 @@
module CyberarmEngine
class Element
class EditBox < Element
end
end
end

View File

@@ -100,6 +100,22 @@ module CyberarmEngine
end end
end end
def caret_position
text_input_position_for(:caret_pos)
end
def selection_start_position
text_input_position_for(:selection_start)
end
def text_input_position_for(method)
if @type == :password
@text.x + @text.width(default(:password_character) * @text_input.text[0..@text_input.send(method)].length)
else
@text.x + @text.width(@text_input.text[0..@text_input.send(method)])
end
end
def left_mouse_button(sender, x, y) def left_mouse_button(sender, x, y)
super super
window.text_input = @text_input window.text_input = @text_input
@@ -141,22 +157,6 @@ module CyberarmEngine
return :handled return :handled
end end
def caret_position
text_input_position_for(:caret_pos)
end
def selection_start_position
text_input_position_for(:selection_start)
end
def text_input_position_for(method)
if @type == :password
@text.x + @text.textobject.text_width(default(:password_character) * @text_input.text[0..@text_input.send(method)].length)
else
@text.x + @text.textobject.text_width(@text_input.text[0..@text_input.send(method)])
end
end
def recalculate def recalculate
super super

View File

@@ -1,8 +1,6 @@
module CyberarmEngine module CyberarmEngine
class Element class Element
class Flow < Container class Flow < Container
include Common
def layout def layout
@children.each do |child| @children.each do |child|
if fits_on_line?(child) if fits_on_line?(child)

View File

@@ -14,7 +14,7 @@ module CyberarmEngine
def clicked_left_mouse_button(sender, x, y) def clicked_left_mouse_button(sender, x, y)
@block.call(self) if @block @block.call(self) if @block
return :handled # return :handled
end end
def recalculate def recalculate
@@ -44,6 +44,8 @@ module CyberarmEngine
recalculate recalculate
root.gui_state.request_recalculate if old_width != width || old_height != height root.gui_state.request_recalculate if old_width != width || old_height != height
publish(:changed, self.value)
end end
end end
end end

View File

@@ -0,0 +1,6 @@
module CyberarmEngine
class Element
class ListBox < Element
end
end
end

View File

@@ -43,6 +43,7 @@ module CyberarmEngine
@fraction = decimal.clamp(0.0, 1.0) @fraction = decimal.clamp(0.0, 1.0)
update_background update_background
publish(:changed, @fraction)
return @fraction return @fraction
end end
end end

View File

@@ -0,0 +1,6 @@
module CyberarmEngine
class Element
class Radio < Element
end
end
end

View File

@@ -0,0 +1,107 @@
module CyberarmEngine
class Element
class Slider < Container
class Handle < Button
def initialize(*args)
super(*args)
event(:begin_drag)
event(:drag_update)
event(:end_drag)
subscribe :begin_drag do |sender, x, y, button|
@drag_start_pos = Vector.new(x, y)
:handled
end
subscribe :drag_update do |sender, x, y, button|
@parent.handle_dragged_to(x, y)
:handled
end
subscribe :end_drag do
@drag_start_pos = nil
:handled
end
end
def draggable?(button)
button == :left
end
end
attr_reader :range, :step_size
def initialize(options = {}, block = nil)
super(options, block)
@range = @options[:range] ? @options[:range] : 0.0..1.0
@step_size = @options[:step] ? @options[:step] : 0.1
@value = @options[:value] ? @options[:value] : (@range.first + @range.last) / 2
@handle = Handle.new("", parent: self, width: 8, height: 1.0) { close }
self.add(@handle)
end
def recalculate
_width = dimensional_size(@style.width, :width)
_height= dimensional_size(@style.height,:height)
@width = _width
@height = _height
position_handle
@handle.recalculate
@handle.update_background
update_background
end
def position_handle
@handle.x = @x + @style.padding_left + @style.border_thickness_left +
((content_width - @handle.outer_width) * (@value - @range.min) / (@range.max - @range.min).to_f)
@handle.y = @y + @style.border_thickness_top + @style.padding_top
end
def draw
super
@handle.draw
end
def update
super
@tip = value.to_s
@handle.tip = @tip
end
def holding_left_mouse_button(sender, x, y)
handle_dragged_to(x, y)
:handled
end
def handle_dragged_to(x, y)
@ratio = ((x - @handle.width / 2) - @x) / (content_width - @handle.outer_width)
self.value = @ratio.clamp(0.0, 1.0) * (@range.max - @range.min) + @range.min
end
def value
@value
end
def value=(n)
@value = n
position_handle
@handle.recalculate
publish(:changed, @value)
end
end
end
end

View File

@@ -1,8 +1,6 @@
module CyberarmEngine module CyberarmEngine
class Element class Element
class Stack < Container class Stack < Container
include Common
def layout def layout
@children.each do |child| @children.each do |child|
move_to_next_line(child) move_to_next_line(child)

View File

@@ -5,8 +5,8 @@ module CyberarmEngine
def initialize(options, block = nil) def initialize(options, block = nil)
super(options[:checkmark], options, block) super(options[:checkmark], options, block)
@toggled = options[:toggled] || false @value = options[:checked] || false
if @toggled if @value
@text.text = @options[:checkmark] @text.text = @options[:checkmark]
else else
@text.text = "" @text.text = ""
@@ -15,41 +15,42 @@ module CyberarmEngine
return self return self
end end
def toggled=(boolean)
@toggled = !boolean
toggle
end
def clicked_left_mouse_button(sender, x, y) def clicked_left_mouse_button(sender, x, y)
toggle self.value = !@value
@block.call(self) if @block @block.call(self) if @block
return :handled return :handled
end end
def toggle
if @toggled
@toggled = false
@text.text = ""
else
@toggled = true
@text.text = @options[:checkmark]
end
end
def recalculate def recalculate
super super
_width = dimensional_size(@style.width, :width) _width = dimensional_size(@style.width, :width)
_height= dimensional_size(@style.height,:height) _height= dimensional_size(@style.height,:height)
@width = _width ? _width : @text.textobject.text_width(@options[:checkmark]) @width = _width ? _width : @text.textobject.text_width(@options[:checkmark])
@height = _height ? _height : @text.height @height = _height ? _height : @text.height
update_background update_background
end end
def value def value
@toggled @value
end
def value=(boolean)
@value = boolean
if boolean
@text.text = @options[:checkmark]
else
@text.text = ""
end
recalculate
publish(:changed, @value)
end end
end end
end end

View File

@@ -22,6 +22,11 @@ module CyberarmEngine
@mouse_down_on = {} @mouse_down_on = {}
@mouse_down_position = {} @mouse_down_position = {}
@pending_recalculate_request = false @pending_recalculate_request = false
@tip = CyberarmEngine::Text.new("", size: 22, z: Float::INFINITY)
@menu = nil
@min_drag_distance = 0
@mouse_pos = Vector.new
end end
# throws :blur event to focused element and sets GuiState focused element # throws :blur event to focused element and sets GuiState focused element
@@ -35,8 +40,18 @@ module CyberarmEngine
@focus @focus
end end
def draw
super
if @tip.text.length > 0
Gosu.draw_rect(@tip.x - 2, @tip.y - 2, @tip.width + 4, @tip.height + 4, 0xff020202, Float::INFINITY)
@tip.draw
end
end
def update def update
if @pending_recalculate_request if @pending_recalculate_request
@root_container.recalculate
@root_container.recalculate @root_container.recalculate
@pending_recalculate_request = false @pending_recalculate_request = false
end end
@@ -56,12 +71,30 @@ module CyberarmEngine
redirect_holding_mouse_button(:middle) if @mouse_over && Gosu.button_down?(Gosu::MsMiddle) redirect_holding_mouse_button(:middle) if @mouse_over && Gosu.button_down?(Gosu::MsMiddle)
redirect_holding_mouse_button(:right) if @mouse_over && Gosu.button_down?(Gosu::MsRight) redirect_holding_mouse_button(:right) if @mouse_over && Gosu.button_down?(Gosu::MsRight)
if Vector.new(window.mouse_x, window.mouse_y) == @last_mouse_pos
if @mouse_over && (Gosu.milliseconds - @mouse_moved_at) > tool_tip_delay
@tip.text = @mouse_over.tip if @mouse_over
@tip.x, @tip.y = window.mouse_x - @tip.width / 2, window.mouse_y - @tip.height - 4
else
@tip.text = ""
end
else
@mouse_moved_at = Gosu.milliseconds
end
@last_mouse_pos = Vector.new(window.mouse_x, window.mouse_y)
@mouse_pos = @last_mouse_pos.clone
request_recalculate if @active_width != window.width || @active_height != window.height request_recalculate if @active_width != window.width || @active_height != window.height
@active_width = window.width @active_width = window.width
@active_height = window.height @active_height = window.height
end end
def tool_tip_delay
500 # ms
end
def button_down(id) def button_down(id)
super super
@@ -72,6 +105,8 @@ module CyberarmEngine
redirect_mouse_button(:middle) redirect_mouse_button(:middle)
when Gosu::MsRight when Gosu::MsRight
redirect_mouse_button(:right) redirect_mouse_button(:right)
when Gosu::KbF5
request_recalculate
end end
end end
@@ -115,12 +150,26 @@ module CyberarmEngine
@mouse_over.publish(:"clicked_#{button}_mouse_button", window.mouse_x, window.mouse_y) if @mouse_over == @mouse_down_on[button] @mouse_over.publish(:"clicked_#{button}_mouse_button", window.mouse_x, window.mouse_y) if @mouse_over == @mouse_down_on[button]
end end
if @dragging_element
@dragging_element.publish(:end_drag, window.mouse_x, window.mouse_y, button)
@dragging_element = nil
end
@mouse_down_position[button] = nil @mouse_down_position[button] = nil
@mouse_down_on[button] = nil @mouse_down_on[button] = nil
end end
def redirect_holding_mouse_button(button) def redirect_holding_mouse_button(button)
@mouse_over.publish(:"holding_#{button}_mouse_button", window.mouse_x, window.mouse_y) if @mouse_over if !@dragging_element && @mouse_down_on[button] && @mouse_down_on[button].draggable?(button) && @mouse_pos.distance(@mouse_down_position[button]) > @min_drag_distance
@dragging_element = @mouse_down_on[button]
@dragging_element.publish(:"begin_drag", window.mouse_x, window.mouse_y, button)
end
if @dragging_element
@dragging_element.publish(:"drag_update", window.mouse_x, window.mouse_y, button) if @dragging_element
else
@mouse_over.publish(:"holding_#{button}_mouse_button", window.mouse_x, window.mouse_y) if @mouse_over
end
end end
def redirect_mouse_wheel(button) def redirect_mouse_wheel(button)

View File

@@ -88,7 +88,7 @@ module CyberarmEngine
caret_width: 2, caret_width: 2,
caret_color: Gosu::Color::WHITE, caret_color: Gosu::Color::WHITE,
caret_interval: 500, caret_interval: 500,
selection_color: Gosu::Color::GREEN, selection_color: Gosu::Color.rgba(255, 128, 50, 200),
}, },
Image: { # < Element Image: { # < Element
@@ -114,6 +114,15 @@ module CyberarmEngine
fraction_background: [0xffc75e61, 0xffe26623], fraction_background: [0xffc75e61, 0xffe26623],
border_thickness: 1, border_thickness: 1,
border_color: [0xffd59674, 0xffff8746] border_color: [0xffd59674, 0xffff8746]
},
Slider: { # < Element
width: 250,
height: 36,
background: 0xff111111,
fraction_background: [0xffc75e61, 0xffe26623],
border_thickness: 1,
border_color: [0xffd59674, 0xffff8746]
} }
}.freeze }.freeze
end end

View File

@@ -1,4 +1,4 @@
module CyberarmEngine module CyberarmEngine
NAME = "InDev" NAME = "InDev"
VERSION = "0.13.1" VERSION = "0.14.0"
end end

View File

@@ -1,5 +1,5 @@
module CyberarmEngine module CyberarmEngine
class Engine < Gosu::Window class Window < Gosu::Window
IMAGES = {} IMAGES = {}
SAMPLES= {} SAMPLES= {}
SONGS = {} SONGS = {}
@@ -34,6 +34,8 @@ module CyberarmEngine
end end
def update def update
Stats.clear
current_state.update if current_state current_state.update if current_state
@last_frame_time = Gosu.milliseconds-@current_frame_time @last_frame_time = Gosu.milliseconds-@current_frame_time
@current_frame_time = Gosu.milliseconds @current_frame_time = Gosu.milliseconds