@@ -13,18 +13,18 @@ public class SaveLoadManager : ScriptableObject
1313 {
1414 [ Header ( "Settings" ) , SerializeField ] private string defaultFolder = "SaveData" ;
1515 public string DefaultFolder => defaultFolder ;
16-
16+
1717 [ SerializeField ] private string baseFolder = "GameData" ;
1818 public string BaseFolder => baseFolder ;
19-
19+
2020 [ SerializeField ] private SerializationMethodType saveMethod = SerializationMethodType . Default ;
2121
2222 [ Header ( "Encryption" ) , SerializeField ] protected string key = string . Empty ;
2323 public string Key => key ;
24-
24+
2525 [ SerializeField ] protected string salt = string . Empty ;
2626 public string Salt => salt ;
27-
27+
2828 private Dictionary < SerializationMethodType , ISerializationMethod > _methods ;
2929
3030 private void OnEnable ( )
@@ -53,10 +53,10 @@ public static SaveLoadManager Create(string baseFolder, string defaultFolder, Se
5353 instance . key = key ;
5454 instance . salt = salt ;
5555 instance . saveMethod = saveMethod ;
56-
56+
5757 return instance ;
5858 }
59-
59+
6060 /// <summary>
6161 /// Save an object to disk
6262 /// </summary>
@@ -77,14 +77,31 @@ public void Save(object obj, string filename, string folder = null)
7777 /// Gets the list of save files that have been created
7878 /// </summary>
7979 /// <param name="folder">sub folder</param>
80+ /// <param name="streamingAssets">Will use Application.streamingAssetsPath as base path if true otherwise Application.persistentDataPath</param>
81+ /// <returns>list of file names (excludes the path)</returns>
82+ public string [ ] GetFiles ( string folder = null , bool streamingAssets = false )
83+ {
84+ if ( string . IsNullOrEmpty ( folder ) )
85+ {
86+ folder = defaultFolder ;
87+ }
88+ return SaveLoadUtility . GetSavedFiles ( folder , baseFolder , streamingAssets ) ;
89+ }
90+
91+ /// <summary>
92+ /// Gets the list of save files that have been created
93+ /// </summary>
94+ /// <param name="list">list to be populated with file names</param>
95+ /// <param name="folder">sub folder</param>
96+ /// <param name="streamingAssets">Will use Application.streamingAssetsPath as base path if true otherwise Application.persistentDataPath</param>
8097 /// <returns>list of file names (excludes the path)</returns>
81- public string [ ] GetFiles ( string folder = null )
98+ public void GetFiles ( List < string > list , string folder = null , bool streamingAssets = false )
8299 {
83100 if ( string . IsNullOrEmpty ( folder ) )
84101 {
85102 folder = defaultFolder ;
86103 }
87- return SaveLoadUtility . GetSavedFiles ( folder , baseFolder ) ;
104+ SaveLoadUtility . GetSavedFiles ( list , folder , baseFolder , streamingAssets ) ;
88105 }
89106
90107 /// <summary>
@@ -119,17 +136,18 @@ public T Copy<T>(T obj)
119136 var saveLoadMethod = GetSaveLoadMethod ( saveMethod ) ;
120137 return ( T ) saveLoadMethod . Copy ( obj ) ;
121138 }
122-
139+
123140 /// <summary>
124141 /// Load an object from disk
125142 /// </summary>
126143 /// <param name="filename">Name of file to load from</param>
127144 /// <param name="folder">Name of folder containing the file</param>
145+ /// <param name="streamingAssets">Load file from streaming assets</param>
128146 /// <typeparam name="T">Type of object to be loaded from file</typeparam>
129147 /// <returns>Instance of object loaded from file</returns>
130- public T Load < T > ( string filename , string folder = null )
148+ public T Load < T > ( string filename , string folder = null , bool streamingAssets = false )
131149 {
132- return ( T ) Load ( typeof ( T ) , filename , folder ) ;
150+ return ( T ) Load ( typeof ( T ) , filename , folder , streamingAssets ) ;
133151 }
134152
135153 /// <summary>
@@ -138,15 +156,16 @@ public T Load<T>(string filename, string folder = null)
138156 /// <param name="type">Type of object to be loaded</param>
139157 /// <param name="filename">Name of file to load object from</param>
140158 /// <param name="folder">Name of folder containing the file to be loaded</param>
159+ /// <param name="streamingAssets">Load file from streaming assets</param>
141160 /// <returns>Instance of object to be loaded. Null if file did not exist.</returns>
142- public object Load ( Type type , string filename , string folder = null )
161+ public object Load ( Type type , string filename , string folder = null , bool streamingAssets = false )
143162 {
144163 if ( string . IsNullOrEmpty ( folder ) )
145164 {
146165 folder = defaultFolder ;
147166 }
148167 var saveLoadMethod = GetSaveLoadMethod ( saveMethod ) ;
149- return SaveLoadUtility . Load ( type , saveLoadMethod , filename , folder , baseFolder ) ;
168+ return SaveLoadUtility . Load ( type , saveLoadMethod , filename , folder , baseFolder , streamingAssets ) ;
150169 }
151170
152171 /// <summary>
@@ -162,7 +181,7 @@ public void DeleteSave(string filename, string folder = null)
162181 }
163182 SaveLoadUtility . DeleteSavedFile ( filename , folder , baseFolder ) ;
164183 }
165-
184+
166185 /// <summary>
167186 /// Save object to file and specify the method of save/load
168187 /// </summary>
@@ -217,7 +236,7 @@ public void SaveUnityObject(UnityEngine.Object unityObj, string filename, string
217236 {
218237 jsonData = JsonUtility . ToJson ( unityObj )
219238 } ;
220-
239+
221240 Save ( savedObj , filename , folder ) ;
222241 }
223242
@@ -233,12 +252,12 @@ public void SaveUnityObject(UnityEngine.Object unityObj, string filename, string
233252 public bool LoadUnityObjectOverwrite ( UnityEngine . Object objectToOverwrite , string filename , string folder = null )
234253 {
235254 var savedObj = Load < JsonSerializedUnityObject > ( filename , folder ) ;
236-
255+
237256 if ( savedObj == null || string . IsNullOrEmpty ( savedObj . jsonData ) )
238257 {
239258 return false ;
240259 }
241-
260+
242261 JsonUtility . FromJsonOverwrite ( savedObj . jsonData , objectToOverwrite ) ;
243262 return true ;
244263 }
@@ -253,7 +272,7 @@ public void CopyUnityObjectOverwrite(UnityEngine.Object toCopy, UnityEngine.Obje
253272 var jsonData = JsonUtility . ToJson ( toCopy ) ;
254273 JsonUtility . FromJsonOverwrite ( jsonData , toOverwrite ) ;
255274 }
256-
275+
257276 /// <summary>
258277 /// JsonSerializedUnityObject
259278 /// Wrapper for json data created when using Unity's JsonUtility to serialize an object derived from UnityEngine.Object
@@ -280,7 +299,7 @@ public void SetCustomSerializationMethod(ISerializationMethod customSerializatio
280299 }
281300 _methods [ SerializationMethodType . Custom ] = customSerializationMethod ;
282301 }
283-
302+
284303 private ISerializationMethod GetSaveLoadMethod ( SerializationMethodType methodType )
285304 {
286305 if ( _methods == null )
@@ -305,14 +324,14 @@ private ISerializationMethod GetSaveLoadMethod(SerializationMethodType methodTyp
305324 case SerializationMethodType . UnityJson :
306325 method = new SerializationMethodUnityJson ( ) ;
307326 break ;
308-
327+
309328 case SerializationMethodType . BinaryEncrypted :
310329 method = new SerializationMethodBinaryEncrypted ( key , salt ) ;
311330 break ;
312331 case SerializationMethodType . UnityJsonEncrypted :
313332 method = new SerializationMethodUnityJsonEncrypted ( key , salt ) ;
314333 break ;
315-
334+
316335#if JSON_DOT_NET
317336 case SerializationMethodType . JsonDotNet:
318337 method = new SerializationMethodJsonDotNet ( ) ;
@@ -321,19 +340,17 @@ private ISerializationMethod GetSaveLoadMethod(SerializationMethodType methodTyp
321340 method = new SerializationMethodJsonDotNetEncrypted ( key , salt ) ;
322341 break ;
323342#endif
324-
343+
325344 case SerializationMethodType . Custom :
326345 throw new MissingComponentException ( "SerializationMethodType is Custom but no custom ISerializationMethod was found." ) ;
327346 default :
328347 throw new ArgumentOutOfRangeException ( nameof ( methodType ) , methodType , "SaveLoadMethodType not supported" ) ;
329348 }
330349
331350 _methods [ methodType ] = method ;
332-
351+
333352 return method ;
334353 }
335-
336- }
337- }
338-
339354
355+ }
356+ }
0 commit comments