Esempio n. 1
0
    private void FillInSaveObject()
    {
        towerList = _playerTowerLog.SaveTowers();

        saver = new SaveSerializedObject();

        //saver.SaveTowers(_playerTowerLog.SaveTowers());
        saver.IsHasChosenATower(_singleton.isHasLearnedATower);
        // need to convert back to a list when reading in. ?
        // ERROR IS BEACAUSE THE SCRIPT IS DISABLED IN SAVE WINDOW, THE CANVASSES ARE ALL DISABLED EXCEPT USED ONE.
        saver.SaveEnemyOptions(_missionChoice.firstEnemySet.ToArray(), _missionChoice.secondEnemySet.ToArray());
        saver.SaveTowersAndParts(_playerTowerLog.SaveKnownTowersAndParts(), _playerTowerLog.SaveLearnableTowersAndParts(), _playerTowerLog.SaveUnlearnableTowersAndParts());
        saver.SaveTinkerRoomInfo(_tinkerUpgrades.SaveCurrentUpgradeLevels(), _tinkerUpgrades.SaveLearnableUpgrades(), _tinkerUpgrades.SavePossibleOptions(), _tinkerUpgrades.SaveHasPicked());
        saver.SetTutorial(_singleton.GetIsTutorial());

        // TODO add in here to save tower setups.  I needs to save all set tower peices (tower btn 1, 2, 3) name, head, base.  Maybe also set default to the rifledtower?
        saver.SaveTowerPreset(1, _singleton.towerOneName, _singleton.towerOneHeadType, _singleton.towerOneBaseType);
        saver.SaveTowerPreset(2, _singleton.towerTwoName, _singleton.towerTwoHeadType, _singleton.towerTwoBaseType);
        saver.SaveTowerPreset(3, _singleton.towerThreeName, _singleton.towerThreeHeadType, _singleton.towerThreeBaseType);

        if (_missionChoice.isHasChosen)
        {
            saver.IsHasChosenEnemies(true);
            saver.SaveEnemiesChosen(_singleton.enemyList.ToArray());
        }

        saver.towerList    = _playerTowerLog.SaveTowers();
        saver.currentLevel = _singleton.level;
    }
Esempio n. 2
0
    public IEnumerator LoadFromFile(bool isLoadingFromFile)
    {
        // This is done in 3 steps, first, load file and initialize the singleton.
        // 2nd is to load base (singleton already has loaded the setting base needs)
        // 3rd is to do all the loading that requires the base active.

        DoneLookingAtSummary = false;
        SaveSerializedObject savedFile = null;

        _singleton = Singleton.Instance;
        FileStream file = null;

        try
        {
            file = File.Open(Application.persistentDataPath + savedDataFileName, FileMode.Open);
            BinaryFormatter bf = new BinaryFormatter();
            savedFile = (SaveSerializedObject)bf.Deserialize(file);

            // Singleton is loaded FIRST, that way it is initialized to what I need at the time of the other files loading.
            if (isLoadingFromFile)
            {
                _singleton.isHasLearnedATower = savedFile.hasChosenATower;
                _singleton.SetLevel(savedFile.currentLevel);
            }
        }
        catch (Exception e1)
        {
            print(e1.Message);
        }
        finally
        {
            try
            {
                file.Close();
            }
            catch (Exception e2)
            {
                // Do nothing, in this case the file may not exist to be closed.
            }
        }

        // Loading the base.
        // if loading from file it is most likely a CONTINUE and so we just load everything from file
        if (isLoadingFromFile)
        {
            AsyncOperation loadingBase;
            loadingBase = SceneManager.LoadSceneAsync("_Scenes/_Base");

            while (!loadingBase.isDone)
            {
                yield return(new WaitForSeconds(.50f));
            }
        }
        else // ELSE it is a level completed, I want to show post level information.
        {
            loadingLevelFromPostGame = null;
            FindObjectOfType <PostLevelSummaryScreen>().TurnOnSummaryScreen();

            //yield return new WaitUntil(CheckIfSummaryClose());
            yield return(new WaitUntil(() => DoneLookingAtSummary == true)); // function not null? asyn load

            yield return(new WaitUntil(() => loadingLevelFromPostGame.isDone));
        }



        // set everything that needs an active base.
        try
        {
            try
            {
                // need the references of base objects AFTER load
                GetReferences();

                // This is outside because I want to load all learned towers on return, but RESET that things are learned, so I can again for new base.
                var x = GameObject.FindGameObjectWithTag("TowerInfo");
                //TODO move this into getReferences().
                _playerTowerLog = x.GetComponentInChildren <PlayerTowerLog>();

                //_playerTowerLog.LoadTowers(savedFile.towerList);

                //if it is loading old base, load these, if not get new ones.
                if (isLoadingFromFile)
                {
                    //Dictionary<string, Dictionary<string, int>> dics = savedFile.LoadDic();
                    //List<int> test = savedFile.LoadList();
                    List <int> l = new List <int>(savedFile.enemyOption1List);
                    _missionChoice.LoadPathChoices(savedFile.enemyOption1List, savedFile.enemyOption2List);
                    _tinkerUpgrades.LoadInfoAndSavedOptions(savedFile.currentUpgradeLevels, savedFile.learnableUpgrades, savedFile.possibleOptions, savedFile.hasPicked, true);
                    _singleton.ishasLearnedTinker = savedFile.hasPicked;
                }
                else
                {
                    // this function is the 'reset' of the above.  It sets false to 'has picked' and 'hasRolled', while setting empty to the sotred options.
                    _tinkerUpgrades.LoadInfoAndSavedOptions(savedFile.currentUpgradeLevels, savedFile.learnableUpgrades, new int[] { }, false, false);
                }
                // LOAD REGARDLESS we load what towers we know regardless of loading saved or new base.  The IF a tower is learned is checked above with singleton
                _singleton.SetIsTutorial(savedFile.isTutorial);
                _playerTowerLog.LoadTowersAndParts(savedFile.knownTowersAndParts, savedFile.learnableTowersAndParts, savedFile.unlearnableTowersAndParts);
                _tinkerUpgrades.AddToBackupList();

                // TODO check this for new games that it doesnt load.... aka start new will this bomb.
                _singleton.LoadTowerPreset(1, savedFile.towerOne.GetTowerName(), savedFile.towerOne.GetTowerHeadType(), savedFile.towerOne.GetTowerBaseType());
                _singleton.LoadTowerPreset(2, savedFile.towerTwo.GetTowerName(), savedFile.towerTwo.GetTowerHeadType(), savedFile.towerTwo.GetTowerBaseType());
                _singleton.LoadTowerPreset(3, savedFile.towerThree.GetTowerName(), savedFile.towerThree.GetTowerHeadType(), savedFile.towerThree.GetTowerBaseType());
            }
            catch (Exception e)
            {
                print("Failed! " + e.Message);
            }
            finally
            {
            }
        }
        catch (Exception z)
        {
            print("couldn't open file");
        }
        finishedLoading = true;

        yield return(new WaitForSeconds(12f));
    }