Skip to content

Commit 56b4ece

Browse files
committed
Merge branch '12-remove-odin-dependency'
2 parents 12a57b0 + 9833db8 commit 56b4ece

1 file changed

Lines changed: 45 additions & 59 deletions

File tree

Editor/SOVariant.cs

Lines changed: 45 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,14 @@ public void NotifyOverrideChangeInState(string name, bool isOverriden)
106106
targetFieldInfo.GetValue(_target) == parentFieldInfo.GetValue(_parent))
107107
{
108108
object parentObject = parentFieldInfo.GetValue(_parent);
109-
object parentObjectCopy =
110-
Clone(parentObject);
109+
110+
var jsonSettings = new Newtonsoft.Json.JsonSerializerSettings()
111+
{
112+
ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore,
113+
TypeNameHandling = Newtonsoft.Json.TypeNameHandling.All
114+
};
115+
var serialized = JsonConvert.SerializeObject(parentObject, jsonSettings);
116+
object parentObjectCopy = JsonConvert.DeserializeObject<object>(serialized, jsonSettings);
111117
targetFieldInfo.SetValue(_target, parentObjectCopy);
112118
}
113119
}
@@ -168,9 +174,9 @@ public void LoadData(T targetObject)
168174
{
169175
string data = _import.userData;
170176
var extractedData = ExtractData(data);
171-
_parent = extractedData.Item2;
172-
_overridden = extractedData.Item3 ?? new List<string>();
173-
_children = extractedData.Item4 ?? new List<string>();
177+
_parent = extractedData.parent;
178+
_overridden = extractedData.overridden ?? new List<string>();
179+
_children = extractedData.children ?? new List<string>();
174180
}
175181
catch
176182
{
@@ -180,24 +186,28 @@ public void LoadData(T targetObject)
180186
}
181187
}
182188

183-
private Tuple<string, T, List<string>, List<string>> ExtractData(string data)
189+
190+
private (string parentGUID, T parent, List<string> overridden, List<string>children) ExtractData(string data)
184191
{
185-
if(string.IsNullOrEmpty(data))
186-
return new Tuple<string, T, List<string>, List<string>>(null, null, null, null);
192+
if(!CheckForDataString(data))
193+
return (null, null, null, null);
187194
try
188195
{
189-
string dataJson = JsonConvert.DeserializeObject<Dictionary<string, string>>(data)["SOVariantData"];
196+
string dataJson = GetSOVariantData(data);
197+
if(! CheckForDataString(dataJson))
198+
return (null, null, null, null);
190199
Dictionary<string, string> containedData =
191200
JsonConvert.DeserializeObject<Dictionary<string, string>>(dataJson);
192201

193202
string parentGUID = containedData["parentGUID"];
203+
194204
var parent = AssetDatabase.LoadAssetAtPath<T>(AssetDatabase.GUIDToAssetPath(parentGUID));
195205

196206
var overridden = JsonConvert.DeserializeObject<List<string>>(containedData["overriddenFields"]);
197207

198208
var children = JsonConvert.DeserializeObject<List<string>>(containedData["childrenGUIDs"]);
199209

200-
return new Tuple<string, T, List<string>, List<string>>(parentGUID, parent, overridden, children);
210+
return (parentGUID, parent, overridden, children);
201211
}
202212
catch
203213
{
@@ -215,25 +225,27 @@ private Tuple<string, T, List<string>, List<string>> ExtractData(string data)
215225
"Try again"))
216226
{
217227
case (0):
218-
return new Tuple<string, T, List<string>, List<string>>(null, null, null, null);
228+
return (null, null, null, null);
219229
case (1):
220230
Debug.Log($"UserData not overwritten.");
221231
_SOVariantProperlyLoaded = false;
222-
return null;
232+
return (null, null, null, null);;
223233
case (2):
224234
return ExtractData(ReadUpdatedMetaFile(data));
225235
}
226236
}
237+
return (null, null, null, null);
238+
}
227239

228-
return null;
240+
private static string GetSOVariantData(string data)
241+
{
242+
string dataJson = JsonConvert.DeserializeObject<Dictionary<string, string>>(data)["SOVariantData"];
243+
return dataJson;
229244
}
230245

231-
private List<string> DeserializeChildrenData(string data)
246+
private bool CheckForDataString(string data)
232247
{
233-
// byte[] childrenDataStream = data.Split(',').ToList().Select(source => byte.Parse(source)).ToArray();
234-
// var children = SerializationUtility.DeserializeValue<List<string>>(childrenDataStream, DataFormat.Binary);
235-
var children = JsonConvert.DeserializeObject<List<string>>(data);
236-
return children;
248+
return !string.IsNullOrEmpty(data) ;
237249
}
238250

239251
private void SetAllFieldsToParent()
@@ -301,15 +313,15 @@ private void PropagateValuesToChildren(T target, string targetGUID, ref List<str
301313

302314
var extractedData = ExtractData(childImporter.userData);
303315

304-
if (extractedData.Item1 == null || extractedData.Item2 == null || extractedData.Item3 == null ||
305-
extractedData.Item4 == null)
316+
if (extractedData.parentGUID == null || extractedData.parent == null || extractedData.overridden == null ||
317+
extractedData.children == null)
306318
{
307319
children.Remove(child);
308320
childrenUpdated = true;
309321
continue;
310322
}
311323

312-
string parentGUID = extractedData.Item1;
324+
string parentGUID = extractedData.parentGUID;
313325

314326
if (parentGUID != targetGUID)
315327
{
@@ -318,7 +330,7 @@ private void PropagateValuesToChildren(T target, string targetGUID, ref List<str
318330
continue;
319331
}
320332

321-
List<string> overridden = extractedData.Item3;
333+
List<string> overridden = extractedData.overridden;
322334
T childObject = AssetDatabase.LoadAssetAtPath<T>(childPath);
323335
bool childChanged = false;
324336
foreach (FieldInfo fieldInfo in fieldInfos)
@@ -339,7 +351,7 @@ private void PropagateValuesToChildren(T target, string targetGUID, ref List<str
339351
EditorUtility.SetDirty(childObject);
340352

341353

342-
List<string> newChildrenList = extractedData.Item4;
354+
List<string> newChildrenList = extractedData.children;
343355
if (newChildrenList.Count > 0)
344356
PropagateValuesToChildren(childObject, AssetDatabase.AssetPathToGUID(childPath),
345357
ref newChildrenList, importer, changedValues);
@@ -353,36 +365,27 @@ private void PropagateValuesToChildren(T target, string targetGUID, ref List<str
353365

354366
private void AddToChildrenData(AssetImporter importer, string newChild)
355367
{
356-
string[] data = importer.userData.Split('*');
357-
if (data.Length != 3)
358-
{
359-
WriteOnlyChildrenData(importer, new List<string>() {newChild});
360-
return;
361-
}
368+
var extractedData = ExtractData(importer.userData);
362369

363-
List<string> children = DeserializeChildrenData(data[2]);
370+
List<string> children = extractedData.children ?? new List<string>();
364371
children.Add(newChild);
365-
WriteOnlyChildrenData(importer, children);
372+
WriteToImporter(importer, SerializeParentData(extractedData.parent), SerializeOverrideData(extractedData.overridden), SerializeChildrenData(children));
366373
}
367374

368375
public void RemoveFromChildrenData(AssetImporter importer, string oldChild)
369376
{
370-
string[] data = importer.userData.Split('*');
371-
if (data.Length != 3)
372-
return;
373-
List<string> children = DeserializeChildrenData(data[2]);
377+
var extractedData = ExtractData(importer.userData);
378+
379+
List<string> children = extractedData.children ?? new List<string>();
380+
374381
children.Remove(oldChild);
375-
WriteOnlyChildrenData(importer, children);
382+
WriteToImporter(importer, SerializeParentData(extractedData.parent), SerializeOverrideData(extractedData.overridden), SerializeChildrenData(children));
376383
}
377384

378385
private void WriteOnlyChildrenData(AssetImporter importer, List<string> children)
379386
{
380-
string[] data = importer.userData.Split('*');
381-
if (data.Length == 3)
382-
WriteToImporter(importer, data[0], data[1], SerializeChildrenData(children));
383-
else
384-
WriteToImporter(importer, SerializeParentData(null), SerializeOverrideData(new List<string>()),
385-
SerializeChildrenData(children));
387+
var extractedData = ExtractData(importer.userData);
388+
WriteToImporter(importer, SerializeParentData(extractedData.parent), SerializeOverrideData(extractedData.overridden), SerializeChildrenData(children));
386389
}
387390

388391
public void SaveData(List<string> overriddenMembers, List<string> changedValues = null)
@@ -407,13 +410,11 @@ public void SaveData(List<string> overriddenMembers, List<string> changedValues
407410

408411
private string SerializeChildrenData(List<string> children)
409412
{
410-
// return string.Join(",", SerializationUtility.SerializeValue<List<string>>(children, DataFormat.Binary));
411413
return JsonConvert.SerializeObject(children);
412414
}
413415

414416
private string SerializeParentData(T parent)
415417
{
416-
// return string.Join(",", SerializationUtility.SerializeValue<string>(AssetDatabase.GUIDFromAssetPath(AssetDatabase.GetAssetPath(parent)).ToString(), DataFormat.Binary));
417418
return AssetDatabase.GUIDFromAssetPath(AssetDatabase.GetAssetPath(parent)).ToString();
418419
}
419420

@@ -423,7 +424,6 @@ private string SerializeOverrideData(List<string> overrides)
423424
overrides.All(s => s != _otherSerializationBackend.First()))
424425
overrides.AddRange(_otherSerializationBackend);
425426

426-
// return string.Join(",", SerializationUtility.SerializeValue<List<string>>(overrides, DataFormat.Binary));
427427
return JsonConvert.SerializeObject(overrides);
428428
}
429429

@@ -505,19 +505,5 @@ private string ReadUpdatedMetaFile(string oldData)
505505

506506
return oldData;
507507
}
508-
509-
private T Clone<T>(T source)
510-
{
511-
var jsonSettings = new Newtonsoft.Json.JsonSerializerSettings() {
512-
// Use this option
513-
//
514-
// to ignore reference looping option
515-
ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore,
516-
// Use this option when properties use an Interface as the type
517-
TypeNameHandling = Newtonsoft.Json.TypeNameHandling.All
518-
};
519-
var serialized = JsonConvert.SerializeObject(source, jsonSettings);
520-
return JsonConvert.DeserializeObject<T>(serialized, jsonSettings);
521-
}
522508
}
523509
}

0 commit comments

Comments
 (0)