public static void MenuItemCreateMeshBuilder_RepeatingMesh()
        {
            var editorConfig = SplineEditorConfig.FindConfig();

            var newGameobject = new GameObject("NewSplineMesh_RepeatingMesh");

            var spline = newGameobject.AddComponent <Spline>();

            spline.SetSplineSpace(Space.Self, false);
            spline.EditorAlwaysFacePointsForwardAndUp = true;

            var meshBuilder = newGameobject.AddComponent <SplineMeshBuilder_RepeatingMesh>();

            meshBuilder.SplineReference           = spline;
            meshBuilder.UseRepeatingMeshUVs       = true;
            meshBuilder.use_splinepoint_rotations = true;
            meshBuilder.use_splinepoint_scale     = true;

            var newMeshRenderer = newGameobject.AddComponent <MeshRenderer>();

            newMeshRenderer.sharedMaterial = editorConfig.defaultMaterialForRenderers;

            // toggle to force register
            meshBuilder.enabled = false;
            meshBuilder.enabled = true;

            if (Selection.activeTransform != null)
            {
                newGameobject.transform.SetParent(Selection.activeTransform);
            }

            Selection.activeGameObject = newGameobject;
        }
        public static void MenuItemCreateMeshBuilder_Cubey()
        {
            var editorConfig  = SplineEditorConfig.FindConfig();
            var newGameobject = new GameObject("NewSplinePrefabRepeater");

            var spline = newGameobject.AddComponent <Spline>();

            spline.SetSplineSpace(Space.Self, false);
            spline.EditorAlwaysFacePointsForwardAndUp = true;

            var meshBuilder = newGameobject.AddComponent <PrefabRepeater>();

            meshBuilder.SplineReference = spline;

            // toggle to force register
            meshBuilder.enabled = false;
            meshBuilder.enabled = true;

            if (Selection.activeTransform != null)
            {
                newGameobject.transform.SetParent(Selection.activeTransform);
            }

            Selection.activeGameObject = newGameobject;
        }
        public static SplineEditorConfig FindConfig()
        {
            var guids = AssetDatabase.FindAssets("t:SplineEditorConfig");

            foreach (var guid in guids)
            {
                if (string.IsNullOrEmpty(guid))
                {
                    continue;
                }

                var assetPath = AssetDatabase.GUIDToAssetPath(guid);
                if (string.IsNullOrEmpty(assetPath))
                {
                    continue;
                }

                var result = AssetDatabase.LoadAssetAtPath <SplineEditorConfig>(assetPath);
                if (result == null)
                {
                    continue;
                }

                return(result);
            }

            var newEditorConfig = SplineEditorConfig.CreateInstance <SplineEditorConfig>();

            var newAssetPath = "Assets/SplineEditorConfig.asset";

            AssetDatabase.CreateAsset(newEditorConfig, newAssetPath);
            AssetDatabase.SaveAssets();
            var newAsset = AssetDatabase.LoadAssetAtPath <SplineEditorConfig>(newAssetPath);

            Debug.Log("[CorgiSpline] SplineEditorConfig was not found, so one has been created.", newAsset);

            return(newAsset);
        }