From 76a8bf95c745f790abd7c95e3f555ca58042d26c Mon Sep 17 00:00:00 2001 From: Cyberarm Date: Sat, 29 Nov 2025 11:11:53 -0600 Subject: [PATCH] Update Gosu.draw_arc to support partial segments --- lib/cyberarm_engine/gosu_ext/draw_arc.rb | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/lib/cyberarm_engine/gosu_ext/draw_arc.rb b/lib/cyberarm_engine/gosu_ext/draw_arc.rb index 336a212..97adc46 100644 --- a/lib/cyberarm_engine/gosu_ext/draw_arc.rb +++ b/lib/cyberarm_engine/gosu_ext/draw_arc.rb @@ -33,12 +33,23 @@ module Gosu # # @return [void] def self.draw_arc(x, y, radius, percentage = 1.0, segments = 128, thickness = 4, color = Gosu::Color::WHITE, z = 0, mode = :default) - segments = 360.0 / segments - return if percentage == 0.0 - 0.step((359 * percentage), percentage > 0 ? segments : -segments) do |angle| - angle2 = angle + segments + angle_per_segment = 360.0 / segments + arc_completion = 360 * percentage + next_segment_angle = angle_per_segment + + angle = 0 + loop do + break if angle >= arc_completion + + if angle + angle_per_segment > arc_completion + next_segment_angle = arc_completion - angle + else + next_segment_angle = angle_per_segment + end + + angle2 = angle + next_segment_angle point_a_left_x = x + Gosu.offset_x(angle, radius - thickness) point_a_left_y = y + Gosu.offset_y(angle, radius - thickness) @@ -93,6 +104,8 @@ module Gosu z, mode ) end + + angle += next_segment_angle end end -end \ No newline at end of file +end