10 Commits

14 changed files with 114 additions and 12 deletions

View File

@@ -48,6 +48,12 @@ module CyberarmEngine
end
end
def opacity(color, ratio = 1.0)
alpha = 255 * ratio
return Gosu::Color.rgba(color.red, color.green, color.blue, alpha)
end
def get_asset(path, hash, klass)
asset = nil
hash.detect do |_asset, instance|

View File

@@ -2,9 +2,23 @@ module CyberarmEngine
class BoundingBox
attr_accessor :min, :max
def initialize(minx = 0, miny = 0, minz = 0, maxx = 0, maxy = 0, maxz = 0)
@min = Vector.new(minx, miny, minz)
@max = Vector.new(maxx, maxy, maxz)
def initialize(*args)
case args.size
when 0
@min = Vector.new(0, 0, 0)
@max = Vector.new(0, 0, 0)
when 2
@min = args.first.clone
@max = args.last.clone
when 4
@min = Vector.new(args[0], args[1], 0)
@max = Vector.new(args[2], args[3], 0)
when 6
@min = Vector.new(args[0], args[1], args[2])
@max = Vector.new(args[3], args[4], args[5])
else
raise "Invalid number of arguments! Got: #{args.size}, expected: 0, 2, 4, or 6."
end
end
def ==(other)

View File

@@ -31,7 +31,7 @@ module CyberarmEngine
end
# Performs math operation, excluding @weight
def operator(function, other)
private def operator(function, other)
if other.is_a?(Numeric)
Vector.new(
@x.send(:"#{function}", other),
@@ -160,5 +160,9 @@ module CyberarmEngine
def to_s
"X: #{@x}, Y: #{@y}, Z: #{@z}, Weight: #{@weight}"
end
def to_h
{x: @x, y: @y, z: @z, weight: @weight}
end
end
end

View File

@@ -6,7 +6,7 @@ module CyberarmEngine
attr_reader :text, :textobject
def initialize(text, options={})
@text = text || ""
@text = text.to_s || ""
@options = options
@size = options[:size] || 18
@font = options[:font] || "sans-serif"#Gosu.default_font_name
@@ -72,7 +72,7 @@ module CyberarmEngine
end
def height
(@text.lines.count) * textobject.height
@text.lines.count > 0 ? (@text.lines.count) * textobject.height : @textobject.height
end
def draw

View File

@@ -21,6 +21,14 @@ module CyberarmEngine
recalculate
end
def value
@toggle_button.value
end
def value=(bool)
@toggle_button.vlaue = bool
end
def define_label_singletons
@label.define_singleton_method(:_toggle_button) do |button|
@_toggle_button = button

View File

@@ -65,6 +65,11 @@ module CyberarmEngine
def recalculate
@current_position = Vector.new(@margin_left, @margin_top)
unless @visible
@width = 0
@height= 0
return
end
layout

View File

@@ -2,6 +2,7 @@ module CyberarmEngine
module DSL
def flow(options = {}, &block)
options[:parent] = @containers.last
options[:theme] = @current_theme
_container = Flow.new(options, block)
@containers << _container
_container.build
@@ -13,6 +14,7 @@ module CyberarmEngine
def stack(options = {}, &block)
options[:parent] = @containers.last
options[:theme] = @current_theme
_container = Stack.new(options, block)
@containers << _container
_container.build
@@ -24,6 +26,7 @@ module CyberarmEngine
def label(text, options = {}, &block)
options[:parent] = @containers.last
options[:theme] = @current_theme
_element = Label.new(text, options, block)
@containers.last.add(_element)
@@ -32,6 +35,7 @@ module CyberarmEngine
def button(text, options = {}, &block)
options[:parent] = @containers.last
options[:theme] = @current_theme
_element = Button.new(text, options, block) { if block.is_a?(Proc); block.call; end }
@containers.last.add(_element)
@@ -40,6 +44,7 @@ module CyberarmEngine
def edit_line(text, options = {}, &block)
options[:parent] = @containers.last
options[:theme] = @current_theme
_element = EditLine.new(text, options, block)
@containers.last.add(_element)
@@ -48,6 +53,7 @@ module CyberarmEngine
def toggle_button(options = {}, &block)
options[:parent] = @containers.last
options[:theme] = @current_theme
_element = ToggleButton.new(options, block)
@containers.last.add(_element)
@@ -56,6 +62,7 @@ module CyberarmEngine
def check_box(text, options = {}, &block)
options[:parent] = @containers.last
options[:theme] = @current_theme
_element = CheckBox.new(text, options, block)
@containers.last.add(_element)
@@ -64,6 +71,7 @@ module CyberarmEngine
def image(path, options = {}, &block)
options[:parent] = @containers.last
options[:theme] = @current_theme
_element = Image.new(path, options, block)
@containers.last.add(_element)
@@ -78,5 +86,9 @@ module CyberarmEngine
def color(color)
@containers.last.color(color)
end
def set_theme(theme)
@current_theme = theme
end
end
end

View File

@@ -77,6 +77,12 @@ module CyberarmEngine
def recalculate
super
unless @visible
@width = 0
@height= 0
return
end
@width = default(:width)
update_background
end

View File

@@ -15,7 +15,7 @@ module CyberarmEngine
def initialize(options = {}, block = nil)
@parent = options[:parent] # parent Container (i.e. flow/stack)
options = theme_defaults.merge(options)
options = theme_defaults(options)
@options = options
@block = block
@@ -53,6 +53,7 @@ module CyberarmEngine
# raise "#{self.class} 'padding' must be a number" unless @padding.is_a?(Numeric)
@enabled = true
@visible = true
default_events
end
@@ -122,7 +123,28 @@ module CyberarmEngine
@enabled
end
def visible?
@visible
end
def toggle
@visible = !@visible
root.recalculate
end
def show
@visible = true
root.recalculate
end
def hide
@visible = false
root.recalculate
end
def draw
return unless @visible
@background_canvas.draw
@border_canvas.draw
render
@@ -206,6 +228,10 @@ module CyberarmEngine
raise "#{self.class}#recalculate was not overridden!"
end
def reposition
raise "#{self.class}#reposition was not overridden!"
end
def value
raise "#{self.class}#value was not overridden!"
end

View File

@@ -31,6 +31,12 @@ module CyberarmEngine
end
def recalculate
unless @visible
@width = 0
@height= 0
return
end
@width = @image.width * @scale_x
@height = @image.height * @scale_y
end

View File

@@ -17,6 +17,12 @@ module CyberarmEngine
end
def recalculate
unless @visible
@width = 0
@height= 0
return
end
@width = @text.width.round
@height= @text.height.round

View File

@@ -9,21 +9,24 @@ module CyberarmEngine
value
end
def theme_defaults
def theme_defaults(options)
raise "Error" unless self.class.ancestors.include?(CyberarmEngine::Element)
_theme = THEME
_theme = _theme.merge(options[:theme]) if options[:theme]
options.delete(:theme)
hash = {}
class_names = self.class.ancestors
class_names = class_names[0..class_names.index(CyberarmEngine::Element)].map! {|c| c.to_s.split("::").last.to_sym}.reverse!
class_names.each do |klass|
next unless data = THEME.dig(klass)
next unless data = _theme.dig(klass)
data.each do |key, value|
hash.merge!(data)
end
end
hash
hash.merge(options)
end
THEME = {
@@ -86,6 +89,6 @@ module CyberarmEngine
ToggleButton: { # < Button
checkmark: ""
}
}
}.freeze
end
end

View File

@@ -38,6 +38,12 @@ module CyberarmEngine
def recalculate
super
unless @visible
@width = 0
@height= 0
return
end
@width = @text.textobject.text_width(@options[:checkmark])
update_background
end

View File

@@ -1,4 +1,4 @@
module CyberarmEngine
NAME = "InDev"
VERSION = "0.3.0"
VERSION = "0.7.0"
end