Пример #1
0
    public void TryLoadGameElseNewGame()
    {
        LevelData.Data data = LevelData.LoadGame(Application.persistentDataPath + Control.userDataFolder + Control.userLevelSaveFile);

        //Only load if a save file exists. If a save file doesn't exist, generate a new game
        if (data == null)
        {
            //Debug.Log("No save exists; generating new game");
            GenerateGame(GENERATION_TYPE_NEW_GAME);
        }
        else
        {
            //Debug.Log("Save exists; loading game");

            //VERSE
            //Centre Star
            SpawnCBodyStar(Vector3.zero, data.controlCentreStarName);

            //Verse position relative to origin
            verseSpace.transform.position = new Vector3(
                data.controlVerseSpacePosition[0],
                data.controlVerseSpacePosition[1],
                data.controlVerseSpacePosition[2]
                );

            //Planetoids
            for (byte i = 0; i < data.controlPlanetoidQuantity; i++)
            {
                if (data.controlPlanetoidHasStation[i])
                {
                    //Slice the array so that we have only the upgrade offers' indexes (since we are already looping through each planetoid)
                    int[] controlScriptPlanetoidStationUpgradeIndex = new int[StationDocking.upgradeButtons];
                    for (int i2 = 0; i2 < StationDocking.upgradeButtons; i2++)
                    {
                        controlScriptPlanetoidStationUpgradeIndex[i2] = data.controlPlanetoidStationUpgradeIndex[i, i2];
                    }

                    SpawnPlanetoidManually(
                        new Vector3(
                            data.controlPlanetoidPosition[i, 0],
                            data.controlPlanetoidPosition[i, 1],
                            data.controlPlanetoidPosition[i, 2]
                            ),
                        new Vector3(
                            data.controlPlanetoidVelocity[i, 0],
                            data.controlPlanetoidVelocity[i, 1],
                            data.controlPlanetoidVelocity[i, 2]
                            ),
                        data.controlPlanetoidName[i],
                        data.controlPlanetoidHasStation[i],
                        data.controlPlanetoidStationTitle[i],
                        false, //generate offers?
                        data.controlPlanetoidStationPricePlatinoid[i],
                        data.controlPlanetoidStationPricePreciousMetal[i],
                        data.controlPlanetoidStationPriceWater[i],
                        controlScriptPlanetoidStationUpgradeIndex
                        );
                }
                else
                {
                    SpawnPlanetoidManually(
                        new Vector3(
                            data.controlPlanetoidPosition[i, 0],
                            data.controlPlanetoidPosition[i, 1],
                            data.controlPlanetoidPosition[i, 2]
                            ),
                        new Vector3(
                            data.controlPlanetoidVelocity[i, 0],
                            data.controlPlanetoidVelocity[i, 1],
                            data.controlPlanetoidVelocity[i, 2]
                            ),
                        data.controlPlanetoidName[i],
                        data.controlPlanetoidHasStation[i],
                        null,
                        false, //generate offers?
                        0f,
                        0f,
                        0f,
                        null
                        );
                }
            }

            //Asteroids
            for (byte i = 0; i < data.controlAsteroidQuantity; i++)
            {
                SpawnAsteroidManually(
                    new Vector3(
                        data.controlAsteroidPosition[i, 0],
                        data.controlAsteroidPosition[i, 1],
                        data.controlAsteroidPosition[i, 2]
                        ),
                    new Vector3(
                        data.controlAsteroidVelocity[i, 0],
                        data.controlAsteroidVelocity[i, 1],
                        data.controlAsteroidVelocity[i, 2]
                        ),
                    data.controlAsteroidSize[i],
                    data.controlAsteroidType[i],
                    data.controlAsteroidHealth[i]
                    );
            }

            //PLAYER
            SpawnPlayer(
                GENERATION_TYPE_LOADED_GAME,
                new Vector3(
                    data.playerPosition[0],
                    data.playerPosition[1],
                    data.playerPosition[2]
                    )
                );
            Player playerScript = instancePlayer.GetComponentInChildren <Player>();

            //Player properties
            playerScript.upgradeLevels = data.playerUpgrades;
            playerScript.UpdateUpgrades();

            playerScript.vitalsHealth = data.playerVitalsHealth;
            Player.destroyed          = data.playerDestroyed;

            playerScript.vitalsFuel = data.playerVitalsFuel;

            playerScript.currency = data.playerCurrency;
            playerScript.ore      = data.playerOre;

            //Asteroids (generate)
            GenerateCBodiesAsteroids(Random.Range(ASTEROID_CLUSTERS_RANGE_LOW, ASTEROID_CLUSTERS_RANGE_HIGH), instanceCentreStar);
        }

        //Update UI to reflect loaded data
        control.ui.UpdateAllPlayerResourcesUI();
    }
Пример #2
0
    public void SaveGame()
    {
        //Debug.Log("Saving game");

        //World properties
        //Planetoids
        CBodyPlanetoid[] planetoidArray = FindObjectsOfType <CBodyPlanetoid>();

        float[,] controlScriptPlanetoidPosition = new float[planetoidArray.Length, 3];
        float[,] controlScriptPlanetoidVelocity = new float[planetoidArray.Length, 3];
        string[] controlScriptPlanetoidName       = new string[planetoidArray.Length];
        bool[]   controlScriptPlanetoidHasStation = new bool[planetoidArray.Length];

        string[] controlScriptPlanetoidStationTitle       = new string[planetoidArray.Length];
        float[]  controlScriptPlanetoidPricePlatinoid     = new float[planetoidArray.Length];
        float[]  controlScriptPlanetoidPricePreciousMetal = new float[planetoidArray.Length];
        float[]  controlScriptPlanetoidPriceWater         = new float[planetoidArray.Length];
        int[,] controlScriptPlanetoidStationUpgradeIndex = new int[planetoidArray.Length, StationDocking.upgradeButtons];

        byte planetoidArrayIndex = 0;

        foreach (CBodyPlanetoid planetoid in planetoidArray)
        {
            //Position
            controlScriptPlanetoidPosition[planetoidArrayIndex, 0] = planetoid.transform.position.x;
            controlScriptPlanetoidPosition[planetoidArrayIndex, 1] = planetoid.transform.position.y;
            controlScriptPlanetoidPosition[planetoidArrayIndex, 2] = planetoid.transform.position.z;

            //Velocity
            controlScriptPlanetoidVelocity[planetoidArrayIndex, 0] = planetoid.GetComponent <Rigidbody>().velocity.x;
            controlScriptPlanetoidVelocity[planetoidArrayIndex, 1] = planetoid.GetComponent <Rigidbody>().velocity.y;
            controlScriptPlanetoidVelocity[planetoidArrayIndex, 2] = planetoid.GetComponent <Rigidbody>().velocity.z;

            //Name
            controlScriptPlanetoidName[planetoidArrayIndex] = planetoid.GetComponent <CelestialName>().title;

            //Station
            controlScriptPlanetoidHasStation[planetoidArrayIndex] = planetoid.GetComponent <CBodyPlanetoid>().hasStation;
            if (planetoid.hasStation && planetoid.instancedStation != null)
            {
                controlScriptPlanetoidStationTitle[planetoidArrayIndex]       = planetoid.instancedStation.GetComponent <HumanName>().title;
                controlScriptPlanetoidPricePlatinoid[planetoidArrayIndex]     = planetoid.instancedStation.GetComponentInChildren <StationDocking>().pricePlatinoid;
                controlScriptPlanetoidPricePreciousMetal[planetoidArrayIndex] = planetoid.instancedStation.GetComponentInChildren <StationDocking>().pricePreciousMetal;
                controlScriptPlanetoidPriceWater[planetoidArrayIndex]         = planetoid.instancedStation.GetComponentInChildren <StationDocking>().priceWater;
                //Concatenate the array so that we have the planetoid data along with the data for each upgrade offer's index
                for (int i = 0; i < StationDocking.upgradeButtons; i++)
                {
                    controlScriptPlanetoidStationUpgradeIndex[planetoidArrayIndex, i] = planetoid.instancedStation.GetComponentInChildren <StationDocking>().upgradeIndexAtButton[i];
                }
            }
            else
            {
                controlScriptPlanetoidStationTitle[planetoidArrayIndex]       = null;
                controlScriptPlanetoidPricePlatinoid[planetoidArrayIndex]     = 0f;
                controlScriptPlanetoidPricePreciousMetal[planetoidArrayIndex] = 0f;
                controlScriptPlanetoidPriceWater[planetoidArrayIndex]         = 0f;
                //Concatenate the array so that we have the planetoid data along with the data for each upgrade offer's index
                for (int i = 0; i < StationDocking.upgradeButtons; i++)
                {
                    controlScriptPlanetoidStationUpgradeIndex[planetoidArrayIndex, i] = 0;
                }
            }


            //Increment
            planetoidArrayIndex++;
        }

        //Asteroids
        CBodyAsteroid[] asteroidArray = FindObjectsOfType <CBodyAsteroid>();

        float[,] controlScriptAsteroidPosition = new float[asteroidArray.Length, 3];
        float[,] controlScriptAsteroidVelocity = new float[asteroidArray.Length, 3];
        string[] controlScriptAsteroidSize   = new string[asteroidArray.Length];
        byte[]   controlScriptAsteroidType   = new byte[asteroidArray.Length];
        byte[]   controlScriptAsteroidHealth = new byte[asteroidArray.Length];

        byte asteroidArrayIndex = 0;

        foreach (CBodyAsteroid asteroid in asteroidArray)
        {
            //Position
            controlScriptAsteroidPosition[asteroidArrayIndex, 0] = asteroid.transform.position.x;
            controlScriptAsteroidPosition[asteroidArrayIndex, 1] = asteroid.transform.position.y;
            controlScriptAsteroidPosition[asteroidArrayIndex, 2] = asteroid.transform.position.z;

            //Velocity
            controlScriptAsteroidVelocity[asteroidArrayIndex, 0] = asteroid.GetComponent <Rigidbody>().velocity.x;
            controlScriptAsteroidVelocity[asteroidArrayIndex, 1] = asteroid.GetComponent <Rigidbody>().velocity.y;
            controlScriptAsteroidVelocity[asteroidArrayIndex, 2] = asteroid.GetComponent <Rigidbody>().velocity.z;

            //Size
            controlScriptAsteroidSize[asteroidArrayIndex] = asteroid.sizeClassDisplay;

            //Type
            controlScriptAsteroidType[asteroidArrayIndex] = asteroid.type;

            //Health
            controlScriptAsteroidHealth[asteroidArrayIndex] = asteroid.health;

            //Increment
            asteroidArrayIndex++;
        }

        //Verse
        float[] controlScriptVersePosition = new float[3];
        controlScriptVersePosition[0] = verseSpace.transform.position.x;
        controlScriptVersePosition[1] = verseSpace.transform.position.y;
        controlScriptVersePosition[2] = verseSpace.transform.position.z;

        //Player
        Player playerScript = instancePlayer.GetComponentInChildren <Player>();

        float[] playerScriptPlayerPosition = new float[3];
        playerScriptPlayerPosition[0] = playerScript.transform.position.x;
        playerScriptPlayerPosition[1] = playerScript.transform.position.y;
        playerScriptPlayerPosition[2] = playerScript.transform.position.z;

        LevelData.Data data = new LevelData.Data
        {
            //World properties
            //Planetoids
            controlPlanetoidQuantity   = (byte)planetoidArray.Length,
            controlPlanetoidPosition   = controlScriptPlanetoidPosition,
            controlPlanetoidVelocity   = controlScriptPlanetoidVelocity,
            controlPlanetoidName       = controlScriptPlanetoidName,
            controlPlanetoidHasStation = controlScriptPlanetoidHasStation,

            //Planetoids: stations
            controlPlanetoidStationTitle              = controlScriptPlanetoidStationTitle,
            controlPlanetoidStationPricePlatinoid     = controlScriptPlanetoidPricePlatinoid,
            controlPlanetoidStationPricePreciousMetal = controlScriptPlanetoidPricePreciousMetal,
            controlPlanetoidStationPriceWater         = controlScriptPlanetoidPriceWater,
            controlPlanetoidStationUpgradeIndex       = controlScriptPlanetoidStationUpgradeIndex,

            //Asteroids
            controlAsteroidQuantity = asteroidArray.Length,
            controlAsteroidPosition = controlScriptAsteroidPosition,
            controlAsteroidVelocity = controlScriptAsteroidVelocity,
            controlAsteroidSize     = controlScriptAsteroidSize,
            controlAsteroidType     = controlScriptAsteroidType,
            controlAsteroidHealth   = controlScriptAsteroidHealth,

            //Centre star
            controlCentreStarName = instanceCentreStar.GetComponent <CelestialName>().title,

            //Verse space
            controlVerseSpacePosition = controlScriptVersePosition,

            //Player properties
            playerPosition = playerScriptPlayerPosition,

            playerUpgrades = playerScript.upgradeLevels,

            playerVitalsHealth = playerScript.vitalsHealth,
            playerDestroyed    = Player.destroyed,

            playerVitalsFuel = playerScript.vitalsFuel,

            playerCurrency = playerScript.currency,
            playerOre      = playerScript.ore
        };

        LevelData.SaveGame(Application.persistentDataPath + Control.userDataFolder + Control.userLevelSaveFile, data);
    }