mirror of
https://github.com/TimeCrafters/timecrafters_configuration_tool_desktop.git
synced 2025-12-15 13:32:33 +00:00
128 lines
4.4 KiB
Ruby
128 lines
4.4 KiB
Ruby
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
|