# Dice
#
# Rolls pretty dice.
#
# written by Ed Heil


Shoes.app :width => 500, :height => 500 do
  background gradient(black, gray)
  button "clear" do
    @dice.each { | d | d.remove }
  end

  click do | btn, left, top |
    die_at( left, top, 1+rand(6))
  end


  @dice = []
  def die_at (left, top, val)
    iw = 50
    r, g, b, = rand, rand, rand

    i = image( iw, iw, 
           :top => top - iw / 2, 
           :left => left - iw / 2,
           :shadow => 10, :center => true ) do

      stroke rgb(r**3, g**3, b**3)
      sw=1

      strokewidth sw

      fill rgb(r**0.33, g**0.33, b**0.33)

      inset = 2
      inset2 = 8

      rect( inset, inset, iw-inset-sw, iw-inset-sw, 10 )

      fill rgb(r,g,b)
      ow = 8
      low = inset2
      high = iw - inset2 - ow
      mid = (iw - ow ) / 2

      if val % 2 == 1
        oval( mid, mid, ow )
      end
      if val > 1
        oval ( low, low, ow)
        oval ( high, high, ow)
      end
      if val > 3
        oval (low, high, ow)
        oval (high, low, ow)
      end
      if val > 5
        oval (mid, low, ow)
        oval (mid, high, ow)
      end
    end

    i.rotate(rand(359))

    @dice << i 

  end
end
