mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-09-13 22:39:39 -05:00
コード整理。コメント増量
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user