#==============================================================================
# ■ Khas Awesome (ou pas) Lights Effects 
#------------------------------------------------------------------------------
#  Edition pour que ce script de merde puisse gérer un ensemble de lumières
#   dynamiques et pas juste une seule.
#------------------------------------------------------------------------------
#  Comment ça marche ?
#    Pour ajouter des lumières dynamiques à un PNJ (event) il suffit
#     de faire comme suivant (pour les détails et autres cf le script de base)
#        l = Light_DSource.new
#        l.change_owner(quelque_chose)
#        l.set_graphic("torch_m")
#        l.set_opacity(180,30)
#        l.show
#        $game_map.add_lantern l
#    En gros c'est comme pour gérer la lanterne unique sauf qu'il faut la créer
#     au début (le .new) et ensuite l'ajouter avec add_lantern.
#==============================================================================

#==============================================================================
# ■ Game_Map
#------------------------------------------------------------------------------
#  Ajoute le stockage des lanternes supplémentaire et leur suppression
#==============================================================================
class Game_Map
  #--------------------------------------------------------------------------
  # ● Initialize method, aliased
  #--------------------------------------------------------------------------
  alias zang_initialize initialize
  def initialize
    zang_initialize
    @lanterns = []
  end
  #--------------------------------------------------------------------------
  # ● Setup a map, aliased
  #--------------------------------------------------------------------------
  alias zang_setup setup
  def setup(map_id)
    dispose_lanterns
    zang_setup(map_id)
  end
  #--------------------------------------------------------------------------
  # ● Add a lantern to list
  #--------------------------------------------------------------------------
  def add_lantern(lantern)
    @lanterns << lantern
  end
  #--------------------------------------------------------------------------
  # ● Get all lanterns (including the unique one LOL)
  #--------------------------------------------------------------------------
  def lanterns
    Array(@lantern) + @lanterns
  end
  #--------------------------------------------------------------------------
  # ● Dispose all other lanterns (not the unique one)
  #--------------------------------------------------------------------------
  def dispose_lanterns
    @lanterns.each { |l| l.dispose }
    @lanterns.clear
  end   
end

#==============================================================================
# ■ Spriteset_Map
#------------------------------------------------------------------------------
#  Gestion des lanternes supplémentaire
#==============================================================================
class Spriteset_Map
  #--------------------------------------------------------------------------
  # ● Dispose spriteset map, aliased
  #--------------------------------------------------------------------------
  alias zang_dispose dispose_lights
  def dispose_lights
    zang_dispose
    $game_map.dispose_lanterns
  end
  #--------------------------------------------------------------------------
  # ● Update lights, overrided
  #--------------------------------------------------------------------------
  def update_lights
    $game_map.light_surface.bitmap.clear
    $game_map.light_surface.bitmap.fill_rect(0,0,544,416,$game_map.effect_surface.color)
    $game_map.light_sources.each { |source| source.draw_light }
    $game_map.lanterns.each do |lantern|
      if lantern.visible
        btr = lantern.get_graphic
        x = lantern.x
        y = lantern.y
        r = lantern.range
        sx = x + r
        sy = y + r
        dr = r*2
        $game_map.surfaces.each { |s| s.render_shadow(x,y,sx,sy,r,btr) if s.visible?(sx,sy) && s.within?(x,x+dr,y,y+dr) }
        $game_map.light_surface.bitmap.blt(
        lantern.sx,lantern.sy,
        btr,Rect.new(0,0,dr,dr),lantern.opacity)
      end
    end
  end
end