#if UNITY_EDITOR using UnityEditor; using UnityEngine; namespace GSpawn { public static class PluginFolders { public static string data { get { return FileSystem.findFolderPath("GSpawn - Level Designer") + "/Data"; } } public static string settings { get { return data + "/Settings"; } } public static string preferences { get { return data + "/Preferences"; } } public static string profiles { get { return data + "/Profiles"; } } public static string gridProfiles { get { return profiles + "/Grid"; } } public static string shortcutProfiles { get { return profiles + "/Shortcuts"; } } public static string randomPrefabProfiles { get { return profiles + "/Random Prefabs"; } } public static string intRangePrefabProfiles { get { return profiles + "/Int Range Prefabs"; } } public static string scatterBrushPrefabProfiles { get { return profiles + "/Scatter Brush Prefabs"; } } public static string tileRuleProfiles { get { return profiles + "/Tile Rules"; } } public static string modularWallPrefabProfiles { get { return profiles + "/Modular Walls"; } } public static string curvePrefabProfiles { get { return profiles + "/Curve Prefabs"; } } public static string prefabLibProfiles { get { return profiles + "/Prefab Libs"; ; } } public static string pluginObjectLayers { get { return data + "/Plugin Object Layers"; } } public static string objectGroups { get { return data + "/Object Groups"; } } public static string intPatternProfiles { get { return profiles + "/Int Patterns"; } } public static string segmentsObjectSpawnSettingsProfiles { get { return profiles + "/Segments Object Spawn"; } } public static string boxObjectSpawnSettingsProfiles { get { return profiles + "/Box Object Spawn"; } } public static string curveObjectSpawnSettingsProfiles { get { return profiles + "/Curve Object Spawn"; } } public static string pluginInternal { get { return data + "/Internal"; } } public static bool validateFolderPathForClientUsage(string path) { if (path == data || isChildOfDataFolder(path)) { Debug.LogWarning("The Data folder or children in the Data folder can not be used for this purpose."); return false; } return true; } public static bool isDataFolderValid() { if (!FileSystem.folderExists(data)) return false; else { if (!FileSystem.folderExists(settings)) return false; if (!FileSystem.folderExists(preferences)) return false; if (!FileSystem.folderExists(profiles)) return false; if (!FileSystem.folderExists(gridProfiles)) return false; if (!FileSystem.folderExists(shortcutProfiles)) return false; if (!FileSystem.folderExists(randomPrefabProfiles)) return false; if (!FileSystem.folderExists(intRangePrefabProfiles)) return false; if (!FileSystem.folderExists(scatterBrushPrefabProfiles)) return false; if (!FileSystem.folderExists(tileRuleProfiles)) return false; if (!FileSystem.folderExists(modularWallPrefabProfiles)) return false; if (!FileSystem.folderExists(curvePrefabProfiles)) return false; if (!FileSystem.folderExists(prefabLibProfiles)) return false; if (!FileSystem.folderExists(pluginObjectLayers)) return false; if (!FileSystem.folderExists(objectGroups)) return false; if (!FileSystem.folderExists(intPatternProfiles)) return false; if (!FileSystem.folderExists(segmentsObjectSpawnSettingsProfiles)) return false; if (!FileSystem.folderExists(boxObjectSpawnSettingsProfiles)) return false; if (!FileSystem.folderExists(curveObjectSpawnSettingsProfiles)) return false; if (!FileSystem.folderExists(pluginInternal)) return false; } return true; } public static bool isChildOfDataFolder(string path) { if (string.IsNullOrEmpty(path)) return false; return path.Length > data.Length && path.Contains(data); } public static void createDataFolderAndAssetsIfMissing() { PluginProgressDialog.begin(GSpawn.pluginName + " - Processing Data Folder & Assets"); createSettingsFolderAndAssets(); createPluginInternalFolderAndAssets(); createPrefsFolderAndAssets(); createGridProfilesFolderAndAssets(); createShortcutProfilesFolderAndAssets(); createRandomPrefabProfilesFolderAndAssets(); createIntRangePrefabProfilesFolderAndAssets(); createScatterBrushPrefabProfilesFolderAndAssets(); createModularWallPrefabProfilesFolderAndAssets(); createTileRuleProfilesFolderAndAssets(); createCurvePrefabProfilesFolderAndAssets(); createPrefabLibProfilesFolderAndAssets(); createPluginObjectLayersFolderAndAssets(); createObjectGroupsFolderAndAssets(); createIntPatternProfilesFolderAndAssets(); createSegmentsObjectSpawnSettingsProfilesFolderAndAssets(); createBoxObjectSpawnSettingsProfilesFolderAndAssets(); createCurveObjectSpawnSettingsProfilesFolderAndAssets(); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); PluginProgressDialog.end(); } private static void createPluginInternalFolderAndAssets() { if (FileSystem.folderExists(pluginInternal)) return; FileSystem.createFolder(pluginInternal); AssetDbEx.createScriptableObject_NoSave(pluginInternal, typeof(PluginInstanceData).Name); AssetDbEx.createScriptableObject_NoSave(pluginInternal, typeof(PrefabDataDb).Name); AssetDbEx.createScriptableObject_NoSave(pluginInternal, typeof(PrefabDecorRuleDb).Name); } private static void createSettingsFolderAndAssets() { if (FileSystem.folderExists(settings)) return; FileSystem.createFolder(settings); // Mesh combine AssetDbEx.createScriptableObject_NoSave(settings, typeof(MeshCombineUI).Name); AssetDbEx.createScriptableObject_NoSave(settings, typeof(MeshCombineSettings).Name); // Modular Snap Spawn AssetDbEx.createScriptableObject_NoSave(settings, typeof(ModularSnapObjectSpawn).Name + "_" + typeof(ObjectModularSnapSettings).Name); AssetDbEx.createScriptableObject_NoSave(settings, typeof(ModularSnapObjectSpawn).Name + "_" + typeof(ObjectMirrorGizmoSettings).Name); AssetDbEx.createScriptableObject_NoSave(settings, typeof(ModularSnapObjectSpawn).Name + "_" + typeof(ObjectSpawnGuideSettings).Name); // Modular Walls Spawn AssetDbEx.createScriptableObject_NoSave(settings, typeof(ModularWallsObjectSpawn).Name + "_" + typeof(ModularWallsObjectSpawnSettings).Name); AssetDbEx.createScriptableObject_NoSave(settings, typeof(ModularWallsObjectSpawn).Name + "_" + typeof(ObjectModularSnapSettings).Name); // Segments Spawn AssetDbEx.createScriptableObject_NoSave(settings, typeof(SegmentsObjectSpawn).Name + "_" + typeof(ObjectModularSnapSettings).Name); AssetDbEx.createScriptableObject_NoSave(settings, typeof(SegmentsObjectSpawn).Name + "_" + typeof(ObjectMirrorGizmoSettings).Name); // Box Spawn AssetDbEx.createScriptableObject_NoSave(settings, typeof(BoxObjectSpawn).Name + "_" + typeof(ObjectModularSnapSettings).Name); AssetDbEx.createScriptableObject_NoSave(settings, typeof(BoxObjectSpawn).Name + "_" + typeof(ObjectMirrorGizmoSettings).Name); // Props Spawn AssetDbEx.createScriptableObject_NoSave(settings, typeof(PropsObjectSpawn).Name + "_" + typeof(ObjectSurfaceSnapSettings).Name); AssetDbEx.createScriptableObject_NoSave(settings, typeof(PropsObjectSpawn).Name + "_" + typeof(ObjectDragSpawnSettings).Name); AssetDbEx.createScriptableObject_NoSave(settings, typeof(PropsObjectSpawn).Name + "_" + typeof(TerrainFlattenSettings).Name); AssetDbEx.createScriptableObject_NoSave(settings, typeof(PropsObjectSpawn).Name + "_" + typeof(ObjectSpawnGuideSettings).Name); AssetDbEx.createScriptableObject_NoSave(settings, typeof(PropsObjectSpawn).Name + "_" + typeof(ObjectMirrorGizmoSettings).Name); // Scatter Brush Spawn AssetDbEx.createScriptableObject_NoSave(settings, typeof(ScatterBrushObjectSpawnSettings).Name); // Tile Rule Spawn AssetDbEx.createScriptableObject_NoSave(settings, typeof(TileRuleObjectSpawnSettings).Name); AssetDbEx.createScriptableObject_NoSave(settings, typeof(TileRuleObjectSpawn).Name + "_" + typeof(TileRuleGridSettings).Name); // Physics Spawn AssetDbEx.createScriptableObject_NoSave(settings, typeof(PhysicsObjectSpawnSettings).Name); // Object Selection AssetDbEx.createScriptableObject_NoSave(settings, typeof(ObjectSelectionSettings).Name); AssetDbEx.createScriptableObject_NoSave(settings, typeof(ObjectSelectionGrowSettings).Name); AssetDbEx.createScriptableObject_NoSave(settings, typeof(ObjectSelection).Name + "_" + typeof(ObjectProjectionSettings).Name); AssetDbEx.createScriptableObject_NoSave(settings, typeof(ObjectSelection).Name + "_" + typeof(ObjectVertexSnapSettings).Name); AssetDbEx.createScriptableObject_NoSave(settings, typeof(ObjectSelection).Name + "_" + typeof(ObjectBoxSnapSettings).Name); AssetDbEx.createScriptableObject_NoSave(settings, typeof(ObjectSelection).Name + "_" + typeof(ObjectSurfaceSnapSettings).Name); AssetDbEx.createScriptableObject_NoSave(settings, typeof(ObjectSelection).Name + "_" + typeof(ObjectModularSnapSettings).Name); AssetDbEx.createScriptableObject_NoSave(settings, typeof(ObjectSelectionGizmos).Name + "_" + typeof(ObjectMirrorGizmoSettings).Name); AssetDbEx.createScriptableObject_NoSave(settings, typeof(ObjectSelectionGizmos).Name + "_" + typeof(ObjectExtrudeGizmoSettings).Name); // Object Erase AssetDbEx.createScriptableObject_NoSave(settings, typeof(ObjectEraseCursorSettings).Name); AssetDbEx.createScriptableObject_NoSave(settings, typeof(ObjectEraseBrush2DSettings).Name); AssetDbEx.createScriptableObject_NoSave(settings, typeof(ObjectEraseBrush3DSettings).Name); } private static void createPrefsFolderAndAssets() { if (FileSystem.folderExists(preferences)) return; FileSystem.createFolder(preferences); AssetDbEx.createScriptableObject_NoSave(preferences, typeof(GizmoPrefs).Name); AssetDbEx.createScriptableObject_NoSave(preferences, typeof(GridPrefs).Name); AssetDbEx.createScriptableObject_NoSave(preferences, typeof(InputPrefs).Name); AssetDbEx.createScriptableObject_NoSave(preferences, typeof(ObjectErasePrefs).Name); AssetDbEx.createScriptableObject_NoSave(preferences, typeof(ObjectPrefs).Name); AssetDbEx.createScriptableObject_NoSave(preferences, typeof(ObjectSelectionPrefs).Name); AssetDbEx.createScriptableObject_NoSave(preferences, typeof(ObjectSpawnPrefs).Name); AssetDbEx.createScriptableObject_NoSave(preferences, typeof(ObjectTransformSessionPrefs).Name); } private static void createGridProfilesFolderAndAssets() { if (FileSystem.folderExists(gridProfiles)) return; FileSystem.createFolder(gridProfiles); AssetDbEx.createScriptableObject_NoSave(gridProfiles, typeof(GridSettingsProfileDb).Name); AssetDbEx.createScriptableObject_NoSave(gridProfiles, typeof(GridSettingsProfileDbUI).Name); } private static void createShortcutProfilesFolderAndAssets() { if (FileSystem.folderExists(shortcutProfiles)) return; FileSystem.createFolder(shortcutProfiles); AssetDbEx.createScriptableObject_NoSave(shortcutProfiles, typeof(ShortcutProfileDb).Name); AssetDbEx.createScriptableObject_NoSave(shortcutProfiles, typeof(ShortcutProfileDbUI).Name); } private static void createRandomPrefabProfilesFolderAndAssets() { if (FileSystem.folderExists(randomPrefabProfiles)) return; FileSystem.createFolder(randomPrefabProfiles); AssetDbEx.createScriptableObject_NoSave(randomPrefabProfiles, typeof(RandomPrefabProfileDb).Name); AssetDbEx.createScriptableObject_NoSave(randomPrefabProfiles, typeof(RandomPrefabProfileDbUI).Name); } private static void createIntRangePrefabProfilesFolderAndAssets() { if (FileSystem.folderExists(intRangePrefabProfiles)) return; FileSystem.createFolder(intRangePrefabProfiles); AssetDbEx.createScriptableObject_NoSave(intRangePrefabProfiles, typeof(IntRangePrefabProfileDb).Name); AssetDbEx.createScriptableObject_NoSave(intRangePrefabProfiles, typeof(IntRangePrefabProfileDbUI).Name); } private static void createScatterBrushPrefabProfilesFolderAndAssets() { if (FileSystem.folderExists(scatterBrushPrefabProfiles)) return; FileSystem.createFolder(scatterBrushPrefabProfiles); AssetDbEx.createScriptableObject_NoSave(scatterBrushPrefabProfiles, typeof(ScatterBrushPrefabProfileDb).Name); AssetDbEx.createScriptableObject_NoSave(scatterBrushPrefabProfiles, typeof(ScatterBrushPrefabProfileDbUI).Name); } private static void createModularWallPrefabProfilesFolderAndAssets() { if (FileSystem.folderExists(modularWallPrefabProfiles)) return; FileSystem.createFolder(modularWallPrefabProfiles); AssetDbEx.createScriptableObject_NoSave(modularWallPrefabProfiles, typeof(ModularWallPrefabProfileDb).Name); AssetDbEx.createScriptableObject_NoSave(modularWallPrefabProfiles, typeof(ModularWallPrefabProfileDbUI).Name); } private static void createTileRuleProfilesFolderAndAssets() { if (FileSystem.folderExists(tileRuleProfiles)) return; FileSystem.createFolder(tileRuleProfiles); AssetDbEx.createScriptableObject_NoSave(tileRuleProfiles, typeof(TileRuleProfileDb).Name); AssetDbEx.createScriptableObject_NoSave(tileRuleProfiles, typeof(TileRuleProfileDbUI).Name); } private static void createCurvePrefabProfilesFolderAndAssets() { if (FileSystem.folderExists(curvePrefabProfiles)) return; FileSystem.createFolder(curvePrefabProfiles); AssetDbEx.createScriptableObject_NoSave(curvePrefabProfiles, typeof(CurvePrefabProfileDb).Name); AssetDbEx.createScriptableObject_NoSave(curvePrefabProfiles, typeof(CurvePrefabProfileDbUI).Name); } private static void createPrefabLibProfilesFolderAndAssets() { if (FileSystem.folderExists(prefabLibProfiles)) return; FileSystem.createFolder(prefabLibProfiles); AssetDbEx.createScriptableObject_NoSave(prefabLibProfiles, typeof(PrefabLibProfileDb).Name); // Note: In this order. AssetDbEx.createScriptableObject_NoSave(prefabLibProfiles, typeof(PluginPrefabManagerUI).Name); AssetDbEx.createScriptableObject_NoSave(prefabLibProfiles, typeof(PrefabLibProfileDbUI).Name); AssetDbEx.createScriptableObject_NoSave(prefabLibProfiles, typeof(PrefabFromSelectedObjectsCreationSettingsUI).Name); AssetDbEx.createScriptableObject_NoSave(prefabLibProfiles, typeof(ObjectGroupsFromPrefabLibsCreationSettingsUI).Name); AssetDbEx.createScriptableObject_NoSave(prefabLibProfiles, typeof(ObjectGroupsFromPrefabLibsCreationSettings).Name); AssetDbEx.createScriptableObject_NoSave(prefabLibProfiles, typeof(PrefabFromSelectedObjectsCreationSettings).Name); } private static void createPluginObjectLayersFolderAndAssets() { if (FileSystem.folderExists(pluginObjectLayers)) return; FileSystem.createFolder(pluginObjectLayers); AssetDbEx.createScriptableObject_NoSave(pluginObjectLayers, typeof(PluginObjectLayerDb).Name); AssetDbEx.createScriptableObject_NoSave(pluginObjectLayers, typeof(PluginObjectLayerDbUI).Name); } private static void createObjectGroupsFolderAndAssets() { if (FileSystem.folderExists(objectGroups)) return; FileSystem.createFolder(objectGroups); AssetDbEx.createScriptableObject_NoSave(objectGroups, typeof(ObjectGroupDb).Name); AssetDbEx.createScriptableObject_NoSave(objectGroups, typeof(ObjectGroupDbUI).Name); AssetDbEx.createScriptableObject_NoSave(objectGroups, typeof(PrefabsFromObjectGroupsCreationSettingsUI).Name); AssetDbEx.createScriptableObject_NoSave(objectGroups, typeof(PrefabsFromObjectGroupsCreationSettings).Name); } private static void createIntPatternProfilesFolderAndAssets() { if (FileSystem.folderExists(intPatternProfiles)) return; FileSystem.createFolder(intPatternProfiles); AssetDbEx.createScriptableObject_NoSave(intPatternProfiles, typeof(IntPatternDb).Name); AssetDbEx.createScriptableObject_NoSave(intPatternProfiles, typeof(IntPatternDbUI).Name); } private static void createSegmentsObjectSpawnSettingsProfilesFolderAndAssets() { if (FileSystem.folderExists(segmentsObjectSpawnSettingsProfiles)) return; FileSystem.createFolder(segmentsObjectSpawnSettingsProfiles); AssetDbEx.createScriptableObject_NoSave(segmentsObjectSpawnSettingsProfiles, typeof(SegmentsObjectSpawnSettingsProfileDb).Name); AssetDbEx.createScriptableObject_NoSave(segmentsObjectSpawnSettingsProfiles, typeof(SegmentsObjectSpawnSettingsProfileDbUI).Name); } private static void createBoxObjectSpawnSettingsProfilesFolderAndAssets() { if (FileSystem.folderExists(boxObjectSpawnSettingsProfiles)) return; FileSystem.createFolder(boxObjectSpawnSettingsProfiles); AssetDbEx.createScriptableObject_NoSave(boxObjectSpawnSettingsProfiles, typeof(BoxObjectSpawnSettingsProfileDb).Name); AssetDbEx.createScriptableObject_NoSave(boxObjectSpawnSettingsProfiles, typeof(BoxObjectSpawnSettingsProfileDbUI).Name); } private static void createCurveObjectSpawnSettingsProfilesFolderAndAssets() { if (FileSystem.folderExists(curveObjectSpawnSettingsProfiles)) return; FileSystem.createFolder(curveObjectSpawnSettingsProfiles); AssetDbEx.createScriptableObject_NoSave(curveObjectSpawnSettingsProfiles, typeof(CurveObjectSpawnSettingsProfileDb).Name); } } } #endif