class Data_Cast_Obj
  attr_accessor :common_event
  attr_accessor :cast_time
  def initialize(common_event ,cast_time)
    @common_event = common_event
    @cast_time = cast_time
  end  
  
  
end  

class Game_Player < Game_Character
  attr_reader :cast_color
  def rest_cast_time
    @rest_cast_time = 0 unless @rest_cast_time
    @rest_cast_time
  end  
  
  def rest_cast_time=(val) 
    @rest_cast_time = val
  end    
  
  def cast_time
    @cast_time = 0 unless @cast_time
    @cast_time
  end  
  
  def cast_time=(val) 
    @cast_time = val
  end      
  def cast_id
    @cast_id = 0 unless @cast_id
    @cast_id
  end  
  alias takocastinitialize initialize
  def initialize
    takocastinitialize
    @rest_cast_time = 0
    @cast_time = 0
    @cast_id = 0
    set_cast_color_default
  end  
  
  def cast_id=(val) 
    @cast_id = val
  end     
  alias takocastupdate update
  def update
    rest_cast_time
    update_cast_time
    takocastupdate
  end  
  def update_cast_time
    return unless @cast_time > 0
    
    if (@rest_cast_time > 0)
      @rest_cast_time -= 1
    else 
      exe_event_at_cast_time
    end  
    
  end  
  
  def set_cast_time(t)
    @rest_cast_time = t
    @cast_time = t
  end
  
  def set_cast_event(id)
    cast_obj = $data_cast_break[id]
    @cast_id = cast_obj.common_event
    set_cast_time(cast_obj.cast_time)
    
  end  
  
  def exe_event_at_cast_time
    $game_temp.reserve_common_event(@cast_id)
    set_cast_time(0)
  end  
  
  def set_cast_color(r,g,b,a = 255)
    @cast_color = Color.new(r,g,b,a)
  end  
  def set_cast_color_default
    @cast_color = $cast_color
  end   
end  

class Scene_Map < Scene_Base

  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  alias takocastbreak123start start
  def start
   
    takocastbreak123start

    create_casttimer_bars
    
  end

  #--------------------------------------------------------------------------
  # ● 終了処理
  #--------------------------------------------------------------------------
  alias takocastbreak123terminate terminate
  def terminate
    takocastbreak123terminate

    dispose_casttimer_bars

  end
  #--------------------------------------------------------------------------
  # ● HPバースプライト
  #--------------------------------------------------------------------------
  def create_casttimer_bars
    color1 = Color.new(200,0,0)
    color2 = Color.new(20,200,20)
    sprite_casttimer_bar1 = Sprite_CastTimer.new(@viewport ,$game_player)
    @sprite_casttimer_bars = [sprite_casttimer_bar1]
  end 
  #--------------------------------------------------------------------------
  # ● HPバーの解放
  #--------------------------------------------------------------------------
  def dispose_casttimer_bars
    @sprite_casttimer_bars.each{|sprite| sprite.dispose}
  end 
  #--------------------------------------------------------------------------
  # ● HPバーの更新
  #--------------------------------------------------------------------------
  def update_casttimer_bars
    @sprite_casttimer_bars.each do |sprite|
      sprite.update
    end  
  end    
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias takocastbreak123update update
  def update
    takocastbreak123update
    update_casttimer_bars
  end  
  
  
end  

class Sprite_CastTimer < Sprite_Base
  attr_accessor :chara
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(viewport , chara)
    super(viewport)
    @tile_map_width = 32
    @tile_map_height = 32
    @chara = nil
    @cw = 0
    @ch = 0
    @width = 64
    @height = 8
    @chara = chara
    @color = chara.cast_color || $cast_color
    set_bitmap
    update
  end

  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    super
    update_position
    
    set_bitmap
    if !@chara || @chara.rest_cast_time <= 0
      self.visible = false 
    else
      self.visible = true
    end  
  end

  def make_Bitmap
    value = @width * @chara.rest_cast_time / @chara.cast_time
    bitmap = Bitmap.new(@width , @height) 
    bitmap.fill_rect(Rect.new(0 ,0, value,@height), @color) 

    return bitmap
  end  
 
  def set_bitmap
    return unless @chara  
    return unless @chara.cast_time > 0
    self.bitmap = make_Bitmap 
  end  
  #--------------------------------------------------------------------------
  # ● 位置の更新
  #--------------------------------------------------------------------------
  def update_position
    return unless @chara
    self.x = @chara.screen_x - @tile_map_width 
    self.y = @chara.screen_y + 1
    self.z = 300
  end
end

