public void SaveJson()
    {
        saveObj = CreateAdminSave();

        string saveJsonString = JsonUtility.ToJson(saveObj, true);

        JsonFileUtility.WriteJsonToFile(ADMINSAVEFILE, saveJsonString, JSONSTATE.PERSISTENT_DATA_PATH);
        Debug.Log("Saving as JSON " + saveJsonString);
    }
    public void LoadJson()
    {
        string loadJsonString = JsonFileUtility.LoadJsonFromFile(ADMINSAVEFILE, JSONSTATE.PERSISTENT_DATA_PATH);

        saveObj = JsonUtility.FromJson <TrinaxSaves>(loadJsonString);

        // Assign our values back!
        if (saveObj != null)
        {
            PopulateGlobalSettings();
            PopulateGameSettings();
            PopulateAudioSettings();
            PopulateKinectSettings();
        }
        else
        {
            Debug.Log("Json file is empty! Creating a new save file...");
            saveObj = CreateAdminSave();
        }
    }
    TrinaxSaves CreateAdminSave()
    {
        saveGameObjects.Clear();

        for (int i = 0; i < TrinaxGlobal.Instance.AllGameObjTypesStr.Length - 1; i++)
        {
            GameObj obj = new GameObj
            {
                name             = TrinaxGlobal.Instance.AllGameObjTypesStr[i],
                objectProperties = TrinaxGlobal.Instance.gameSettings.GameObjs.GameObj[i].objectProperties,
            };
            saveGameObjects.Add(obj);
        }

        GameObjs gameObjects = new GameObjs
        {
            GameObj = saveGameObjects,
        };

        GameSettings saveGameSettings = new GameSettings
        {
            //gameDuration = TrinaxGlobal.Instance.gameSettings.gameDuration,

            spawnInterval   = TrinaxGlobal.Instance.gameSettings.spawnInterval,
            minPowerupSpawn = TrinaxGlobal.Instance.gameSettings.minPowerupSpawn,
            maxPowerupSpawn = TrinaxGlobal.Instance.gameSettings.maxPowerupSpawn,

            pointsPerObject            = TrinaxGlobal.Instance.gameSettings.pointsPerObject,
            xpPerObject                = TrinaxGlobal.Instance.gameSettings.xpPerObject,
            xpPerObjectMultipler       = TrinaxGlobal.Instance.gameSettings.xpPerObjectMultipler,
            MAX_XP_REQUIRED_PER_BONUS  = TrinaxGlobal.Instance.gameSettings.MAX_XP_REQUIRED_PER_BONUS,
            timeToActivateNextPattern  = TrinaxGlobal.Instance.gameSettings.timeToActivateNextPattern,
            DifficultyIncreaseInterval = TrinaxGlobal.Instance.gameSettings.DifficultyIncreaseInterval,
            probabilityScale           = TrinaxGlobal.Instance.gameSettings.probabilityScale,
            firstAidRecover            = TrinaxGlobal.Instance.gameSettings.firstAidRecover,
            pointsPerCoin              = TrinaxGlobal.Instance.gameSettings.pointsPerCoin,
            coinFallSpeed              = TrinaxGlobal.Instance.gameSettings.coinFallSpeed,
            invunerableDuration        = TrinaxGlobal.Instance.gameSettings.invunerableDuration,
            umbrellaProbabilityChance  = TrinaxGlobal.Instance.gameSettings.umbrellaProbabilityChance,

            GameObjs = gameObjects,
        };

        GlobalSettings saveGlobalSettings = new GlobalSettings
        {
            IP           = TrinaxGlobal.Instance.globalSettings.IP,
            photoPath    = TrinaxGlobal.Instance.globalSettings.photoPath,
            idleInterval = TrinaxGlobal.Instance.globalSettings.idleInterval,

            COMPORT1 = TrinaxGlobal.Instance.globalSettings.COMPORT1,

            useServer     = TrinaxGlobal.Instance.globalSettings.useServer,
            useMocky      = TrinaxGlobal.Instance.globalSettings.useMocky,
            useKeyboard   = TrinaxGlobal.Instance.globalSettings.useKeyboard,
            muteAllSounds = TrinaxManager.trinaxAudioManager.muteAllSounds,
        };

        AudioSettings saveAudioSettings = new AudioSettings
        {
            masterVolume  = TrinaxManager.trinaxAudioManager.audioSettings[(int)TrinaxAudioManager.AUDIOPLAYER.MASTER].slider.value,
            musicVolume   = TrinaxManager.trinaxAudioManager.audioSettings[(int)TrinaxAudioManager.AUDIOPLAYER.MUSIC].slider.value,
            SFXVolume     = TrinaxManager.trinaxAudioManager.audioSettings[(int)TrinaxAudioManager.AUDIOPLAYER.SFX].slider.value,
            SFX2Volume    = TrinaxManager.trinaxAudioManager.audioSettings[(int)TrinaxAudioManager.AUDIOPLAYER.SFX2].slider.value,
            SFX3Volume    = TrinaxManager.trinaxAudioManager.audioSettings[(int)TrinaxAudioManager.AUDIOPLAYER.SFX3].slider.value,
            SFX4Volume    = TrinaxManager.trinaxAudioManager.audioSettings[(int)TrinaxAudioManager.AUDIOPLAYER.SFX4].slider.value,
            UI_SFXVolume  = TrinaxManager.trinaxAudioManager.audioSettings[(int)TrinaxAudioManager.AUDIOPLAYER.UI_SFX].slider.value,
            UI_SFX2Volume = TrinaxManager.trinaxAudioManager.audioSettings[(int)TrinaxAudioManager.AUDIOPLAYER.UI_SFX2].slider.value,
        };

        KinectSettings saveKinectSettings = new KinectSettings
        {
            isTrackingBody       = TrinaxGlobal.Instance.kinectSettings.isTrackingBody,
            isTrackingHead       = TrinaxGlobal.Instance.kinectSettings.isTrackingHead,
            minUserDistance      = TrinaxGlobal.Instance.kinectSettings.minUserDistance,
            maxUserDistance      = TrinaxGlobal.Instance.kinectSettings.maxUserDistance,
            maxLeftRightDistance = TrinaxGlobal.Instance.kinectSettings.maxLeftRightDistance,
        };

        TrinaxSaves save = new TrinaxSaves
        {
            gameSettings   = saveGameSettings,
            globalSettings = saveGlobalSettings,
            audioSettings  = saveAudioSettings,
            kinectSettings = saveKinectSettings,
        };

        return(save);
    }
    TrinaxSaves CreateAdminSave()
    {
        GameSettings saveGameSettings = new GameSettings
        {
            gameDuration = TrinaxGlobal.Instance.gameSettings.gameDuration,

            huatkueh_points       = TrinaxGlobal.Instance.gameSettings.huatkueh_points,
            angpao_points         = TrinaxGlobal.Instance.gameSettings.angpao_points,
            mandarinOrange_points = TrinaxGlobal.Instance.gameSettings.mandarinOrange_points,
            pineappleTart_points  = TrinaxGlobal.Instance.gameSettings.pineappleTart_points,
            chunLian_points       = TrinaxGlobal.Instance.gameSettings.chunLian_points,
            firecracker_points    = TrinaxGlobal.Instance.gameSettings.firecracker_points,

            comboDecreaseRate       = TrinaxGlobal.Instance.gameSettings.comboDecreaseRate,
            numberOfHuatKuehToSpawn = TrinaxGlobal.Instance.gameSettings.numberOfHuatKuehToSpawn,
            numberOfAngPaoToSpawn   = TrinaxGlobal.Instance.gameSettings.numberOfAngPaoToSpawn,
            minmumPoints            = TrinaxGlobal.Instance.gameSettings.minmumPoints,
            objectTotalAmount       = TrinaxGlobal.Instance.gameSettings.objectTotalAmount,
            non_scoreable_amt_min   = TrinaxGlobal.Instance.gameSettings.non_scoreable_amt_min,
            non_scoreable_amt_max   = TrinaxGlobal.Instance.gameSettings.non_scoreable_amt_max,
            spawnDuration           = TrinaxGlobal.Instance.gameSettings.spawnDuration,
        };

        GlobalSettings saveGlobalSettings = new GlobalSettings
        {
            IP = TrinaxGlobal.Instance.globalSettings.IP,
            //COMPORT1 = TrinaxGlobal.Instance.globalSettings.COMPORT1,
            //COMPORT2 = TrinaxGlobal.Instance.globalSettings.COMPORT2,
            idleInterval = TrinaxGlobal.Instance.globalSettings.idleInterval,

            useServer           = TrinaxGlobal.Instance.globalSettings.useServer,
            useMocky            = TrinaxGlobal.Instance.globalSettings.useMocky,
            useKeyboard         = TrinaxGlobal.Instance.globalSettings.useKeyboard,
            muteAudioListener   = TrinaxAudioManager.Instance._muteAudioListener,
            useLocalLeaderboard = TrinaxGlobal.Instance.globalSettings.useLocalLeaderboard,
        };

        AudioConfig saveAudioSettings = new AudioConfig
        {
            masterVolume  = TrinaxAudioManager.Instance.audioSettings[(int)TrinaxAudioManager.AUDIOPLAYER.MASTER].slider.value,
            musicVolume   = TrinaxAudioManager.Instance.audioSettings[(int)TrinaxAudioManager.AUDIOPLAYER.MUSIC].slider.value,
            SFXVolume     = TrinaxAudioManager.Instance.audioSettings[(int)TrinaxAudioManager.AUDIOPLAYER.SFX].slider.value,
            SFX2Volume    = TrinaxAudioManager.Instance.audioSettings[(int)TrinaxAudioManager.AUDIOPLAYER.SFX2].slider.value,
            SFX3Volume    = TrinaxAudioManager.Instance.audioSettings[(int)TrinaxAudioManager.AUDIOPLAYER.SFX3].slider.value,
            SFX4Volume    = TrinaxAudioManager.Instance.audioSettings[(int)TrinaxAudioManager.AUDIOPLAYER.SFX4].slider.value,
            UI_SFXVolume  = TrinaxAudioManager.Instance.audioSettings[(int)TrinaxAudioManager.AUDIOPLAYER.UI_SFX].slider.value,
            UI_SFX2Volume = TrinaxAudioManager.Instance.audioSettings[(int)TrinaxAudioManager.AUDIOPLAYER.UI_SFX2].slider.value,
        };

        //KinectSettings saveKinectSettings = new KinectSettings
        //{
        //    isTrackingBody = TrinaxGlobal.Instance.kinectSettings.isTrackingBody,
        //    isTrackingHead = TrinaxGlobal.Instance.kinectSettings.isTrackingHead,
        //};

        TrinaxSaves save = new TrinaxSaves
        {
            gameSettings   = saveGameSettings,
            globalSettings = saveGlobalSettings,
            audioSettings  = saveAudioSettings,
            //kinectSettings = saveKinectSettings,
        };

        return(save);
    }