# こざるオブジェクト管理
module OptionManager

  # 初期化
  def OptionManager.initAll
    # 全部のそのた配列
    @objects = []
  end

  # 全部のそのたを移動
  def OptionManager.moveAll
    # 移動
    @objects.hs_each(:move)
  end

  # 全部のそのたを描画
  def OptionManager.drawAll
    # 描画
    @objects.hs_each(:draw)
  end

  def OptionManager.objects
    @objects
  end

  # フラグがたっているオブジェクトを削除する
  def OptionManager.clear
    @objects.hs_delete_if(:delflag)
  end

end

# こざる
class OptionKozaru

  def self.create(*arr)
    OptionManager.objects.push(self.new(*arr))
  end

  def initialize
    temp = []
    @prev = $saru.lastoption
    for i in 1..10
      temp.push([@prev.data[0][0], @prev.data[0][1]])
    end
    $saru.option.push(self)
    @number = $saru.option.size
    @data = temp
    @x = @prev.data[0][0]
    @y = @prev.data[0][1]
    @angle = 0
    @state = 0
    @count = 0
    @oldx = 0
    @oldy = 0
  end

  def move(flag = nil)
    if $saru == nil then
      @delflag = true
      return
    end

    if flag == nil and $saru.changecount > 0 then
      return
    end

    # キー状態によるｘとｙの増分を取得
    dx, dy = Input.x, Input.y
    if dx != 0 or dy != 0 then
      @data.push([@prev.data[0][0], @prev.data[0][1]])
      @data.shift
    end
    temp = @data[0]
    @x = temp[0]
    @y = temp[1]

    # こざるフォーメーション
    case $saru.option.size
    when 1 # こざる1匹用フォーメーション
      case $saru.formation
      when 1 # フォーメーションＡ
        @x = $saru.x + 30
        @y = $saru.y
        @angle = 0
      when 2 # フォーメーションＢ
        @x = $saru.x + Math.cos(($saru.formationcount+180) * TO_RADIAN) * 30
        @y = $saru.y + Math.sin(($saru.formationcount+180) * TO_RADIAN) * 30
        @angle = $saru.formationcount+180
      end
    when 2 # こざる2匹用フォーメーション
      case $saru.formation
      when 1 # フォーメーションＡ
        case @number
        when 1 # 1匹目
          @x = $saru.x + 10
          @y = $saru.y - 30
          @angle = -30
        when 2 # 2匹目
          @x = $saru.x + 10
          @y = $saru.y + 30
          @angle = 30
        end
      when 2 # フォーメーションＢ
        case @number
        when 1 # 1匹目
          @x = $saru.x + Math.cos($saru.formationcount * TO_RADIAN) * 30
          @y = $saru.y + Math.sin($saru.formationcount * TO_RADIAN) * 30
          @angle = $saru.formationcount
        when 2 # 2匹目
          @x = $saru.x + Math.cos(($saru.formationcount + 180) * TO_RADIAN) * 30
          @y = $saru.y + Math.sin(($saru.formationcount + 180) * TO_RADIAN) * 30
          @angle = $saru.formationcount + 180
        end
      end
    when 3 # こざる3匹用フォーメーション
      case $saru.formation
      when 1 # フォーメーションＡ
        case @number
        when 1 # 1匹目
          @x = $saru.x - 10
          @y = $saru.y - 30
          @angle = -45
        when 2 # 2匹目
          @x = $saru.x - 10
          @y = $saru.y + 30
          @angle = 45
        when 3 # 3匹目
          @x = $saru.x + 30
          @y = $saru.y
          @angle = 0
        end
      when 2 # フォーメーションＢ
        case @number
        when 1 # 1匹目
          @x = $saru.x + Math.cos(($saru.formationcount + 60) * TO_RADIAN) * 30
          @y = $saru.y + Math.sin(($saru.formationcount + 60) * TO_RADIAN) * 30
          @angle = $saru.formationcount + 60
        when 2 # 2匹目
          @x = $saru.x + Math.cos(($saru.formationcount + 300) * TO_RADIAN) * 30
          @y = $saru.y + Math.sin(($saru.formationcount + 300) * TO_RADIAN) * 30
          @angle = $saru.formationcount + 300
        when 3 # 3匹目
          @x = $saru.x + Math.cos(($saru.formationcount + 180) * TO_RADIAN) * 30
          @y = $saru.y + Math.sin(($saru.formationcount + 180) * TO_RADIAN) * 30
          @angle = $saru.formationcount + 180
        end
      end
    when 4 # こざる4匹用フォーメーション
      case $saru.formation
      when 1 # フォーメーションＡ
        case @number
        when 1 # 1匹目
          @x = $saru.x - 30
          @y = $saru.y - 30
          @angle = -60
        when 2 # 2匹目
          @x = $saru.x - 30
          @y = $saru.y + 30
          @angle = 60
        when 3 # 3匹目
          @x = $saru.x + 30
          @y = $saru.y - 20
          @angle = -15
        when 4 # 4匹目
          @x = $saru.x + 30
          @y = $saru.y + 20
          @angle = 15
        end
      when 2 # フォーメーションＢ
        case @number
        when 1 # 1匹目
          @x = $saru.x + Math.cos($saru.formationcount * TO_RADIAN) * 30
          @y = $saru.y + Math.sin($saru.formationcount * TO_RADIAN) * 30
          @angle = $saru.formationcount
        when 2 # 2匹目
          @x = $saru.x + Math.cos(($saru.formationcount + 270) * TO_RADIAN) * 30
          @y = $saru.y + Math.sin(($saru.formationcount + 270) * TO_RADIAN) * 30
          @angle = $saru.formationcount + 270
        when 3 # 3匹目
          @x = $saru.x + Math.cos(($saru.formationcount + 90) * TO_RADIAN) * 30
          @y = $saru.y + Math.sin(($saru.formationcount + 90) * TO_RADIAN) * 30
          @angle = $saru.formationcount + 90
        when 4 # 3匹目
          @x = $saru.x + Math.cos(($saru.formationcount + 180) * TO_RADIAN) * 30
          @y = $saru.y + Math.sin(($saru.formationcount + 180) * TO_RADIAN) * 30
          @angle = $saru.formationcount + 180
        end
      end
    end
  end

  def shot
    if $saru.formation == 1 then # フォーメーションＡ
      Sarutama2.create(@x, @y, @angle - 15)
      Sarutama2.create(@x, @y, @angle + 15)
      return
    elsif $saru.formation == 2 then # フォーメーションＢ
      Sarutama2.create(@x, @y, @angle)
      Sarutama2.create(@x, @y, @angle - 15)
      Sarutama2.create(@x, @y, @angle + 15)
      return
    end

    Sarutama2.create(@x, @y, 0)
  end

  def draw
    Window.drawScale(@x, @y-4, IMAGE_saru01, 0.5, 0.5, nil, nil, 5)
  end

attr_accessor :delflag, :x, :y, :data, :state, :oldx, :oldy

end


