state("Ghost Land Yard")
{
}

startup
{
    Assembly.Load(File.ReadAllBytes("Components/asl-help")).CreateInstance("Unity");
    vars.Helper.GameName = "Ghostland Yard";
    vars.Helper.LoadSceneManager = true;
    vars.Helper.AlertLoadless();

    settings.Add("GLY", true, "Ghostland Yard");
        settings.Add("ANY", true, "Splits after Each Completed Level", "GLY");
}

init
{
    vars.Helper.TryLoad = (Func<dynamic, bool>)(mono =>
    {
        vars.Helper["SpeedrunTimer"] = mono.Make<float>("SceneParameters", "SpeedrunTimer");
        vars.Helper["LevelEnded"] = mono.Make<bool>("LevelManager", "Instance", "levelEnded");

        // vars.Helper["LevelNumber"] = mono.Make<int>("LevelManager", "Instance", "lvl");
        // vars.Helper["WorldNumber"] = mono.Make<int>("LevelManager", "Instance", "World");
        
        return true;
    });
}

update
{
    current.activeScene = vars.Helper.Scenes.Active.Name ?? old.activeScene;
    current.loadingScene = vars.Helper.Scenes.Loaded[0].Name ?? old.loadingScene;
}

start
{
    return current.SpeedrunTimer > 0.0f && old.SpeedrunTimer == 0.0f;
}

split
{
    if(current.LevelEnded && current.LevelEnded != old.LevelEnded)
    {
        return settings["ANY"];
    };
}

gameTime
{
    return TimeSpan.FromSeconds(current.SpeedrunTimer);
}

reset
{
    return current.SpeedrunTimer == 0.0f || current.activeScene == "Menu_RELEASE" && old.activeScene == "Menu_RELEASE";
}