/* Do not remove the headers from this file! see /USAGE for more info. */

// m_light_source - An object that provides light to its environment.
// 26 June, 1998: Iizuka seperated from m_lightable.

#include <hooks.h>
#include <flags.h>

string lighting_extra_short();
void set_light(int);
mixed call_hooks(string, int);
string the_short();
void set_flag(int);
int test_flag(int);
void clear_flag(int);

private int             is_lit = 0;
private int		light_level = 1;
private string		burned_out_msg = "The $o is burned out.";

int query_is_lit()
{
   return is_lit;
}

void set_light_level(int x)
{
   light_level = x;
}

void set_burned_out_msg(string x)
{
   burned_out_msg = x;
}

string query_burned_out_msg()
{
   return burned_out_msg;
}

protected void set_lit(int x)
{
   is_lit = x;
}

mixed extinguish()
{
   string tmp;

   //:HOOK prevent_extinguish
   //A yes/no/error hook that can prevent an object from being extinguished
   tmp = call_hooks("prevent_extinguish", HOOK_YES_NO_ERROR);
   if(!tmp || stringp(tmp))
   {
      return tmp;
   }
   set_lit(0);
   set_light(0);

   //:HOOK extinguish
   //called when an object is extinguished.  The return value is ignored
   call_hooks("extinguish", HOOK_IGNORE);
   return 1;
}

varargs mixed light(object with)
{
   string tmp;

   //:HOOK prevent_light
   //A yes/no/error hook that can prevent an object from getting lit
   tmp = call_hooks("prevent_light", HOOK_YES_NO_ERROR);
   if(!tmp || stringp(tmp))
      return tmp;
   set_lit(1);
   set_flag(F_LIGHTED);
   set_light(light_level);

   //:HOOK light
   //called when an object is lit.  The return value is ignored.
   call_hooks("light", HOOK_IGNORE);
   return 1;
}
