Beispiel #1
0
        protected override object ReadObject <T>(ES3Reader reader)
        {
            var instance = new BuildingSave();

            ReadObject <T>(reader, instance);
            return(instance);
        }
Beispiel #2
0
    public void loadBuilding(string name)
    {
        Debug.Log(BuildingPath + "/" + name);


        if (File.Exists(BuildingPath + "/" + name))
        {
            BinaryFormatter bf = new BinaryFormatter();

            FileStream file = File.Open(BuildingPath + "/" + name, FileMode.Open);

            BuildingSave save = (BuildingSave)bf.Deserialize(file);

            file.Close();

            foreach (var build in save.GetSave())
            {
                BuildingInfo.Instance.buildinfo.Add(build);
            }
        }
        else
        {
            Debug.Log("No saved!");
        }
    }
    // Returns datavalues of class for use in saving
    public FactorySave ReturnFactorySave(Vector3 position, Vector3 rotation)
    { // bool finished, Vector3 position, Vector3 rotation
        BuildingSave building = ReturnBuildingSave(position, rotation);

        return(new FactorySave(
                   isBusy, remainingTimeSec, timePerRound, resourceProducedIndex, remainingRounds, originalNumRounds, // Factory
                   building.presentHealth, building.yOffset, building.buildingFinished,                               // Building
                   transform.name, position, rotation                                                                 // Transform
                   ));
    }
Beispiel #4
0
    public BuildingSave CreatBuildingSave()
    {
        BuildingSave save = new BuildingSave();

        foreach (var build in BuildingInfo.Instance.buildinfo)
        {
            save.SaveBuilding(build);
        }

        return(save);
    }
Beispiel #5
0
    public void SaveGame(string saveName)
    {
        BuildingSave save = CreateSaveGameObject();

        BinaryFormatter bf   = new BinaryFormatter();
        FileStream      file = File.Create(Application.persistentDataPath + "/" + saveName + "/BuildingSave.save");

        bf.Serialize(file, save);
        file.Close();

        Debug.Log("Saved buildings...");
    }
Beispiel #6
0
    private BuildingSave CreateSaveGameObject()
    {
        BuildingSave save = new BuildingSave();

        foreach (BuildingObject bo in mOwnedBuildings)
        {
            //uses name of the object, not the one assigned inside the scriptable object, just so that if we have any objects displaying the same name, it wont overlap.
            save.ownedBuildings.Add(bo.name);
        }

        return(save);
    }
Beispiel #7
0
    public void saveBuilding()
    {
        BuildingSave save = CreatBuildingSave();

        BinaryFormatter bf = new BinaryFormatter();

        FileStream file = File.Create(BuildingPath + "/" + $"{System.DateTime.Now:yyyy-MM-dd_HH-mm-ss}" + ".save");

        bf.Serialize(file, save);
        file.Close();

        Debug.Log("存档");
    }
Beispiel #8
0
    public void LoadGame(string loadName)
    {
        if (File.Exists(Application.persistentDataPath + "/" + loadName + "/BuildingSave.save"))
        {
            BinaryFormatter bf   = new BinaryFormatter();
            FileStream      file = File.Open(Application.persistentDataPath + "/" + loadName + "/BuildingSave.save", FileMode.Open);
            BuildingSave    save = (BuildingSave)bf.Deserialize(file);
            file.Close();

            SimulateBuildingPurchases(save.ownedBuildings);
        }
        else
        {
            Debug.Log("No Building Save Found");
        }
    }
Beispiel #9
0
    private void PlaceDownBuilding()
    {
        //Check if an existing building is already located at this position
        if (currentSelectedBuild.GetComponent <ConstructionBuilding>().ObjectIsObstructed())
        {
            return;
        }

        if (!CheckResourcesForBuild(woodBuildCost, stoneBuildCost, citizenBuildCost))
        {
            return;
        }

        buildingsMenu.SetActive(true);
        currentSelectedBuild.GetComponent <ConstructionBuilding>().PlaceBuilding();
        AddNewJob(currentSelectedBuild.GetComponent <JobActivator>());
        allBuildings.Add(currentSelectedBuild);
        currentSelectedBuild.transform.SetParent(buildingParent);

        //Unity names instantiated objects (Clone), lets remove that so its easier to save since the original names dont include (Clone)
        currentSelectedBuild.transform.name = currentSelectedBuild.transform.name.Replace("(Clone)", "").Trim();
        BuildingSave newBuildingSave = new BuildingSave();

        newBuildingSave.BuildingName     = currentSelectedBuild.transform.name;
        newBuildingSave.BuildingPosition = currentSelectedBuild.transform.position;
        newBuildingSave.BuildingRotation = currentSelectedBuild.transform.rotation;
        newBuildingSave.BuildFinished    = false;
        newBuildingSave.BuildingID       = GetRandomID();
        currentSelectedBuild.GetComponent <ObjectID>().SetID(newBuildingSave.BuildingID);
        newBuildingSave.Progress = 0;
        currentSave.AllBuildings.Add(newBuildingSave);
        SaveTheGame(currentSave);

        currentSelectedBuild.transform.name = currentSelectedBuild.transform.name + " BUILT";
        currentSelectedBuild = null;

        AudioManager.PlayAudioClipGlobal(objectPlaceSound);
    }
Beispiel #10
0
    void Start()
    {
        //定义存档路径
        string dirpath = Application.persistentDataPath + "/Save";

        //创建存档文件夹
        GameSaveManager.IOHelper.CreateDirectory(dirpath);
        //定义存档文件路径
        string    filename = dirpath + "/GameData.sav";
        TestClass t        = new TestClass();
        //保存数据
        Res      tp  = Res.Rinstance;
        Building tp2 = Building.Binstance;

        t.SaveList = tp.ResQList;
        foreach (BuildingType type in Enum.GetValues(typeof(BuildingType)))//restype
        {
            BuildingSave bs = new BuildingSave();
            bs.type       = tp2.BuildingQList[(int)type].bt;
            bs.Quantities = tp2.BuildingQList[(int)type].Quantities;
            t.SaveBList.Add(bs);
        }
        string json = JsonMapper.ToJson(t);

        string fp = "info.json";

        File.WriteAllText(fp, json);


        GameSaveManager.IOHelper.SetData(filename, t);
        //读取数据
        TestClass t1 = (TestClass)GameSaveManager.IOHelper.GetData(filename, typeof(TestClass));

        Debug.Log(t1.Name);
        Debug.Log(t1.Age);
        Debug.Log(t1.Ints);
    }
Beispiel #11
0
    // Loads save from file
    public void Load()
    {
        // Ensures load only runs on the island scene
        if (SceneManager.GetActiveScene().name == "PrivateIsland")
        {
            // Load
            if (File.Exists(path))
            {
                // Opens stream
                FileStream stream = new FileStream(path, FileMode.Open);

                try
                {
                    // Loads resources
                    int numResources = (int)formatter.Deserialize(stream);
                    for (int i = 0; i < numResources; i++)
                    {
                        ResourceSave resourceData = formatter.Deserialize(stream) as ResourceSave;

                        // Instantiate resource
                        GameObject resourceObject = Resources.Load("Prefabs/WorldResources/Raw resources/" + RemoveCopyInName(resourceData.objectName)) as GameObject;
                        GameObject worldObject    = LoadObject(resourceObject, resourceData.position, resourceData.rotation);

                        ResourceWorldObject resource = worldObject.GetComponentInChildren <ResourceWorldObject>();

                        // ERROR lies here, somehow
                        resource.LoadFromSave(resourceData.resourceAmount);
                    }

                    // Load factories
                    int numFactories = (int)formatter.Deserialize(stream);
                    for (int i = 0; i < numFactories; i++)
                    {
                        FactorySave factoryData = formatter.Deserialize(stream) as FactorySave;

                        // Instantiate factory
                        GameObject factoryObject = Resources.Load("Prefabs/Buildings/Factory/Primary buildings/" + RemoveCopyInName(factoryData.objectName)) as GameObject;
                        GameObject worldObject   = LoadObject(factoryObject, factoryData.position, factoryData.rotation);

                        // Updates position, makes sure the building finishes building if it is finished
                        FactoryBuilding factory = worldObject.GetComponent <FactoryBuilding>();
                        factory.LoadFromSave(factoryData.presentHealth, factoryData.buildingFinished, factoryData.yOffset);
                        factory.LoadFactory(factoryData.isWorking, factoryData.remainingTime, factoryData.timeRound, factoryData.index, factoryData.remainingRounds, factoryData.originalRounds);
                    }


                    // Load harvesters
                    int numHarvesters = (int)formatter.Deserialize(stream);
                    for (int i = 0; i < numHarvesters; i++)
                    {
                        BuildingSave harvesterData = formatter.Deserialize(stream) as BuildingSave;

                        // Instantiate harvester
                        GameObject resourceObject = Resources.Load("Prefabs/Buildings/ResourceGathering/" + RemoveCopyInName(harvesterData.objectName)) as GameObject;
                        GameObject worldObject    = LoadObject(resourceObject, harvesterData.position, harvesterData.rotation);

                        // Updates position, makes sure the building finishes building if it is finished
                        AbstractResourceHarvesting harvester = worldObject.GetComponent <AbstractResourceHarvesting>();
                        harvester.LoadFromSave(harvesterData.presentHealth, harvesterData.buildingFinished, harvesterData.yOffset);
                    }

                    // Load houses
                    int numHouses = (int)formatter.Deserialize(stream);
                    for (int i = 0; i < numHouses; i++)
                    {
                        BuildingSave houseData = formatter.Deserialize(stream) as BuildingSave;

                        // Instantiate harvester
                        // GameObject resourceObject = Resources.Load("Prefabs/Buildings/" + RemoveCopyInName(houseData.objectName)) as GameObject;
                        GameObject resourceObject = Resources.Load("Prefabs/Buildings/HouseTemplate") as GameObject;
                        GameObject worldObject    = LoadObject(resourceObject, houseData.position, houseData.rotation);

                        // Updates position, makes sure the building finishes building if it is finished
                        AbstractHouse house = worldObject.GetComponent <AbstractHouse>();
                        house.LoadFromSave(houseData.presentHealth, houseData.buildingFinished, houseData.yOffset);
                    }

                    // Resource amounts
                    for (int i = 0; i < GameManager.resources.Length; i++)
                    {
                        // Sends in amount of resource
                        GameManager.resources[i].amount = (float)formatter.Deserialize(stream);
                    }

                    // Money
                    GameManager.moneyAmount = (float)formatter.Deserialize(stream);

                    // Roads

                    int numRoads = (int)formatter.Deserialize(stream);
                    roadPlacer.enabled = true;
                    Debug.Log("NumberOfRoads: " + numRoads);

                    for (int i = 0; i < numRoads; i++)
                    {
                        RoadSave roadeData = formatter.Deserialize(stream) as RoadSave;

                        Vector3 startPos      = new Vector3(roadeData.startPos_X, roadeData.startPos_Y, roadeData.startPos_Z);
                        Vector3 controllNode1 = new Vector3(roadeData.controllNode1_X, roadeData.controllNode1_Y, roadeData.controllNode1_Z);
                        Vector3 controllNode2 = new Vector3(roadeData.controllNode2_X, roadeData.controllNode2_Y, roadeData.controllNode2_Z);
                        Vector3 endPos        = new Vector3(roadeData.endPos_X, roadeData.endPos_Y, roadeData.endPos_Z);

                        roadPlacer.GenerateRoad(startPos, controllNode1, controllNode2, endPos);
                        Debug.Log("LoadingRoads");
                    }
                    roadPlacer.enabled = false;
                }
                catch (System.Exception e)
                {
                    Debug.Log("Error: " + e);
                }

                // Camera position
                Camera.main.transform.position = new Vector3((float)formatter.Deserialize(stream), (float)formatter.Deserialize(stream), (float)formatter.Deserialize(stream));

                // Camera rotation
                if (cameraMovement != null)
                {
                    cameraMovement.LoadAngles((float)formatter.Deserialize(stream), (float)formatter.Deserialize(stream));
                }

                // Loads sun position
                sunManager.UpdatePosition((float[])formatter.Deserialize(stream));

                // Time
                timeManager.UpdateTime((int[])formatter.Deserialize(stream));

                // Camera mode
                GameManager.inputManager.frozenAngle = (bool)formatter.Deserialize(stream);
                Cursor.visible = /*GameManager.isPaused || */ GameManager.inputManager.frozenAngle;
                if (Cursor.visible)
                {
                    Cursor.lockState = CursorLockMode.None;
                }
                else
                {
                    Cursor.lockState = CursorLockMode.Locked;
                }

                // Close stream
                stream.Close();
            }
            else
            {
                Debug.Log("No save file found");
            }
        }
    }
Beispiel #12
0
    // Saves save to file
    public void Save()
    {
        // Ensures save only runs on the island scene
        if (SceneManager.GetActiveScene().name == "PrivateIsland")
        {
            GameManager.isPaused = true;                                                                // Pauses game to ensure values does not update needlessly
                                                                                                        // Creates new file or overwrites the old one
            FileStream streamEnsureExists = new FileStream(path, FileMode.Create);
            streamEnsureExists.Close();

            // Opens stream to append to it
            FileStream stream = new FileStream(path, FileMode.Append);

            // Resources
            ResourceWorldObject[] worldResources = FindObjectsOfType <ResourceWorldObject>();           // Gets all resource objects
            formatter.Serialize(stream, worldResources.Length);                                         // Stores number of resources as an int

            for (int i = 0; i < worldResources.Length; i++)
            {
                // Resource
                ResourceSave resourceData = worldResources[i].ReturnResourceSave(worldResources[i].transform.position, worldResources[i].transform.eulerAngles);
                formatter.Serialize(stream, resourceData);
            }

            // Factories
            FactoryBuilding[] factories = FindObjectsOfType <FactoryBuilding>();                        // Gets all resource objects
            formatter.Serialize(stream, factories.Length);                                              // Stores number of factories as an int

            for (int i = 0; i < factories.Length; i++)
            {
                // FactorySave
                FactorySave factory = factories[i].ReturnFactorySave(factories[i].transform.position, factories[i].transform.eulerAngles);
                formatter.Serialize(stream, factory);
            }


            // Resource gatherng buildings
            AbstractResourceHarvesting[] harvesters = FindObjectsOfType <AbstractResourceHarvesting>(); // Gets all resource objects
            formatter.Serialize(stream, harvesters.Length);                                             // Stores number of factories as an int

            for (int i = 0; i < harvesters.Length; i++)
            {
                // FactorySave
                BuildingSave harvester = harvesters[i].ReturnBuildingSave(harvesters[i].transform.position, harvesters[i].transform.eulerAngles);
                formatter.Serialize(stream, harvester);
            }

            // Houses
            AbstractHouse[] houses = FindObjectsOfType <AbstractHouse>();
            formatter.Serialize(stream, houses.Length);                                                 // Stores number of houses as an int

            for (int i = 0; i < houses.Length; i++)
            {
                BuildingSave house = houses[i].ReturnBuildingSave(houses[i].transform.position, houses[i].transform.eulerAngles);
                formatter.Serialize(stream, house);
            }

            // Resource amounts
            for (int i = 0; i < GameManager.resources.Length; i++)
            {
                // Sends in amount of resource
                formatter.Serialize(stream, GameManager.resources[i].amount);
            }

            // Money
            formatter.Serialize(stream, GameManager.moneyAmount);

            //Roads
            RoadStruct[] roads = FindObjectsOfType <RoadStruct>();
            formatter.Serialize(stream, roads.Length);

            for (int i = 0; i < roads.Length; i++)
            {
                formatter.Serialize(stream, roads[i].ReturnRoadSave());
            }

            // Camera position
            formatter.Serialize(stream, Camera.main.transform.position.x);                              // Stores position(x)
            formatter.Serialize(stream, Camera.main.transform.position.y);                              // Stores position(y)
            formatter.Serialize(stream, Camera.main.transform.position.z);                              // Stores position(z)

            // Camera rotation
            formatter.Serialize(stream, Camera.main.transform.eulerAngles.x);                           // Stores rotation(x)
            formatter.Serialize(stream, Camera.main.transform.eulerAngles.y);                           // Stores rotation(y)

            // Sun position
            formatter.Serialize(stream, sunManager.ReturnPosition());                                   // Stores the sun's position

            // Time
            formatter.Serialize(stream, timeManager.ReturnTimeSpeeds());                                // Stores the current and previous time state

            // CameraMode
            formatter.Serialize(stream, cameraMovement.ReturnCameraMode());

            // closes stream
            stream.Close();
        }
    }