diff --git a/lib/cyberarm_engine/model.rb b/lib/cyberarm_engine/model.rb index 85fc32a..53d83c6 100644 --- a/lib/cyberarm_engine/model.rb +++ b/lib/cyberarm_engine/model.rb @@ -50,7 +50,8 @@ module CyberarmEngine @objects.each { |o| @vertex_count += o.vertices.size } start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC, :float_millisecond) - # build_collision_tree + build_collision_tree + puts " Building mesh collision tree took #{((Process.clock_gettime(Process::CLOCK_MONOTONIC, :float_millisecond) - start_time) / 1000.0).round(2)} seconds" end def parse(parser) @@ -177,7 +178,7 @@ module CyberarmEngine end def build_collision_tree - @aabb_tree = AABBTree.new + @aabb_tree = IMICFPS::AABBTree.new @faces.each do |face| box = BoundingBox.new diff --git a/lib/cyberarm_engine/stats.rb b/lib/cyberarm_engine/stats.rb index 0a3b527..a993609 100644 --- a/lib/cyberarm_engine/stats.rb +++ b/lib/cyberarm_engine/stats.rb @@ -63,7 +63,8 @@ module CyberarmEngine def start_timing(key) raise "key must be a symbol!" unless key.is_a?(Symbol) if @timings[key] - warn "Only one timing per key per frame. (Timing for #{key.inspect} already exists!)" + # FIXME: Make it not spammy... + # warn "Only one timing per key per frame. (Timing for #{key.inspect} already exists!)" @attempted_multitiming = true @multitimings[key] = true @@ -76,7 +77,8 @@ module CyberarmEngine def end_timing(key) timing = @timings[key] - warn "Timing #{key.inspect} already ended!" if timing.end_time != -1 + # FIXME: Make it not spammy... + # warn "Timing #{key.inspect} already ended!" if timing.end_time != -1 timing.end_time = Gosu.milliseconds timing.duration = timing.end_time - timing.start_time diff --git a/lib/cyberarm_engine/text.rb b/lib/cyberarm_engine/text.rb index f697322..50a02dc 100644 --- a/lib/cyberarm_engine/text.rb +++ b/lib/cyberarm_engine/text.rb @@ -81,6 +81,7 @@ module CyberarmEngine @size = size @font = font_name + invalidate_cache! @textobject = check_cache(size, font_name) end end diff --git a/lib/cyberarm_engine/ui/element.rb b/lib/cyberarm_engine/ui/element.rb index 758dca9..583eb7a 100644 --- a/lib/cyberarm_engine/ui/element.rb +++ b/lib/cyberarm_engine/ui/element.rb @@ -462,15 +462,13 @@ module CyberarmEngine if @parent && @style.fill && (dimension == :width && @parent.is_a?(Flow) || dimension == :height && @parent.is_a?(Stack)) - return space_available_width - noncontent_width if dimension == :width && @parent.is_a?(Flow) - return space_available_height - noncontent_height if dimension == :height && @parent.is_a?(Stack) - - # Handle min_width/height and max_width/height - else - return @style.send(:"min_#{dimension}") if @style.send(:"min_#{dimension}") && new_size.to_f < @style.send(:"min_#{dimension}") - return @style.send(:"max_#{dimension}") if @style.send(:"max_#{dimension}") && new_size.to_f > @style.send(:"max_#{dimension}") + new_size = space_available_width - noncontent_width if dimension == :width && @parent.is_a?(Flow) + new_size = space_available_height - noncontent_height if dimension == :height && @parent.is_a?(Stack) end + return @style.send(:"min_#{dimension}") if @style.send(:"min_#{dimension}") && new_size.to_f < @style.send(:"min_#{dimension}") + return @style.send(:"max_#{dimension}") if @style.send(:"max_#{dimension}") && new_size.to_f > @style.send(:"max_#{dimension}") + new_size end diff --git a/lib/cyberarm_engine/ui/elements/container.rb b/lib/cyberarm_engine/ui/elements/container.rb index 11603f5..80d5ec8 100644 --- a/lib/cyberarm_engine/ui/elements/container.rb +++ b/lib/cyberarm_engine/ui/elements/container.rb @@ -186,6 +186,9 @@ module CyberarmEngine update_background + # Fixes resized container scrolled past bottom + self.scroll_top = -@scroll_position.y + root.gui_state.request_repaint if @width != old_width || @height != old_height end diff --git a/lib/cyberarm_engine/ui/elements/slider.rb b/lib/cyberarm_engine/ui/elements/slider.rb index 1cfa067..1df4669 100644 --- a/lib/cyberarm_engine/ui/elements/slider.rb +++ b/lib/cyberarm_engine/ui/elements/slider.rb @@ -33,7 +33,8 @@ module CyberarmEngine end end - attr_reader :range, :step_size, :value + attr_reader :step_size, :value + attr_accessor :range, :step_size def initialize(options = {}, block = nil) super(options, block) diff --git a/lib/cyberarm_engine/ui/elements/text_block.rb b/lib/cyberarm_engine/ui/elements/text_block.rb index c00cc1b..904c0aa 100644 --- a/lib/cyberarm_engine/ui/elements/text_block.rb +++ b/lib/cyberarm_engine/ui/elements/text_block.rb @@ -18,6 +18,15 @@ module CyberarmEngine @raw_text = text end + def update + super + + if @text.textobject.name != safe_style_fetch(:font) + set_font + root.gui_state.request_recalculate + end + end + def render # Gosu.clip_to is too expensive to always use so check if we actually need it. if @text.width > width || @text.height > height diff --git a/lib/cyberarm_engine/window.rb b/lib/cyberarm_engine/window.rb index 5cd5c46..443b4a6 100644 --- a/lib/cyberarm_engine/window.rb +++ b/lib/cyberarm_engine/window.rb @@ -158,6 +158,8 @@ module CyberarmEngine end private def child_of?(input, klass) + return false unless input + input.ancestors.detect { |c| c == klass } end