5 using System.Collections.Generic;
9 #if !UNITY_EDITOR && UNITY_WSA 10 using System.Threading.Tasks;
11 using Windows.Storage;
12 using Windows.Storage.Streams;
25 private static string fileExtension =
".room";
30 public static string MeshFolderName
34 #if !UNITY_EDITOR && UNITY_WSA 35 return ApplicationData.Current.RoamingFolder.Path;
37 return Application.persistentDataPath;
49 public static string Save(
string fileName, IEnumerable<MeshFilter> meshFilters)
51 if (
string.IsNullOrEmpty(fileName))
53 throw new ArgumentException(
"Must specify a valid fileName.");
56 if (meshFilters == null)
58 throw new ArgumentNullException(
"Value of meshFilters cannot be null.");
62 String folderName = MeshFolderName;
63 Debug.Log(String.Format(
"Saving mesh file: {0}", Path.Combine(folderName, fileName + fileExtension)));
65 using (Stream stream = OpenFileForWrite(folderName, fileName + fileExtension))
69 stream.Write(data, 0, data.Length);
73 Debug.Log(
"Mesh file saved.");
75 return Path.Combine(folderName, fileName + fileExtension);
85 public static string Save(
string fileName, IEnumerable<Mesh> meshes)
87 if (
string.IsNullOrEmpty(fileName))
89 throw new ArgumentException(
"Must specify a valid fileName.");
94 throw new ArgumentNullException(
"Value of meshes cannot be null.");
98 String folderName = MeshFolderName;
99 Debug.Log(String.Format(
"Saving mesh file: {0}", Path.Combine(folderName, fileName + fileExtension)));
101 using (Stream stream = OpenFileForWrite(folderName, fileName + fileExtension))
105 stream.Write(data, 0, data.Length);
109 Debug.Log(
"Mesh file saved.");
111 return Path.Combine(folderName, fileName + fileExtension);
120 public static IList<Mesh>
Load(
string fileName)
122 if (
string.IsNullOrEmpty(fileName))
124 throw new ArgumentException(
"Must specify a valid fileName.");
127 List<Mesh> meshes =
new List<Mesh>();
130 String folderName = MeshFolderName;
131 Debug.Log(String.Format(
"Loading mesh file: {0}", Path.Combine(folderName, fileName + fileExtension)));
133 using (Stream stream = OpenFileForRead(folderName, fileName + fileExtension))
136 byte[] data =
new byte[stream.Length];
137 stream.Read(data, 0, data.Length);
142 Debug.Log(
"Mesh file loaded.");
153 private static Stream OpenFileForRead(
string folderName,
string fileName)
155 Stream stream = null;
157 #if !UNITY_EDITOR && UNITY_WSA 158 Task<Task> task = Task<Task>.Factory.StartNew(
161 StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(folderName);
162 StorageFile file = await folder.GetFileAsync(fileName);
163 IRandomAccessStreamWithContentType randomAccessStream = await file.OpenReadAsync();
164 stream = randomAccessStream.AsStreamForRead();
169 stream =
new FileStream(Path.Combine(folderName, fileName), FileMode.Open, FileAccess.Read);
181 private static Stream OpenFileForWrite(
string folderName,
string fileName)
183 Stream stream = null;
185 #if !UNITY_EDITOR && UNITY_WSA 186 Task<Task> task = Task<Task>.Factory.StartNew(
189 StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(folderName);
190 StorageFile file = await folder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
191 IRandomAccessStream randomAccessStream = await file.OpenAsync(FileAccessMode.ReadWrite);
192 stream = randomAccessStream.AsStreamForWrite();
197 stream =
new FileStream(Path.Combine(folderName, fileName), FileMode.Create, FileAccess.Write);