コード整理。コメント増量

This commit is contained in:
ousttrue
2021-12-16 18:27:20 +09:00
parent e4dae3621b
commit 8f5a6bed4e

View File

@@ -9,6 +9,13 @@ namespace UniGLTF
{
public static class GltfJsonUtil
{
/// <summary>
/// JsonPath を 再帰的に列挙する
/// object[] の中身は int(array index) or string(object key)
/// </summary>
/// <param name="node"></param>
/// <param name="path"></param>
/// <returns></returns>
public static IEnumerable<object[]> TraverseJsonPath(JsonNode node, List<object> path)
{
if (path == null)
@@ -50,6 +57,43 @@ namespace UniGLTF
return $"\"{src}\"";
}
/// <summary>
/// jsonPath が
///
/// [..., "extensions", "EXTENSION_NAME"]
///
/// で有る場合に EXTENSION_NAME を返す。
/// </summary>
/// <param name="jsonPath"></param>
/// <param name="extensionName"></param>
/// <returns></returns>
static bool TryGetExtensionName(object[] path, out string extensionName)
{
if (path.Length >= 2)
{
if (path[path.Length - 2] is string x)
{
if (x == "extensions")
{
if (path[path.Length - 1] is string y)
{
extensionName = y;
return true;
}
else
{
// ありえない。はず
var join = string.Join(", ", path);
Debug.LogWarning($"invalid json path: {join}");
}
}
}
}
extensionName = default;
return false;
}
/// <summary>
/// https://github.com/KhronosGroup/glTF/blob/main/specification/2.0/schema/glTF.schema.json
///
@@ -63,19 +107,15 @@ namespace UniGLTF
/// <returns></returns>
public static string FindUsedExtensionsAndUpdateJson(string src)
{
var used = new HashSet<string>();
var parsed = src.ParseAsJson();
// unique な extension 名を収集
var used = new HashSet<string>();
foreach (var path in TraverseJsonPath(parsed, null))
{
if (path.Length >= 2)
if (TryGetExtensionName(path, out string extensionName))
{
if (path[path.Length - 2] is string x)
{
if (x == "extensions")
{
used.Add(path[path.Length - 1] as string);
}
}
used.Add(extensionName);
}
}