60 lines
1.8 KiB
C#
60 lines
1.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using UniGLTF;
|
|
using UnityEngine;
|
|
|
|
namespace VRM
|
|
{
|
|
public static class VRMFirstPersonValidator
|
|
{
|
|
public static Transform[] Hierarchy;
|
|
static Action extended;
|
|
|
|
public static bool IsValid(this VRMFirstPerson.RendererFirstPersonFlags r, string name, out Validation validation)
|
|
{
|
|
if (r.Renderer == null)
|
|
{
|
|
validation = Validation.Error($"{name}.Renderer is null", ValidationContext.Create(extended));
|
|
return false;
|
|
}
|
|
|
|
if (!Hierarchy.Contains(r.Renderer.transform))
|
|
{
|
|
validation = Validation.Error($"{name}.Renderer is out of hierarchy", ValidationContext.Create(extended));
|
|
return false;
|
|
}
|
|
|
|
// if (!r.Renderer.EnableForExport())
|
|
// {
|
|
// validation = Validation.Error($"{name}.Renderer is not active", ValidationContext.Create(extended));
|
|
// return false;
|
|
// }
|
|
|
|
validation = default;
|
|
return true;
|
|
}
|
|
|
|
public static IEnumerable<Validation> Validate(this VRMFirstPerson self, GameObject _)
|
|
{
|
|
Hierarchy = self.GetComponentsInChildren<Transform>(true);
|
|
|
|
extended = () =>
|
|
{
|
|
if (GUILayout.Button("reset VRMFirstPerson.Renderers"))
|
|
{
|
|
self.TraverseRenderers();
|
|
}
|
|
};
|
|
|
|
for (int i = 0; i < self.Renderers.Count; ++i)
|
|
{
|
|
if (!IsValid(self.Renderers[i], $"[VRMFirstPerson]{self.name}.Renderers[{i}]", out Validation v))
|
|
{
|
|
yield return v;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|