state("Game Inside a Game") { }

startup
{
    Assembly.Load(File.ReadAllBytes("Components/asl-help")).CreateInstance("Unity");
    vars.Helper.GameName = "Game Inside a Game";
    vars.Helper.LoadSceneManager = true;
    vars.CompletedLevels = new HashSet<int>();
}

init
{
    vars.Helper.TryLoad = (Func<dynamic, bool>)(mono =>
    {
        var LB = mono["LevelBuilder"];
        vars.Helper["level"] = LB.Make<int>(
            "curLevelNum"
        );

        var SM = mono["SensorMonitor"];
        vars.Helper["levelWon"] = SM.Make<bool>(
            "Instance",
            "conditionsMet"
        );

        return true;
    });

    current.activeScene = "";
}

update
{
    current.activeScene = vars.Helper.Scenes.Active.Name ?? current.activeScene;
}

start
{
    return old.activeScene == "Title" && current.activeScene == "Game";
}

onStart
{
    vars.CompletedLevels.Clear();
}

split
{
    return !old.levelWon && current.levelWon && vars.CompletedLevels.Add(current.level);
}