public static bool IsValid(ChiselModelGeneratedObjects satelliteObjects)
        {
            if (satelliteObjects == null)
            {
                return(false);
            }

            if (!satelliteObjects.generatedDataContainer ||
                !satelliteObjects.colliderContainer ||
                satelliteObjects.colliders == null ||   // must be an array, even if 0 length
                satelliteObjects.renderables == null ||
                satelliteObjects.renderables.Length != 8 ||
                satelliteObjects.meshRenderers == null ||
                satelliteObjects.meshRenderers.Length != 5)
            {
                return(false);
            }

            // These queries are valid, and should never be null
            if (satelliteObjects.renderables[1] == null ||
                satelliteObjects.renderables[2] == null ||
                satelliteObjects.renderables[3] == null ||
                satelliteObjects.renderables[5] == null ||
                satelliteObjects.renderables[7] == null)
            {
                return(false);
            }


            // These queries are invalid, and should always be null
            satelliteObjects.renderables[0] = null;
            satelliteObjects.renderables[4] = null;
            satelliteObjects.renderables[6] = null;


            for (int i = 0; i < satelliteObjects.renderables.Length; i++)
            {
                if (satelliteObjects.renderables[i] == null)
                {
                    continue;
                }
                if (!ChiselRenderObjects.IsValid(satelliteObjects.renderables[i]))
                {
                    return(false);
                }
            }

            for (int i = 0; i < satelliteObjects.colliders.Length; i++)
            {
                if (!ChiselColliderObjects.IsValid(satelliteObjects.colliders[i]))
                {
                    return(false);
                }
            }

            return(true);
        }
        public static bool IsValid(ChiselGeneratedObjects satelliteObjects)
        {
            if (satelliteObjects == null)
            {
                return(false);
            }

            if (!satelliteObjects.generatedDataContainer)
            {
                return(false);
            }

            if (!satelliteObjects.colliderContainer ||
                satelliteObjects.colliders == null)   // must be an array, even if 0 length
            {
                return(false);
            }

            if (satelliteObjects.renderables == null ||
                satelliteObjects.renderables.Length != kGeneratedMeshRenderCount ||
                satelliteObjects.meshRenderers == null ||
                satelliteObjects.meshRenderers.Length != kGeneratedMeshRendererCount)
            {
                return(false);
            }

            if (satelliteObjects.debugHelpers == null ||
                satelliteObjects.debugHelpers.Length != kDebugHelperCount ||
                satelliteObjects.debugMeshRenderers == null ||
                satelliteObjects.debugMeshRenderers.Length != kDebugHelperCount)
            {
                return(false);
            }

            // These queries are valid, and should never be null (We don't care about the other queries)
            if (satelliteObjects.renderables[1] == null ||
                satelliteObjects.renderables[2] == null ||
                satelliteObjects.renderables[3] == null ||
                satelliteObjects.renderables[5] == null ||
                satelliteObjects.renderables[7] == null)
            {
                return(false);
            }

            // These queries are valid, and should never be null (We don't care about the other queries)
            for (int i = 0; i < kDebugHelperCount; i++)
            {
                if (satelliteObjects.debugHelpers[i] == null)
                {
                    return(false);
                }
            }

            satelliteObjects.renderables[0].invalid = true;
            satelliteObjects.renderables[1].invalid = false;
            satelliteObjects.renderables[2].invalid = false;
            satelliteObjects.renderables[3].invalid = false;
            satelliteObjects.renderables[4].invalid = true;
            satelliteObjects.renderables[5].invalid = false;
            satelliteObjects.renderables[6].invalid = true;
            satelliteObjects.renderables[7].invalid = false;

            for (int i = 0; i < kDebugHelperCount; i++)
            {
                satelliteObjects.debugHelpers[i].invalid = false;
            }

            for (int i = 0; i < satelliteObjects.renderables.Length; i++)
            {
                if (satelliteObjects.renderables[i] == null ||
                    satelliteObjects.renderables[i].invalid)
                {
                    continue;
                }
                if (!ChiselRenderObjects.IsValid(satelliteObjects.renderables[i]))
                {
                    return(false);
                }
            }

            for (int i = 0; i < satelliteObjects.debugHelpers.Length; i++)
            {
                if (satelliteObjects.debugHelpers[i] == null)
                {
                    continue;
                }
                if (!ChiselRenderObjects.IsValid(satelliteObjects.debugHelpers[i]))
                {
                    return(false);
                }
            }

            for (int i = 0; i < satelliteObjects.colliders.Length; i++)
            {
                if (!ChiselColliderObjects.IsValid(satelliteObjects.colliders[i]))
                {
                    return(false);
                }
            }

            return(true);
        }