state("Stardrop") { }

startup
{
    Assembly.Load(File.ReadAllBytes("Components/asl-help")).CreateInstance("Unity");
    vars.Helper.GameName = "Stardrop";
    vars.Helper.LoadSceneManager = true;
    
    settings.Add("Starsliver", false, "Split When Picking Up A Starsliver");
    settings.Add("island", false, "Split When Entering The Island");
}

init
{
    vars.Helper.TryLoad = (Func<dynamic, bool>)(mono =>
    {
        vars.Helper["Starshard"] = mono.Make<int>("GameManager", "instance", "Starshard_Amount");
        vars.Helper["World"] =  mono.Make<int>("GameManager", "worldLocation");
        vars.Helper["Starsliver"] = mono.Make<int>("GameManager", "instance", "Starsliver_Amount");
        vars.Helper["Paused"] = mono.Make<bool>("GameManager", "isPaused");
        return true;
    });

    current.Scene = "";
    current.Starshard = 0;
    current.Starsliver = 0;
    current.World = "";
}

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

    // Log the scene change
    if (old.Scene != current.Scene)
        vars.Log("Scene Changed: " + current.Scene);

    // Check and log only when values change
    if (old.Starshard != current.Starshard)
        vars.Log("Starshard Changed: " + current.Starshard);

    if (old.Starsliver != current.Starsliver)
        vars.Log("Starsliver Changed: " + current.Starsliver);

    if (old.Paused != current.Paused)
        vars.Log("Paused Changed: " + current.Paused);

    if (old.World != current.World)
        vars.Log("World Location: " + current.World);
}

split
{
    if (current.Starshard > old.Starshard) {
        return true;
    }

    if (current.Starsliver > old.Starsliver) {
        return settings["Starsliver"];
    }

    if (current.World == 1 && old.World != 1) {
        return settings["island"];
    }
}

start
{
    return old.Scene != "Stage1" && current.Scene == "Stage1";
}

reset
{
    return old.Scene != "Stage0" && current.Scene == "Stage0";
}

isLoading
{
    return current.Paused == true;
}