new object $world: $utilities, $event_handler;
var $event_handler events = 0;
var $event_handler hooked = #[];
var $event_handler hooks = #[];
var $root created_on = 850845715;
var $root defined_settings = #[["managed", #[['parse, ['is_type, 'list, 'objnum]]]], ["starting-place", #[['parse, ['is_type, 'objnum]]]], ["heartbeat-rate", #[['parse, ['is_type, 'integer]]]], ["weather-rate", #[['parse, ['is_type, 'integer]]]]];
var $root flags = ['variables, 'methods, 'code, 'core];
var $root inited = 1;
var $root managed = [$world];
var $root manager = $world;
var $root settings = #[["managed", []], ["starting-place", $the_pit], ["heartbeat-rate", 600], ["weather-rate", 1500]];
var $root trusted = [$realm];
var $world last_weather_change = 872012808;
root method .core_world() {
.set_setting("managed", $world, "[]");
.set_setting("starting-place", $world, $the_pit);
};
public method .pulse() {
var i, d, weather_ticked, t;
(> .perms(sender(), $heart) <);
t = time();
weather_ticked = 0;
if (t >= (last_weather_change + (.get_setting("weather-rate", $world)))) {
weather_ticked = 1;
last_weather_change = t;
}
for i in (.get_setting("managed", $world)) {
pause();
catch any {
i.advance_weather(weather_ticked);
} with {
(| (i.manager()).tell_traceback(traceback()) |);
(| (i.manager()).tell(("Weather change failed for " + i) + ".") |);
}
}
};
public method .send_event() {
arg @args;
(> .perms(caller(), 'trusts) <);
pass(@args);
};
public method .shutdown() {
(> .perms(sender(), 'manager) <);
$heart.del_heartbeat();
};
public method .starting_place() {
return (| .get_setting("starting-place", $world) |) || $body_cave;
};
public method .startup() {
arg @args;
(> .perms(sender(), 'manager) <);
$heart.add_heartbeat(.get_setting("heartbeat-rate", $world));
last_weather_change = 0;
};