# ======================================================
#  「アニメ中心座標変更」スクリプトver.1.2
# ======================================================
# ■更新履歴
# ver.1.2(2011/6/28)
# ・一度にずらす座標量を272固定から細かく指定できるように変更。
# ・途中で座標の基準対象を変更できる機能を追加。
# （中心座標変更を同じフレームで使用する場合は、）
# 　まず基準対象を変えてから中心座標変更が来るように並べる）
# ver.1.1(2011/3/2)
# ・【重要】効果音を選ぶ時に場所がバラバラだと感じたので、
# 　判別する音声ファイル名の先頭に「anime」を付加。
# 　既存のスクリプトを使っていた方はお手数ですが、
# 　ファイル名を「anime中心座標変更」などという風に変更して下さい。
# 　（前の仕様で既に作ったアニメの設定箇所も対応する必要があります。）
# ======================================================
# ■概要
# ・指定したタイミングでアニメーションを表示する中心座標を変更できます。
# 　ＶＸのエディタでは画面外へのアニメセルの配置は限界があるので、
# 　「画面外へとセルをフェードアウトさせたい」などの場合に活用できます。
# ・またそれとは別にアニメの途中で基準対象を変更する機能もあります。
# 　これは最初は基準位置を「画面」で表示した後に途中で
# 　アニメ対象の足元などに基準位置を変更する機能です。
# 　最初は画面全体を使って技の演出、途中で技の対象に攻撃エフェクト、
# 　というような使い方が出来ます。
# 
# ■「中心座標変更」の使い方
# ・中心座標を変えるフレームに「anime中心座標変更」という無音SEを設定する。
#   フラッシュの設定で赤(R)の数値がx座標をプラス方向（右方向）へ動かす量、
#   緑(G)がマイナス方向（左）へ動かす量になります。
#   同じように青(B)がｙ座標のプラス（上方向）強さ(S)が下方向になります。
#   ちなみにこれらの効果音で設定したフラッシュは全て無視されます。
# 
# ■「基準対象変更」の使い方
# ・基準位置を変えるフレームに「anime基準対象変更」という無音SEを設定する。
#   フラッシュの強さ(S)の数値で基準位置を設定する。
#   基準位置 (0:頭上、1:中心、2:足元、3:画面)
# 
# ■簡易まとめ
# 効果音ファイル名：anime中心座標変更
# 赤(R) 　＝ X座標をプラス　(全体を右へずらす)
# 緑(G) 　＝ X座標をマイナス(全体を左へずらす)
# 青(B) 　＝ Y座標をプラス　(全体を下へずらす)
# 強さ(S) ＝ Y座標をマイナス(全体を上へずらす)
# 
# 効果音ファイル名：anime基準対象変更
# 強さ(S) ＝ 基準位置 (0:頭上、1:中心、2:足元、3:画面)
# 
# ■エイリアスしている箇所
# class Sprite_Base内
# 　animation_set_sprites(frame)     （アニメーションスプライトの設定）
# 
# 同じ箇所を再定義やエイリアスしているスクリプトとは
# 競合する可能性があります。
# 
# 
class Sprite_Base < Sprite
  #--------------------------------------------------------------------------
  # ● アニメーションスプライトの設定　■エイリアス
  #     frame : フレームデータ (RPG::Animation::Frame)
  #--------------------------------------------------------------------------
  alias animation_set_sprites_ct_change animation_set_sprites
  def animation_set_sprites(frame)
    # ■■■アニメーションのフレームレートを変更している場合■■■
    # この(@animation_duration + 3) / 4　を対応した物に変更してください。
    frame_index = @animation.frame_max - (@animation_duration + 3) / 4
    for timing in @animation.timings
      if timing.frame == frame_index
        name_check_xychange(timing)
      end
    end
    animation_set_sprites_ct_change(frame)
  end
  #--------------------------------------------------------------------------
  # ● 中心座標変更設定　■新規
  #-------------------------------------------------------------------------- 
  def name_check_xychange(timing)
    if timing.se.name == "anime中心座標変更"
      @animation_ox += timing.flash_color.red
      @animation_ox -= timing.flash_color.green
      @animation_oy += timing.flash_color.blue
      @animation_oy -= timing.flash_color.alpha
    elsif timing.se.name == "anime基準対象変更"
    #  基準位置 (0:頭上、1:中心、2:足元、3:画面) 
      result = timing.flash_color.alpha
      if result == 3
        if viewport == nil
          @animation_ox = 544 / 2
          @animation_oy = 416 / 2
        else
          @animation_ox = viewport.rect.width / 2
          @animation_oy = viewport.rect.height / 2
        end
      else
        @animation_ox = x - ox + width / 2
        @animation_oy = y - oy + height / 2
        if result == 0
          @animation_oy -= height / 2
        elsif result == 2
          @animation_oy += height / 2
        end
      end
    end
  end
end