private void HandleSplits()
        {
            bool   shouldSplit = false;
            bool   inGame      = mem.InGame();
            float  levelTime   = mem.LevelTime();
            string sceneName   = mem.SceneName();
            bool   loading     = mem.Loading();
            bool   ending      = mem.LevelEnding() && mem.LevelWon();

            if (currentSplit < Model.CurrentState.Run.Count && settings.Splits.Count > 0)
            {
                SplitInfo split = currentSplit + 1 < settings.Splits.Count ? settings.Splits[currentSplit + 1] : SplitInfo.EndGame;
                switch (split.Split)
                {
                case SplitName.StartGame: shouldSplit = inGame && loading && sceneName == "scene_cutscene_intro"; break;

                case SplitName.Shop: shouldSplit = sceneName == "scene_shop"; break;

                case SplitName.map_world_1: shouldSplit = sceneName == "scene_map_world_1"; break;

                case SplitName.map_world_2: shouldSplit = sceneName == "scene_map_world_2"; break;

                case SplitName.map_world_3: shouldSplit = sceneName == "scene_map_world_3"; break;

                case SplitName.map_world_4: shouldSplit = sceneName == "scene_map_world_4"; break;

                case SplitName.level_tutorial: shouldSplit = lastSceneName == "scene_level_tutorial" && sceneName != "scene_level_tutorial"; break;

                case SplitName.level_veggies: shouldSplit = InScene("scene_level_veggies") && mem.LevelComplete(Levels.Veggies, split.Difficulty, split.Grade); break;

                case SplitName.level_slime: shouldSplit = InScene("scene_level_slime") && mem.LevelComplete(Levels.Slime, split.Difficulty, split.Grade); break;

                case SplitName.level_flower: shouldSplit = InScene("scene_level_flower") && mem.LevelComplete(Levels.Flower, split.Difficulty, split.Grade); break;

                case SplitName.level_frogs: shouldSplit = InScene("scene_level_frogs") && mem.LevelComplete(Levels.Frogs, split.Difficulty, split.Grade); break;

                case SplitName.level_flying_blimp: shouldSplit = InScene("scene_level_flying_blimp") && mem.LevelComplete(Levels.FlyingBlimp, split.Difficulty, split.Grade); break;

                case SplitName.level_platforming_1_1F: shouldSplit = InScene("scene_level_platforming_1_1F") && mem.LevelComplete(Levels.Platforming_Level_1_1, split.Difficulty, split.Grade); break;

                case SplitName.level_platforming_1_2F: shouldSplit = InScene("scene_level_platforming_1_2F") && mem.LevelComplete(Levels.Platforming_Level_1_2, split.Difficulty, split.Grade); break;

                case SplitName.level_mausoleum_1: shouldSplit = sceneName == "scene_level_mausoleum" && mem.LevelMode() == Mode.Easy && ending; break;

                case SplitName.level_baroness: shouldSplit = InScene("scene_level_baroness") && mem.LevelComplete(Levels.Baroness, split.Difficulty, split.Grade); break;

                case SplitName.level_clown: shouldSplit = InScene("scene_level_clown") && mem.LevelComplete(Levels.Clown, split.Difficulty, split.Grade); break;

                case SplitName.level_dragon: shouldSplit = InScene("scene_level_dragon") && mem.LevelComplete(Levels.Dragon, split.Difficulty, split.Grade); break;

                case SplitName.level_flying_genie: shouldSplit = InScene("scene_level_flying_genie") && mem.LevelComplete(Levels.FlyingGenie, split.Difficulty, split.Grade); break;

                case SplitName.level_flying_bird: shouldSplit = InScene("scene_level_flying_bird") && mem.LevelComplete(Levels.FlyingBird, split.Difficulty, split.Grade); break;

                case SplitName.level_platforming_2_1F: shouldSplit = InScene("scene_level_platforming_2_1F") && mem.LevelComplete(Levels.Platforming_Level_2_1, split.Difficulty, split.Grade); break;

                case SplitName.level_platforming_2_2F: shouldSplit = InScene("scene_level_platforming_2_2F") && mem.LevelComplete(Levels.Platforming_Level_2_2, split.Difficulty, split.Grade); break;

                case SplitName.level_mausoleum_2: shouldSplit = sceneName == "scene_level_mausoleum" && mem.LevelMode() == Mode.Normal && ending; break;

                case SplitName.level_bee: shouldSplit = InScene("scene_level_bee") && mem.LevelComplete(Levels.Bee, split.Difficulty, split.Grade); break;

                case SplitName.level_pirate: shouldSplit = InScene("scene_level_pirate") && mem.LevelComplete(Levels.Pirate, split.Difficulty, split.Grade); break;

                case SplitName.level_sally_stage_play: shouldSplit = InScene("scene_level_sally_stage_play") && mem.LevelComplete(Levels.SallyStagePlay, split.Difficulty, split.Grade); break;

                case SplitName.level_mouse: shouldSplit = InScene("scene_level_mouse") && mem.LevelComplete(Levels.Mouse, split.Difficulty, split.Grade); break;

                case SplitName.level_robot: shouldSplit = InScene("scene_level_robot") && mem.LevelComplete(Levels.Robot, split.Difficulty, split.Grade); break;

                case SplitName.level_train: shouldSplit = InScene("scene_level_train") && mem.LevelComplete(Levels.Train, split.Difficulty, split.Grade); break;

                case SplitName.level_flying_mermaid: shouldSplit = InScene("scene_level_flying_mermaid") && mem.LevelComplete(Levels.FlyingMermaid, split.Difficulty, split.Grade); break;

                case SplitName.level_platforming_3_1F: shouldSplit = InScene("scene_level_platforming_3_1F") && mem.LevelComplete(Levels.Platforming_Level_3_1, split.Difficulty, split.Grade); break;

                case SplitName.level_platforming_3_2F: shouldSplit = InScene("scene_level_platforming_3_2F") && mem.LevelComplete(Levels.Platforming_Level_3_2, split.Difficulty, split.Grade); break;

                case SplitName.level_mausoleum_3: shouldSplit = sceneName == "scene_level_mausoleum" && mem.LevelMode() == Mode.Hard && ending; break;

                case SplitName.level_dice_palace_enter: shouldSplit = sceneName == "scene_cutscene_kingdice"; break;

                case SplitName.level_dice_palace_main: shouldSplit = InScene("scene_level_dice_palace_main") && mem.LevelComplete(Levels.DicePalaceMain, split.Difficulty, split.Grade); break;

                case SplitName.level_devil: shouldSplit = InScene("scene_level_devil") && mem.LevelComplete(Levels.Devil, split.Difficulty, split.Grade); break;

                case SplitName.EndGame: shouldSplit = sceneName == "scene_cutscene_credits"; break;

                case SplitName.EnterLevel: shouldSplit = levelTime > 0 && levelTime < 0.5; break;

                case SplitName.EndLevel: shouldSplit = levelTime > 0 && ending; break;
                }
            }

            Model.CurrentState.IsGameTimePaused = loading;

            lastInGame    = inGame;
            lastLevelTime = levelTime;
            if (lastSceneName != sceneName)
            {
                lastSceneSeen = lastSceneName;
            }
            lastSceneName = sceneName;
            lastLoading   = loading;

            HandleSplit(shouldSplit, Model.CurrentState.Run.Count == 1 && loading && levelTime == 0);
        }