From aa6d53dd5eaa3e5beabb462b4418d42cb20ca2c1 Mon Sep 17 00:00:00 2001 From: cyberarm Date: Wed, 29 Sep 2021 16:26:24 -0500 Subject: [PATCH] Added rubber ducky, updated game clock randomizer --- lib/game_clock/randomizer.rb | 118 +++++++++++++++++++++++++---------- media/openclipart_ducky.png | Bin 0 -> 12453 bytes 2 files changed, 84 insertions(+), 34 deletions(-) create mode 100644 media/openclipart_ducky.png diff --git a/lib/game_clock/randomizer.rb b/lib/game_clock/randomizer.rb index 3eb428b..ce85a4a 100644 --- a/lib/game_clock/randomizer.rb +++ b/lib/game_clock/randomizer.rb @@ -6,24 +6,31 @@ module TAC def setup @roll = SecureRandom.random_number(1..6) - @position = CyberarmEngine::Vector.new - @dimple_color = 0xff_008000 @dimple_res = 36 @size = [window.width, window.height].min / 2.0 - @rings = [] + @ducks = [] case @roll when 1, 4 + # Blue: Right + # Red: Left + + @ducks << Ducky.new(alliance: :blue, slot: 3, speed: 512, die_size: @size) + @ducks << Ducky.new(alliance: :red, slot: 1, speed: 512, die_size: @size) when 2, 5 - @rings << Ring.new(position: CyberarmEngine::Vector.new(-@size, window.height * 0.9), speed: 512) + #Blue and Red: Center + + @ducks << Ducky.new(alliance: :blue, slot: 2, speed: 512, die_size: @size) + @ducks << Ducky.new(alliance: :red, slot: 2, speed: 512, die_size: @size) when 3, 6 - @rings << Ring.new(position: CyberarmEngine::Vector.new(-@size, window.height * 0.9), speed: 512) - @rings << Ring.new(position: CyberarmEngine::Vector.new(-@size * 1.25, window.height * 0.8), speed: 512) - @rings << Ring.new(position: CyberarmEngine::Vector.new(-@size * 1.50, window.height * 0.7), speed: 512) - @rings << Ring.new(position: CyberarmEngine::Vector.new(-@size * 1.75, window.height * 0.6), speed: 512) + # Blue: Left + # Red: Right + + @ducks << Ducky.new(alliance: :blue, slot: 1, speed: 512, die_size: @size) + @ducks << Ducky.new(alliance: :red, slot: 3, speed: 512, die_size: @size) end end @@ -41,7 +48,26 @@ module TAC self.send(:"dice_#{@roll}", @size) end - @rings.each { |r| r.draw(@size) } + @ducks.each { |o| o.draw(@size) } + end + + def dimple(size) + size / 9.0 + end + + def update + window.previous_state&.update_non_gui + + @ducks.each { |o| o.update(window, @size) } + + @size = [window.width, window.height].min / 2.0 + end + + def button_down(id) + case id + when Gosu::MS_LEFT, Gosu::KB_ESCAPE, Gosu::KB_SPACE + pop_state + end end def dice_1(size) @@ -83,43 +109,67 @@ module TAC Gosu.draw_circle(size * 0.75, size * 0.80, dimple(size), @dimple_res, @dimple_color) end - def dimple(size) - size / 9.0 - end + class Ducky + SIZE = 0.20 + HALF_SIZE = SIZE * 0.5 - def update - window.previous_state&.update_non_gui - - @rings.each { |r| r.update(window, @size) } - - @size = [window.width, window.height].min / 2.0 - end - - def button_down(id) - case id - when Gosu::MS_LEFT, Gosu::KB_ESCAPE, Gosu::KB_SPACE - pop_state - end - end - - class Ring - def initialize(position:, speed: 1) - @position = position + def initialize(alliance:, slot:, speed:, die_size:) + @alliance = alliance + @slot = slot @speed = speed - @color = 0xff_ffaa00 + + @image = $window.get_image("#{ROOT_PATH}/media/openclipart_ducky.png") + + if @alliance == :blue + @position = CyberarmEngine::Vector.new($window.width, die_size) + else + @position = CyberarmEngine::Vector.new(-die_size, die_size + die_size * 0.40) + end end def draw(size) Gosu.translate(@position.x, @position.y) do - Gosu.draw_rect(0, 0, size, size * 0.10, @color) + Gosu.draw_rect(0, size * SIZE, size * SIZE, size * SIZE, alliance_color) + Gosu.draw_rect(size * 0.5 - size * HALF_SIZE, size * SIZE, size * SIZE, size * SIZE, alliance_color) + Gosu.draw_rect(size * (1.0 - SIZE), size * SIZE, size * SIZE, size * SIZE, alliance_color) + + duck_scale = (size * (SIZE + HALF_SIZE)) / @image.width + duck_scale_x = @alliance == :blue ? -duck_scale : duck_scale + @image.draw_rot(slot_position(size), size * SIZE + float_y(size), 1, 0, 0.5, 0.5, duck_scale_x, duck_scale) end end def update(window, size) center = window.width * 0.5 - size * 0.5 - @position.x += @speed * window.dt - @position.x = center if @position.x > center + if @position.x > center + @position.x -= @speed * window.dt + @position.x = center if @position.x < center + elsif @position.x < center + @position.x += @speed * window.dt + @position.x = center if @position.x > center + end + end + + def alliance_color + @alliance == :blue ? 0xff_000080 : 0xff_800000 + end + + def slot_position(size) + case @slot + when 1 + size * HALF_SIZE + when 2 + size * 0.5 + when 3 + size * (1.0 - HALF_SIZE) + else + raise "Slot value of: #{@slot.inspect} is invalid!" + end + end + + def float_y(size) + Math.sin(Gosu.milliseconds / 100.0) * (size * 0.01) end end end diff --git a/media/openclipart_ducky.png b/media/openclipart_ducky.png new file mode 100644 index 0000000000000000000000000000000000000000..e092b30bd6b20884e35c4e6ed7420c39d441c3c7 GIT binary patch literal 12453 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%0AXUkkXX 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