/
ColdCore-3.0a9.02/
ColdCore-3.0a9.02/src/
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;
};