#include <weather.h>
inherit ROOM_OBJ;
nosave int day_light;
nosave int current_day;
nosave int next_weather_update;
nosave object sunlight;
nosave string weather_str;
int set_light( int number );
/** @ignore yes */
void set_light_change( string s ) { add_property("light change", s ); }
/** @ignore yes */
string query_light_change() { return query_property("light change"); }
void create() {
do_setup++;
::create();
do_setup--;
set_light(80);
set_room_size(25);
add_property("location", "outside");
add_property("here", "on the ground");
if( !do_setup ) {
TO->setup();
TO->reset();
}
} /* create() */
/** @ignore yes */
int query_light() {
int new_light;
new_light = ( day_light * (int)WEATHER->query_darkness(TO) ) / 100;
if( new_light != query_my_light() )
::set_light(new_light);
return ::query_light();
} /* query_light() */
/**
* This method returns the current level of day light in the room. The
* day light is the light level the room is set to if there was full sun
* and no darkness at all. Mostly a percentage of this is calculated
* in the query_light() method.
* @return the current daylight level
*/
int query_day_light() { return day_light; }
/** @ignore yes */
int set_light( int number ) {
::set_light(number);
day_light = number;
} /* set_light() */
/** @ignore yes */
string long( string word, int dark ) {
int day_time;
string ret, obscure;
// No point reinventing the wheel...
ret = ::long( word, dark );
day_time = (int)WEATHER_H->query_day();
if( day_time != current_day && query_light_change() )
call_other( TO, TO->query_light_change(), current_day );
obscure = TO->query_weather_obscured( day_time );
if( !day_time && !obscure )
ret = (string)WEATHER->query_moon_string() + ret;
if( time() > next_weather_update ) {
weather_str = WEATHER_H->weather_string( TO, obscure )+".\n";
next_weather_update = (int)WEATHER->next_update();
}
return replace( ret, "$weather$",
TP->colour_event("weather", "%^ORANGE%^")+weather_str+"%^RESET%^");
} /* long() */
/** @ignore yes */
string get_sunlight_desc() {
int daylight;
daylight = TO->query_my_light();
if( daylight < 30 )
return "The light here is currently quite dim.\n";
return "What do you want to look at the light for? You can get a "
"migraine from it, you know.\n";
} /* get_sunlight_desc() */
/** @ignore yes */
object *find_inv_match( string word, object looker ) {
int daylight;
if( word == "sunlight" || word == "daylight") {
daylight = TO->query_my_light();
// Nighttime - kill the light object as well.
if( !daylight ) {
if( sunlight ) {
remove_hidden_object(sunlight);
sunlight->dest_me();
sunlight = 0;
}
return ::find_inv_match( word, looker );
}
if( !sunlight ) {
sunlight = clone_object(OBJECT_OBJ);
sunlight->set_name("sunlight");
sunlight->set_weight(0);
sunlight->reset_get();
sunlight->add_alias("daylight");
sunlight->set_long( (: get_sunlight_desc :) );
add_hidden_object(sunlight);
}
}
return ::find_inv_match( word, looker );
} /* find_inv_match() */
/** @ignore yes */
void dest_me() {
if( sunlight )
sunlight->dest_me();
::dest_me();
} /* dest_me() */
/** @ignore yes */
mixed stats() {
return ::stats() + ({ ({"day light", day_light, }) });
} /* stats() */