state("ChildrenOfTheSun") { }

startup
{
    Assembly.Load(File.ReadAllBytes("Components/asl-help")).CreateInstance("Unity");
    vars.Helper.GameName = "Children of the Sun";
}

init
{
    vars.Helper.TryLoad = (Func<dynamic, bool>)(mono => {

        vars.Helper["loading"] = mono.Make<bool>("GameManager", "gm", "loading");
        vars.Helper["carChase"] = mono.Make<bool>("GameManager", "gm", "lm", "carChase");
        vars.Helper["carChaseDone"] = mono.Make<bool>("GameManager", "gm", "carChaseDone");
        vars.Helper["levelStarted"] = mono.Make<bool>("GameManager", "gm", "lm", "levelStarted");
        vars.Helper["targetsToHit"] = mono.Make<byte>("GameManager", "gm", "lm", "targetsToHit", 0x18);

        return true;
    });
}

start
{
    return (!current.loading && current.levelStarted && !old.levelStarted && current.targetsToHit > 0) || 
    (!current.loading && old.loading && current.levelStarted && current.targetsToHit > 0);
}

split
{
    return current.targetsToHit == 0 && old.targetsToHit > 0 && !current.loading;
}

isLoading
{
    if (!current.carChase || current.carChaseDone) {
        return (current.loading || !current.levelStarted || current.targetsToHit == 0);
    } else {
        return current.loading || !current.levelStarted;
    }
}