using System.Collections.Generic; using ClusterVR.CreatorKit.Editor.Repository; using UnityEngine; namespace ClusterVR.CreatorKit.Editor.Validator.GltfItemExporter { public sealed class CraftItemComponentValidator : IComponentValidator { static readonly string[] ShaderNameAllowList = { "Standard", "Unlit/Texture", "ClusterVR/InternalSDK/MainScreen", "ClusterVR/UnlitNonTiledWithBackgroundColor", "ClusterCreatorKit/Mirror" }; static readonly Vector3Int ItemSizeLimit = new Vector3Int(4, 4, 4); static readonly Vector3 BoundsCenterLimit = new Vector3(0, 2, 0); static readonly Vector3 BoundsSizeLimit = new Vector3(5, 5, 5); static readonly int MaxMirrorCount = 1; public IEnumerable Validate(GameObject gameObject, bool isBeta) { var validationMessages = new List(); validationMessages.AddRange(ComponentValidator.ValidateItem(gameObject, ItemSizeLimit, false, true)); validationMessages.AddRange(ComponentValidator.ValidateScriptableCraftItem(gameObject)); validationMessages.AddRange(ComponentValidator.ValidateRenderers(gameObject)); validationMessages.AddRange(ComponentValidator.ValidateCraftItemPlayerScript(gameObject)); var requireComponentValidator = new RequireComponentValidator(); foreach (var component in gameObject.GetComponentsInChildren(true)) { var isRoot = component.gameObject == gameObject; validationMessages.AddRange(ComponentValidator.ValidateComponent(component, isRoot)); requireComponentValidator.Validate(component); } validationMessages.AddRange(requireComponentValidator.GetMessage()); validationMessages.AddRange(ComponentValidator.ValidateBounds(gameObject, BoundsCenterLimit, BoundsSizeLimit)); validationMessages.AddRange(ComponentValidator.ValidateShader(gameObject, ShaderNameAllowList, true)); validationMessages.AddRange(ComponentValidator.ValidateItemAudioSetList(gameObject)); validationMessages.AddRange(ComponentValidator.ValidateMirror(gameObject, MaxMirrorCount)); validationMessages.AddRange(ComponentValidator.ValidateCollider(gameObject)); validationMessages.AddRange(ComponentValidator.ValidateHumanoidAnimationList(gameObject)); validationMessages.AddRange(ComponentValidator.ValidateTextViews(gameObject, isBeta)); validationMessages.AddRange(ComponentValidator.ValidateItemMaterialSetList(gameObject)); validationMessages.AddRange(ComponentValidator.ValidateAttachTargetList(gameObject)); return validationMessages; } } }