require 'sphere'
require 'player'

SCREEN_WIDTH  = 640
SCREEN_HEIGHT = 480

class Grains < Processing::App
  def setup
    smooth
    stroke_width 2
    frame_rate 60
    rect_mode RADIUS
    ellipse_mode RADIUS

    @s = Sphere.new

    @frame_time = nil
    $frame_count = 0

    @font = createFont("Arial Bold",48)
  end

  def draw
    t = Time.now
    dt = 1.0 / (t - @frame_time) if @frame_time
    @frame_time = t
    $frame_count += 1

    background 50

    fill 240

    @s.update dt

    push_matrix
    translate SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2
    draw_sphere
    draw_player
    pop_matrix

    textFont(@font, 16)
    fill 240, 0, 0
    text "#{frame_rate.to_i} FPS pos:#{@s.player.position.to_i}",20,40
  end

  def draw_sphere
    ellipse(0, 0, @s.radius, @s.radius)
  end

  def draw_player
    push_matrix
    rotate @s.player.theta
    translate 0, @s.player.position
    fill 0, 0, 240
    ellipse(0, 0, @s.player.radius, @s.player.radius)
    pop_matrix
  end
  
  def key_pressed
    toggle_key(key, true)
    @last = key
  end

  def key_released
    toggle_key(key, false)
  end

  def toggle_key(key, bool)
    case key
      when ' ' then @s.player.jumping = bool
      when 'z' then @s.player.left    = bool
      when 'x' then @s.player.right   = bool
    end
  end
    
end



Grains.new :title => "Grains", :width => SCREEN_WIDTH, :height => SCREEN_HEIGHT


