# その他オブジェクト管理
module BgManager

  # 初期化
  def BgManager.initAll
    # 雲
    @cloud_a  = [Image.load("image/stg_bg_kumo_01.png"),
                 Image.load("image/stg_bg_kumo_02.png"),
                 Image.load("image/stg_bg_kumo_03.png"),
                 Image.load("image/stg_bg_kumo_04.png"),
                 Image.load("image/stg_bg_kumo_05.png"),
                 Image.load("image/stg_bg_kumo_06.png")]
    # HP
    @hp_a = [Image.load("image/メーター枠_薄紫角無し.png"),
             Image.load("image/メーター中身_紫パイプ角無し.png")]
    # さる頭
    @saruhead = Image.load("image/stg_さるあたま.png")

    # 全部のそのた配列
    @objects = []

    # 背景
    BgBackground.create

    # スコア
    BgScore.create(0, -1)

    # 雲
    BgCloud.create(220, 0.1, @cloud_a[0..1], 0)
    BgCloud.create(0, 0.11, @cloud_a[2..3], 60)
    BgCloud.create(440, 0.12, @cloud_a[4..5], 120)

    # HPメーター
    BgHP.create(5, 30, @hp_a)

    # 残機表示
    BgZanki.create(105, 25, @saruhead)


  end

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

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

  def BgManager.objects
    @objects
  end

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

end


# スコア
class BgScore

  def BgScore.create(*arr)
    BgManager.objects.push(BgScore.new(*arr))
  end

  def initialize(x, y)
    @x = x
    @y = y
    @delflag = false
  end

  def move
    # 存在する必要がある関数なのでダミーを作った
  end

  def draw
    # スコア文字表示
    Window.draw(@x, @y, IMAGE_score, 1)

    # スコア表示
    temp = $score
    base = 100000

    for i in 0..5
      Window.draw(@x + i * 13 + 70, @y + 3, IMAGE_number[temp / base], 1)
      temp = temp % base
      base = base / 10
    end
  end

  attr_accessor :delflag
end


# 雲
class BgCloud

  def BgCloud.create(*arr)
    BgManager.objects.push(BgCloud.new(*arr))
  end

  def initialize(x, speed, image, ymin)
    @x1 = x
    @y1 = rand(60) + ymin
    @x2 = x
    @y2 = @y1
    @ymin = ymin
    @image1 = image[0]
    @image2 = image[1]
    @speed1 = speed * 1.1
    @speed2 = speed
    @delflag = false
  end

  def move
    @x1 = @x1 - @speed1
    @x2 = @x2 - @speed2
    if @x2 < -@image2.width then
        @x1 = 640
        @y1 = rand(60) + @ymin
        @x2 = 640
        @y2 = @y1
    end
  end

  def draw
    Window.draw(@x1, @y1, @image1, 0.1)
    Window.draw(@x2, @y2, @image2, 0.11)
  end

attr_accessor :delflag

end


# HPメーター
class BgHP

  def BgHP.create(*arr)
    BgManager.objects.push(BgHP.new(*arr))
  end

  def initialize(x, y, image_a)
    @x = x
    @y = y
    @image_a = image_a
    @delflag = false
    @mater = 0
    @image = Image.new(@image_a[0].width, @image_a[0].height)
  end

  def move
    if $saru == nil or @mater > $saru.hp then
      @mater = @mater - 1 if @mater > 0
      return
    end

    if @mater < $saru.hp - 1 then
      @mater = @mater + 1
    end

  end

  def draw
    # メーター枠描画
    Window.draw(@x, @y, @image_a[0], 1)
    # メーター中身描画
    @image.fill([0,0,0,0])
    @image.copyRect(0,0,@image_a[0], 0,0,@mater)
    Window.draw(@x, @y, @image, 1.1)
  end

attr_accessor :delflag

end


# 残りさる
class BgZanki

  def BgZanki.create(*arr)
    BgManager.objects.push(BgZanki.new(*arr))
  end

  def initialize(x, y, image)
    @x = x
    @y = y
    @image = image
    @delflag = false
  end

  def move
  end

  def draw
    for i in 1...$zanki
      # 残機描画
      Window.drawScale(@x + (@image.width*0.8) * (i - 1), @y + 3, @image, 0.8, 0.8, nil, nil, 1)
    end
  end

attr_accessor :delflag

end


# ゲームオーバー
class BgGameOver

  def BgGameOver.create(*arr)
    BgManager.objects.push(BgGameOver.new(*arr))
  end

  def initialize(x, y)
    @x = x
    @y = y
    @delflag = false
  end

  def move
    if Input.padPush?(P_BUTTON0) == true then
      $zanki = 3
      $score = 0
      $obj.each do |o|
        o.initAll
      end
      ControlManager.initAll
      ControlStage.create("stage1")
      SaruManager.initAll
      @delflag = true
    end
  end

  def draw
    # ゲームオーバー描画
    Window.draw(@x, @y, IMAGE_gameover, 20)
  end

attr_accessor :delflag

end


# 背景
class BgBackground

  def BgBackground.create(*arr)
    BgManager.objects.push(BgBackground.new(*arr))
  end

  def initialize
    @x = 0
  end

  def move
    @x = @x - 0.5
    if @x <= -640 then
      @x = @x + 640
    end
  end

  def draw
    Window.draw(0, 0, IMAGE_bg1, 0)
    Window.drawScale(0, 0, IMAGE_bg2, 640, 480, 0,0,0.2) if $effectmode == 1
    Window.draw(@x, 415, IMAGE_bg3, 10.4)
  end

attr_accessor :delflag

end

# Stage1
class BgStage1

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

  def initialize(x, y)
    @x = x
    @y = y
    @delflag = false
    @count = 120
    @alpha = 255
  end

  def move
    if @count > 0 then
      @count = @count - 1
      return
    end

    @alpha = @alpha - 3
    if @alpha <= 0 then
      @delflag = true
    end
  end

  def draw
    Window.drawEx(@x, @y, IMAGE_stage1, :alpha=>@alpha, :z=>5)
  end

attr_accessor :delflag

end


