#==============================================================================
#                 「アニメーション素材のサイズ拡張」(ACE) ver.1.0
#   製作者:奈々(なな)
#   へぷたなすくろーる http://heptanas.mamagoto.com/
#
#   ◇使用規約
#   使用される場合はスクリプト作成者として「奈々」を明記して下さい。
#   このスクリプトを改変したり、改変したものを配布するなどは自由ですが
#   その場合も元のスクリプトの作成者として名前は載せて下さい。
#   その他、詳しい利用規約はブログを参照して下さい。
#
#------------------------------------------------------------------------------
#
#   アニメーション素材の仕様「1セルが192*192で固定」を変更します。
#   
#   1セルを任意のサイズ(縦横同じ)とし、それを横に5つ、縦に好きな数並べます。
#   このファイル名を「○○」とし、実際にゲームで使われる素材になります。
#   
#   次に、製作時にツクール上で使用する編集用の素材を用意します。
#   ファイル名を「○○_X」とし、実際に使う素材と対応するように
#   適当に拡大縮小して、1セルが192*192となるようにして下さい。
#   (あくまで目安のダミーなので、画質が多少粗くても問題ないです)
#   
#   ツクールのデータベース・アニメーション設定では
#   この「○○_X」を使って各種設定を行います。
#   ゲーム実行時、素材は「○○」のものに置き換えられ
#   セルの中心が揃うので、感覚的には拡大した感じになります。
#   (「○○_X」は配布時に抜いてもOKです)
#
#==============================================================================


#==============================================================================
# ■ Cache
#------------------------------------------------------------------------------
#  各種グラフィックを読み込み、Bitmap オブジェクトを作成、保持するモジュール
# です。読み込みの高速化とメモリ節約のため、作成した Bitmap オブジェクトを内部
# のハッシュに保存し、同じビットマップが再度要求されたときに既存のオブジェクト
# を返すようになっています。
#==============================================================================

module Cache
  #--------------------------------------------------------------------------
  # ● アニメーション グラフィックの取得
  #--------------------------------------------------------------------------
  def self.animation(filename, hue)
    filename[-2, 2] = "" if filename[-2, 2] == "_X"
    load_bitmap("Graphics/Animations/", filename, hue)
  end
end

#==============================================================================
# ■ Sprite_Base
#------------------------------------------------------------------------------
#  アニメーションの表示処理を追加したスプライトのクラスです。
#==============================================================================

class Sprite_Base < Sprite
  #--------------------------------------------------------------------------
  # ● アニメーションスプライトの設定
  #     frame : フレームデータ(RPG::Animation::Frame)
  #--------------------------------------------------------------------------
  def animation_set_sprites(frame)
    cell_data = frame.cell_data
    @ani_sprites.each_with_index do |sprite, i|
      next unless sprite
      pattern = cell_data[i, 0]
      if !pattern || pattern < 0
        sprite.visible = false
        next
      end
      sprite.bitmap = pattern < 100 ? @ani_bitmap1 : @ani_bitmap2
      
      cell_size = sprite.bitmap.width / 5
      
      sprite.visible = true
      sprite.src_rect.set(pattern % 5 * cell_size,
        pattern % 100 / 5 * cell_size, cell_size, cell_size)
      if @ani_mirror
        sprite.x = @ani_ox - cell_data[i, 1]
        sprite.y = @ani_oy + cell_data[i, 2]
        sprite.angle = (360 - cell_data[i, 4])
        sprite.mirror = (cell_data[i, 5] == 0)
      else
        sprite.x = @ani_ox + cell_data[i, 1]
        sprite.y = @ani_oy + cell_data[i, 2]
        sprite.angle = cell_data[i, 4]
        sprite.mirror = (cell_data[i, 5] == 1)
      end
      sprite.z = self.z + 300 + i
      sprite.ox = cell_size / 2
      sprite.oy = cell_size / 2
      sprite.zoom_x = cell_data[i, 3] / 100.0
      sprite.zoom_y = cell_data[i, 3] / 100.0
      sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
      sprite.blend_type = cell_data[i, 7]
    end
  end
end