string DumpObject( UnityEngine.Object obj, string folder, string previousFile = "") { Directory.CreateDirectory(folder); DumpObjectDelegate bestDumpDelegate = null; foreach (var kv in dumpMethods) { if (kv.Key.GetHashCode() == obj.GetType().GetHashCode()) { bestDumpDelegate = kv.Value; break; } if (obj.GetType().IsSubclassOf(kv.Key)) { bestDumpDelegate = kv.Value; } } try { if (bestDumpDelegate != null) { string fileName = $"{folder}/{BuildFileName(obj)}"; HTMLWriter.WriteDocument(fileName, $"{obj.name} - {obj.GetType().FullName}", cssStylePath, (HTMLWriter writer) => { writer.Link(previousFile, "< GO BACK"); writer.NewLine(); writer.OneLiner("h1", obj.name); writer.OneLiner("b", $"Type: {obj.GetType().FullName}"); writer.ShortTag("hr"); bestDumpDelegate.Invoke(obj, writer, this, folder); }); return(fileName); } } catch (Exception e) { Logger.Error("Failed to dump object!"); Logger.Error(e.Message); Logger.Error(e.StackTrace); return($"#exception_{e.Message}"); } return("#failed_to_generate_file"); }
void RegisterNewDumper <T>(DumpObjectDelegate dumpDelegate) where T : UnityEngine.Object { dumpMethods.Add(typeof(T), dumpDelegate); }