Пример #1
0
    /**
     *  @brief  행성 정보를 저장한다.
     */
    public static void SaveVoxelPlanet(GameObject planet, string savePath)
    {
        if (planet == null)
        {
            return;
        }

        string dir = Path.GetDirectoryName(savePath) + "/" + Path.GetFileNameWithoutExtension(savePath);

        ResetDirectory(dir);
        SaveLocation(dir);

        var planetPath = dir + "/" + Path.GetFileName(savePath);
        var planetInfo = planet.GetComponent <VoxelPlanetInfo>();

        //행성 생성 정보 저장
        var tfTerrain = planet.transform.Find("Terrain");
        var tfClouds  = planet.transform.Find("Clouds");

        var savePlanet = new SavePlanet(planetInfo, tfTerrain, tfClouds);

        IFormatter formatter = new BinaryFormatter();
        Stream     stream    = new FileStream(planetPath, FileMode.Create, FileAccess.Write, FileShare.None);

        formatter.Serialize(stream, savePlanet);
        stream.Close();

        //행성 데이터 저장
        //dir += Path.GetFileNameWithoutExtension(savePath) + "_Data";

        SavePlanetData(tfTerrain, dir);
        SavePlanetData(tfClouds, dir);
    }
Пример #2
0
    // Start is called before the first frame update
    void Start()
    {
        SavePlanet temp = FindObjectOfType <SavePlanet>();

        if (temp != null)
        {
            temp.UpdatePlanets();
        }
    }
Пример #3
0
    /**
     *  @brief      Load된 정보로 Planet정보 구성
     *  @param      loadInfo : Load된 정보
     */
    public void ReLoadInfo(SavePlanet loadInfo)
    {
        if (loadInfo == null)
        {
            return;
        }

        Init(loadInfo.name);

        isSphere = loadInfo.isSphere;

        modifyList = new Dictionary <WorldPos, List <ModifyArea> >(loadInfo.modifyList);

        //Area Object 정보를 구성하고 생성한다.
        if (loadInfo.areaObjPath != null)
        {
            foreach (var objPath in loadInfo.areaObjPath)
            {
                if (modifyAreaObject.ContainsKey(objPath))
                {
                    if (modifyAreaObject[objPath] != null)
                    {
                        continue;
                    }
                }

                var obj = Instantiate(Resources.Load(objPath), Vector3.zero, Quaternion.Euler(Vector3.zero)) as GameObject;

                //생성된 Object는 참조 할 때만 활성화
                obj.SetActive(false);

                //렌더 비활성화.
                var mesh = obj.GetComponent <MeshRenderer>();
                if (mesh != null)
                {
                    mesh.enabled = false;
                }

                //인스펙터에서 숨긴다.
                obj.hideFlags             = HideFlags.HideInHierarchy;
                modifyAreaObject[objPath] = obj;
            }
        }

        if (loadInfo.terrainInfo != null)
        {
            terrainInfo = loadInfo.terrainInfo.DeepCopy();
        }

        if (loadInfo.cloudsInfo != null)
        {
            cloudInfo = loadInfo.cloudsInfo.DeepCopy();
        }
    }
Пример #4
0
    public static SavePlanet LoadPlanet(string path)
    {
        if (!File.Exists(path))
        {
            return(null);
        }

        FileStream stream = new FileStream(path, FileMode.Open);
        SavePlanet save   = (SavePlanet)formatter.Deserialize(stream);

        stream.Close();

        //foreach (KeyValuePair<WorldPos, List<ModifyArea>> pair in save.squareArea)
        //{
        //    Debug.Log(pair.Value[0].GetModifyFillMode());
        //}

        return(save);
    }