class Game_Actor < Game_Battler
  attr_accessor :sp_features    #features_boxの配列
  attr_accessor :sp_feature_ids
  attr_accessor :sp_features_learnings
  
  
  alias tako878979sp_finitialize initialize
  def initialize(actor_id)
    
    @sp_features = []
    @sp_feature_ids = []
    @sp_features_learnings = []
    tako878979sp_finitialize(actor_id)
  end  
  
  def sp_features_select_max=(value)
    @sp_features_select_max = value
  end  
  
  def sp_features_select_max
    @sp_features_select_max || $data_chara_sp_feature_select_max_default
  end  
  
  def total_sp_features_actives
    @sp_features.inject(0){|result,i| result + i.activate }
    
  end  
  
  def sp_features_active
    sp_features_visible.select{|i| i.activate > 0}
  end  
  
  def sp_features_visible
    @sp_features.select{|i| i.visible}
  end    
  
  def sp_features_items
    sp_features_visible.collect{|i| i.sp_feature }
  end  
  
  def sp_features_items_active
    sp_features_active.collect{|i| i.sp_feature }
  end    
  
  def init_sp_features_box(lv)
    (0..lv).each do |l|
      learn_feature(l)
    end
    
  end  
  
  def set_sp_features_box(feature_id)
#~     reset_sp_features_box

    feature_box = Special_Feature_Box.new(0)
    feature_box.feature_id = feature_id
    feature_box.visible = true
    @sp_features.push(feature_box)
    sort_features_box
  end  
  
  def reset_sp_features_box
    @sp_features.each do |spf|
      spf.feature_id = -1
      spf.activate = 0
      spf.visible = false
    end  
  end  
  
  def sort_features_box
    @sp_features.sort_by!{|a| evaluate_features_rank(a.sp_feature)}
  end  
  

  def evaluate_features_rank(a)
    a.rank * 1000 + a.id
  end  
  #--------------------------------------------------------------------------
  # ● レベルアップ
  #--------------------------------------------------------------------------
  alias tako33spflevel_up level_up
  def level_up
    tako33spflevel_up
    learn_feature(@level)
  end  

  def learn_feature(lv)
    @sp_features_learnings.each do |learning|
      if learning[1] == lv && !learning[2]  
        set_sp_features_box(learning[0])
        learning[2] = true
      end  
    end  
  end  

  #--------------------------------------------------------------------------
  # ● 特徴を保持する全オブジェクトの配列取得
  #--------------------------------------------------------------------------
  alias takospffeature_objects feature_objects
  def feature_objects
    takospffeature_objects + sp_features_items_active
    
  end
  
end   