#==============================================================================
#                   「イベントセパレーター」(ACE) Ver.1.0
#   製作者:奈々(なな)
#   へぷたなすくろーる http://heptanas.mamagoto.com/
#
#   ◇利用規約
#   この素材はフリーゲームにのみご利用頂けます。
#   シェアウェア、販売作品への利用は原則として禁止します。(詳細はブログ参照)
#   利用される場合はスクリプト作成者として「奈々」とURLを明記し
#   配布時にブログで利用規約の確認と、利用報告を行って下さい。
#
#------------------------------------------------------------------------------
#   
#   マップイベントを複数のイベントに分割します。
#   これにより、1マスに1つのイベントしか配置できない仕様を回避します。
#   (例えば、机のイベントとコーヒーのイベントを重ねることができます)
#   
#   使い方は、イベントページの最初に注釈で
#   <イベント分割>
#   を記入します。
#   
#   記入したページ以降が、新しいイベントとして分割されます。
#   複数のページに記入して、何個でも分割することができます。
#   (分割したイベントは、新しいイベントIDを持ちます)
#   
#==============================================================================
#==============================================================================
# ■ Game_Map
#------------------------------------------------------------------------------
#  マップを扱うクラスです。スクロールや通行可能判定などの機能を持っています。
# このクラスのインスタンスは $game_map で参照されます。
#==============================================================================
#※イベントの作成メソッドで、cloneが未完全(pagesは参照先?)なので
#切り取り処理が後の判定に影響を与えてしまっている。
#マーシャルを使った複製を調べる?

class Game_Map
  #--------------------------------------------------------------------------
  # ● イベントのセットアップ
  #--------------------------------------------------------------------------
  def setup_events
    #新規イベントのID割り振り用
    new_event_id = @map.events.size + 1

    @events = {}
    @map.events.each_value do |event|
      first_page = 0
      last_page = 0
      event.pages.each.with_index(0) do |page, i|
      #セパレータータグの1つ前まで分割
      if page.n7_event_separate? && i != 0
        last_page = i - 1
        new_event_id = n7_create_event(event, new_event_id, first_page, last_page)
        first_page = i
      end
      #最後のページなら残りを1つに
      if i == event.pages.size - 1
        last_page = i
        new_event_id = n7_create_event(event, new_event_id, first_page, last_page)
        end
      end
    end
    @common_events = parallel_common_events.collect do |common_event|
      Game_CommonEvent.new(common_event.id)
    end
    refresh_tile_events
  end
  #--------------------------------------------------------------------------
  # ● イベントの作成(戻り値:new_event_id)
  #--------------------------------------------------------------------------
  def n7_create_event(event, new_event_id, first_page, last_page)
    #イベント情報を複製し、不要なページを削る
    #参照先の@pagesを編集するため、深いコピーにする
    copy_event = Marshal.load(Marshal.dump(event))
    while copy_event.pages[last_page + 1] != nil
      copy_event.pages.pop
    end
    while copy_event.pages.size > last_page - first_page + 1
      copy_event.pages.shift
    end

    #1ページ目を含まない=新しいイベントとして配置する
    if first_page > 0
      copy_event.id = new_event_id
      new_event_id += 1
    end
    
    @events[copy_event.id] = Game_Event.new(@map_id, copy_event)
    return new_event_id
  end
end

#==============================================================================
# ■ RPG::Event::Page
#------------------------------------------------------------------------------
#  イベントページのデータクラス。
#==============================================================================
class RPG::Event::Page
  #--------------------------------------------------------------------------
  # ● 注釈コマンド「<イベント分割>」のサーチ
  #--------------------------------------------------------------------------
  def n7_event_separate?
    @list.each do |command|
      #注釈以外のコマンドが来たらサーチを終える
      break unless command.code == 108 || command.code == 408
      return true if command.parameters[0][/\s*\<\s*イベント分割\s*\>\s*/]
    end
    return false
  end
end