mirror of
https://github.com/TimeCrafters/timecrafters_configuration_tool_desktop.git
synced 2025-12-16 13:52:34 +00:00
Imported FTC Clock
This commit is contained in:
127
lib/game_clock/randomizer.rb
Normal file
127
lib/game_clock/randomizer.rb
Normal file
@@ -0,0 +1,127 @@
|
||||
require "securerandom"
|
||||
|
||||
module TAC
|
||||
class PracticeGameClock
|
||||
class Randomizer < CyberarmEngine::GameState
|
||||
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 = []
|
||||
|
||||
case @roll
|
||||
when 1, 4
|
||||
when 2, 5
|
||||
@rings << Ring.new(position: CyberarmEngine::Vector.new(-@size, window.height * 0.9), speed: 512)
|
||||
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)
|
||||
end
|
||||
end
|
||||
|
||||
def draw
|
||||
window.previous_state.draw
|
||||
|
||||
Gosu.flush
|
||||
|
||||
fill(0xdd_202020)
|
||||
|
||||
Gosu.translate(window.width * 0.5 - @size * 0.5, 24) do
|
||||
Gosu.draw_rect(0, 0, @size, @size, Gosu::Color::BLACK)
|
||||
Gosu.draw_rect(12, 12, @size - 24, @size - 24, Gosu::Color::GRAY)
|
||||
|
||||
self.send(:"dice_#{@roll}", @size)
|
||||
end
|
||||
|
||||
@rings.each { |r| r.draw(@size) }
|
||||
end
|
||||
|
||||
def dice_1(size)
|
||||
Gosu.draw_circle(size / 2, size / 2, dimple(size), @dimple_res, @dimple_color)
|
||||
end
|
||||
|
||||
def dice_2(size)
|
||||
Gosu.draw_circle(size * 0.25, size * 0.25, dimple(size), @dimple_res, @dimple_color)
|
||||
Gosu.draw_circle(size * 0.75, size * 0.75, dimple(size), @dimple_res, @dimple_color)
|
||||
end
|
||||
|
||||
def dice_3(size)
|
||||
Gosu.draw_circle(size * 0.25, size * 0.25, dimple(size), @dimple_res, @dimple_color)
|
||||
Gosu.draw_circle(size * 0.50, size * 0.50, dimple(size), @dimple_res, @dimple_color)
|
||||
Gosu.draw_circle(size * 0.75, size * 0.75, dimple(size), @dimple_res, @dimple_color)
|
||||
end
|
||||
|
||||
def dice_4(size)
|
||||
Gosu.draw_circle(size * 0.25, size * 0.25, dimple(size), @dimple_res, @dimple_color)
|
||||
Gosu.draw_circle(size * 0.75, size * 0.25, dimple(size), @dimple_res, @dimple_color)
|
||||
Gosu.draw_circle(size * 0.25, size * 0.75, dimple(size), @dimple_res, @dimple_color)
|
||||
Gosu.draw_circle(size * 0.75, size * 0.75, dimple(size), @dimple_res, @dimple_color)
|
||||
end
|
||||
|
||||
def dice_5(size)
|
||||
Gosu.draw_circle(size * 0.50, size * 0.50, dimple(size), @dimple_res, @dimple_color)
|
||||
Gosu.draw_circle(size * 0.25, size * 0.25, dimple(size), @dimple_res, @dimple_color)
|
||||
Gosu.draw_circle(size * 0.75, size * 0.25, dimple(size), @dimple_res, @dimple_color)
|
||||
Gosu.draw_circle(size * 0.25, size * 0.75, dimple(size), @dimple_res, @dimple_color)
|
||||
Gosu.draw_circle(size * 0.75, size * 0.75, dimple(size), @dimple_res, @dimple_color)
|
||||
end
|
||||
|
||||
def dice_6(size)
|
||||
Gosu.draw_circle(size * 0.25, size * 0.20, dimple(size), @dimple_res, @dimple_color)
|
||||
Gosu.draw_circle(size * 0.75, size * 0.20, dimple(size), @dimple_res, @dimple_color)
|
||||
Gosu.draw_circle(size * 0.25, size * 0.50, dimple(size), @dimple_res, @dimple_color)
|
||||
Gosu.draw_circle(size * 0.75, size * 0.50, dimple(size), @dimple_res, @dimple_color)
|
||||
Gosu.draw_circle(size * 0.25, size * 0.80, dimple(size), @dimple_res, @dimple_color)
|
||||
Gosu.draw_circle(size * 0.75, size * 0.80, dimple(size), @dimple_res, @dimple_color)
|
||||
end
|
||||
|
||||
def dimple(size)
|
||||
size / 9.0
|
||||
end
|
||||
|
||||
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
|
||||
@speed = speed
|
||||
@color = 0xff_ffaa00
|
||||
end
|
||||
|
||||
def draw(size)
|
||||
Gosu.translate(@position.x, @position.y) do
|
||||
Gosu.draw_rect(0, 0, size, size * 0.10, @color)
|
||||
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
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user