/* 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;
}