/// <summary>
        /// Saves the last pinball game results using the correct data passed through...
        /// </summary>
        /// <param name="Input">data to send</param>
        public static void SaveUltimatePinballSession(UltimatePinballSessionData Input)
        {
            BinaryFormatter Formatter = new BinaryFormatter();
            string          SavePath  = Application.persistentDataPath + "/ultimatepinballsession.masf";
            FileStream      Stream    = new FileStream(SavePath, FileMode.OpenOrCreate);

            UltimatePinballSessionData Data = new UltimatePinballSessionData();

            Data = Input;

            Formatter.Serialize(Stream, Data);
            Stream.Close();
        }
        /// <summary>
        /// Saves the last pinball game resutls using player stats
        /// </summary>
        /// <param name="Player1Stats">Stats for Player 1</param>
        /// <param name="Player2Stats">Stats for Player 2</param>
        public static void SaveUltimatePinballSession(GameManager.BG_PlayerStats Player1Stats, GameManager.BG_PlayerStats Player2Stats)
        {
            BinaryFormatter Formatter = new BinaryFormatter();
            string          SavePath  = Application.persistentDataPath + "/ultimatepinballsession.masf";
            FileStream      Stream    = new FileStream(SavePath, FileMode.OpenOrCreate);

            UltimatePinballSessionData Data = new UltimatePinballSessionData();

            Data.Player1Name   = Player1Stats.Name;
            Data.Player1Score  = Player1Stats.Score;
            Data.Player1Health = Player1Stats.Health;
            Data.Player2Name   = Player2Stats.Name;
            Data.Player2Score  = Player2Stats.Score;
            Data.Player2Health = Player2Stats.Health;

            Formatter.Serialize(Stream, Data);
            Stream.Close();
        }
        /// <summary>
        /// Loads the last session played info for use in UI
        /// </summary>
        /// <returns>UltimatePinballData with the loaded data</returns>
        public static UltimatePinballSessionData LoadLastUltimatePinballSession()
        {
            string SavePath = Application.persistentDataPath + "/ultimatepinballsession.masf";

            if (File.Exists(SavePath))
            {
                BinaryFormatter Formatter = new BinaryFormatter();
                FileStream      Stream    = new FileStream(SavePath, FileMode.Open);

                UltimatePinballSessionData Data = Formatter.Deserialize(Stream) as UltimatePinballSessionData;

                Stream.Close();

                return(Data);
            }
            else
            {
                Debug.LogError("Save file not found! (Ultimate Pinball Session - Load)");
                return(null);
            }
        }
        /*
         * Format Types
         *
         * masf = Micro Arcade Save File
         * malf = Micro Arcade Leaderboard File
         *
         */
        /// <summary>
        /// Creates all the save files with default vlaues if they do not exist on the system (helps avoid errors later on)
        /// </summary>
        public static void InitialseFiles()
        {
            BinaryFormatter _formatter   = new BinaryFormatter();
            string          baseSavePath = Application.persistentDataPath;

            FileStream _stream;

            // Create Save Files
            // /settings.masf
            if (!File.Exists(baseSavePath + "/settings.masf"))
            {
                _stream = new FileStream(baseSavePath + "/settings.masf", FileMode.Create);
                ArcadeData _settingsData = new ArcadeData();
                _formatter.Serialize(_stream, _settingsData);
                _stream.Close();
            }

            // /controlconfig.masf -- is not made here as it works when you first run the project with a multi input
            //if (!File.Exists(baseSavePath + "/controlconfig.masf"))
            //{
            //    _stream = new FileStream(baseSavePath + "/controlconfig.masf", FileMode.Create);
            //    ArcadeData _controlData = new ArcadeData();
            //    _formatter.Serialize(_stream, _controlData);
            //    _stream.Close();
            //}

            // /arcadeonline.masf
            if (!File.Exists(baseSavePath + "/arcadeonline.masf"))
            {
                _stream = new FileStream(baseSavePath + "/arcadeonline.masf", FileMode.Create);
                ArcadeOnlinePaths _onlineData = new ArcadeOnlinePaths();
                _formatter.Serialize(_stream, _onlineData);
                _stream.Close();
            }



            // Pinball Save Files

            // /ultimatepinball.masf
            if (!File.Exists(baseSavePath + "/ultimatepinball.masf"))
            {
                _stream = new FileStream(baseSavePath + "/ultimatepinball.masf", FileMode.Create);
                UltimatePinballData _pinballData = new UltimatePinballData();
                _formatter.Serialize(_stream, _pinballData);
                _stream.Close();
            }

            // /ultimatepinballsession.masf
            if (!File.Exists(baseSavePath + "/ultimatepinballsession.masf"))
            {
                _stream = new FileStream(baseSavePath + "/ultimatepinballsession.masf", FileMode.Create);
                UltimatePinballSessionData _pinballSessionData = new UltimatePinballSessionData();
                _formatter.Serialize(_stream, _pinballSessionData);
                _stream.Close();
            }

            // /ultimatepinballsession.malf
            if (!File.Exists(baseSavePath + "/ultimatepinball.malf"))
            {
                _stream = new FileStream(baseSavePath + "/ultimatepinball.malf", FileMode.Create);
                _formatter.Serialize(_stream, null);
                _stream.Close();
            }



            // Operation Starshine Save Files

            // /operationstarshine.masf
            if (!File.Exists(baseSavePath + "/operationstarshine.masf"))
            {
                _stream = new FileStream(baseSavePath + "/operationstarshine.masf", FileMode.Create);
                OperationStarshineData _operationStarshineData = new OperationStarshineData();
                _formatter.Serialize(_stream, _operationStarshineData);
                _stream.Close();
            }

            // /operationstarshine.malf
            if (!File.Exists(baseSavePath + "/operationstarshine.malf"))
            {
                _stream = new FileStream(baseSavePath + "/operationstarshine.malf", FileMode.Create);
                StarshineLeaderboardData _operationStarshineLeaderboardData = new StarshineLeaderboardData();
                _formatter.Serialize(_stream, _operationStarshineLeaderboardData);
                _stream.Close();
            }



            // Quacking Time Save Files

            // /quackingtime.masf
            if (!File.Exists(baseSavePath + "/quackingtime.masf"))
            {
                _stream = new FileStream(baseSavePath + "/quackingtime.masf", FileMode.Create);
                QuackingTimeData _quackingTimeData = new QuackingTimeData();
                _formatter.Serialize(_stream, _quackingTimeData);
                _stream.Close();
            }



            // Crushing Save Files

            // /crushing.masf
            if (!File.Exists(baseSavePath + "/crushing.masf"))
            {
                _stream = new FileStream(baseSavePath + "/crushing.masf", FileMode.Create);
                CrushingData _crushingData = new CrushingData();
                _formatter.Serialize(_stream, _crushingData);
                _stream.Close();
            }
        }