Exemplo n.º 1
0
        public void SaveSceneToJson()
        {
            SceneSaveData data = new SceneSaveData
            {
                GravConst = SimulationControl.Instance.GravitationalConstant,
                ScaleMlt  = 1f,
                TimeScale = SimulationControl.Instance.TimeScale
            };

            if (Application.isPlaying)
            {
                data.Bodies = new BodySaveData[ActorsManager.Instance.Actors.Count];
                for (int i = 0; i < data.Bodies.Length; i++)
                {
                    data.Bodies[i] = new BodySaveData()
                    {
                        Scale          = ActorsManager.Instance.Actors[i].TransformRef.localScale.x,
                        Position       = ActorsManager.Instance.Actors[i].CelestialBodyRef.Position,
                        Velocity       = ActorsManager.Instance.Actors[i].CelestialBodyRef.Velocity,
                        Mass           = ActorsManager.Instance.Actors[i].CelestialBodyRef.Mass,
                        Name           = ActorsManager.Instance.Actors[i].GameObjectRef.name,
                        IsKeplerMotion = ActorsManager.Instance.Actors[i].CelestialBodyRef.UseKeplerMotion
                    };
                }
            }
            else
            {
                var _bodies = GameObject.FindObjectsOfType <CelestialBody>();
                data.Bodies = new BodySaveData[_bodies.Length];
                for (int i = 0; i < data.Bodies.Length; i++)
                {
                    data.Bodies[i] = new BodySaveData()
                    {
                        Position       = _bodies[i].Position,
                        Velocity       = _bodies[i].Velocity,
                        Mass           = _bodies[i].Mass,
                        Name           = _bodies[i].name,
                        Scale          = _bodies[i].transform.localScale.x,
                        IsKeplerMotion = _bodies[i].UseKeplerMotion
                    };
                }
            }
            string filename = "SavedScene";

            // Not persistence data path, because we can save only in editor.
            string path = Application.dataPath + "/SpaceGravity2D/Demo/JsonData/";
            int    t    = 0;

            while (t < 100 && System.IO.File.Exists(path + filename + ".txt"))
            {
                t++;
                filename = "SavedScene (" + t + ")";
            }
            System.IO.File.WriteAllText(path + filename + ".txt", JsonUtility.ToJson(data, true));
            UnityEditor.AssetDatabase.Refresh();
            Debug.Log("SpaceGravity2D: Objects saved to " + filename);
        }
Exemplo n.º 2
0
        public void SaveSceneToJson()
        {
#if UNITY_EDITOR
            SceneSaveData data = new SceneSaveData
            {
                gravConst      = simControl.GravitationalConstant,
                isKeplerMotion = _isKeplerMotion,
                scaleMlt       = 1f,
                timeScale      = simControl.timeScale
            };
            if (Application.isPlaying)
            {
                data.bodies = new BodySaveData[pool.Count];
                for (int i = 0; i < data.bodies.Length; i++)
                {
                    if (!pool[i].isReady)
                    {
                        data.bodies[i] = new BodySaveData()
                        {
                            scale    = pool[i].body.transformRef.localScale.x,
                            position = pool[i].body.position,
                            velocity = pool[i].body.velocity,
                            color    = pool[i].meshRend.material.color,
                            mass     = pool[i].body.mass,
                            name     = pool[i].go.name
                        };
                    }
                }
                data.bodies = data.bodies.Where(b => b != null).ToArray();
            }
            else
            {
                var _bodies = GameObject.FindObjectsOfType <CelestialBody>();
                data.bodies = new BodySaveData[_bodies.Length];
                for (int i = 0; i < data.bodies.Length; i++)
                {
                    if (_bodies[i].gameObject.activeSelf)
                    {
                        var col = _bodies[i].GetComponent <MeshRenderer>() != null ? _bodies[i].GetComponent <MeshRenderer>().sharedMaterial.color : new Color();
                        data.bodies[i] = new BodySaveData()
                        {
                            position = _bodies[i].position,
                            velocity = _bodies[i].velocity,
                            mass     = _bodies[i].mass,
                            name     = _bodies[i].name,
                            scale    = _bodies[i].transform.localScale.x,
                            color    = col
                        };
                    }
                }
                data.bodies = data.bodies.Where(b => b != null).ToArray();
            }
            string filename = "SavedScene";
            string path     = Application.dataPath + "/SpaceGravity2D/Demo/JsonData/";
            int    t        = 0;
            while (t < 100 && System.IO.File.Exists(path + filename + ".txt"))
            {
                t++;
                filename = "SavedScene (" + t + ")";
            }
            System.IO.File.WriteAllText(path + filename + ".txt", JsonUtility.ToJson(data, true));
            UnityEditor.AssetDatabase.Refresh();
            Debug.Log("SpaceGravity2D: Objects saved to " + filename);
#endif
        }