diff --git a/Editor/BuildPipeline.cs b/Editor/BuildPipeline.cs index a757fbd6..77c45250 100644 --- a/Editor/BuildPipeline.cs +++ b/Editor/BuildPipeline.cs @@ -20,7 +20,7 @@ public static class BuildPipeline public static string CompiledFolder = Path.Combine("Arcadia", "Compiled"); public static string ExportFolder = Path.Combine("Arcadia", "Export"); - public static string ExportAssetsFolder = Path.Combine("Assets", Path.Combine("Arcadia", "Export")); + public static string ExportAssetsFolder = Path.Combine(Initialization.GetArcadiaFolder(), "Export"); static BuildPipeline () { diff --git a/Editor/Initialization.cs b/Editor/Initialization.cs index bfa194b3..3c3edac1 100644 --- a/Editor/Initialization.cs +++ b/Editor/Initialization.cs @@ -15,8 +15,8 @@ public class Initialization // ============================================================ // Data public static string PathToCompiled = Path.GetFullPath(VariadicPathCombine(Application.dataPath, "..", "Arcadia", "Compiled")); - - public static string PathToCompiledForExport = Path.GetFullPath(VariadicPathCombine(Application.dataPath, "Arcadia", "Export")); + + public static string PathToCompiledForExport = Path.GetFullPath(VariadicPathCombine(GetArcadiaFolder(), "Arcadia", "Export")); static Initialization () { @@ -28,6 +28,11 @@ public static String GetClojureDllFolder () return Path.GetDirectoryName(typeof(clojure.lang.RT).Assembly.Location).Substring(Directory.GetCurrentDirectory().Length + 1); } + public static String GetArcadiaFolder() + { + return Directory.GetParent(GetClojureDllFolder()).ToString(); + } + public static void StartWatching () { //AssetPostprocessor.StartWatchingFiles(); diff --git a/Source/arcadia/internal/components.clj b/Source/arcadia/internal/components.clj index 4b7f8305..64218dcc 100644 --- a/Source/arcadia/internal/components.clj +++ b/Source/arcadia/internal/components.clj @@ -3,10 +3,11 @@ arcadia.internal.components (:require [clojure.string :as string] [arcadia.internal.events :as events]) - (:import [clojure.lang RT])) + (:import [clojure.lang RT] + [Arcadia Initialization] + [System.IO Path])) -;; TODO path seperators -(def path "Assets/Arcadia/Components/") +(def path (Path/Combine (Initialization/GetArcadiaFolder) "Components")) (defn component-name [event] (str event "Hook")) diff --git a/Source/arcadia/internal/config.clj b/Source/arcadia/internal/config.clj index b6319c44..abfe1b30 100644 --- a/Source/arcadia/internal/config.clj +++ b/Source/arcadia/internal/config.clj @@ -5,12 +5,13 @@ [arcadia.internal.filewatcher :as fw] [arcadia.internal.file-system :as fs]) (:import + [Arcadia Initialization] [System DateTime] [System.IO FileSystemInfo File Path] [UnityEngine Debug] [System.Text.RegularExpressions Regex])) -(def default-config-file-path (Path/Combine "Assets" "Arcadia" "configuration.edn")) +(def default-config-file-path (Path/Combine (Initialization/GetArcadiaFolder) "configuration.edn")) (def user-config-file-path (Path/Combine "Assets" "configuration.edn")) (defn config [] diff --git a/Source/arcadia/internal/leiningen.clj b/Source/arcadia/internal/leiningen.clj index abe2366f..69359e15 100644 --- a/Source/arcadia/internal/leiningen.clj +++ b/Source/arcadia/internal/leiningen.clj @@ -9,7 +9,8 @@ [arcadia.internal.compiler :as compiler] [arcadia.internal.config :as config]) (:import [System.Text.RegularExpressions Regex] - [System.IO FileSystemInfo StringReader DirectoryInfo Path] + [System.IO FileSystemInfo StringReader Directory DirectoryInfo Path] + [UnityEditor AssetDatabase] [clojure.lang PushbackTextReader])) ;; ------------------------------------------------------------ @@ -72,14 +73,10 @@ ;; ============================================================ ;; filesystem -(def ^:private assets-dir - (.FullName (fs/info "Assets"))) - ;; if anyone can think of another way lemme know -tsg (defn leiningen-project-file? [fi] (when-let [fi (fs/info fi)] ;; not sure this stupid function returns nil if input is already a filesysteminfo for a non existant filesystemthing (and (= "project.clj" (.Name fi)) - (= assets-dir (first (drop 2 (fs/path-supers (.FullName fi))))) (boolean (re-find #"(?m)^\s*\(defproject(?:$|\s.*?$)" ;; shift to something less expensive (slurp fi)))))) @@ -108,7 +105,10 @@ (.GetFiles di)))) (defn leiningen-project-directories [] - (->> (.GetDirectories (DirectoryInfo. "Assets")) + (->> "project" + AssetDatabase/FindAssets + (map #(AssetDatabase/GUIDToAssetPath %)) + (map #(Directory/GetParent %)) (filter leiningen-structured-directory?))) (s/fdef all-project-data diff --git a/Source/arcadia/internal/mozroots.clj b/Source/arcadia/internal/mozroots.clj index a4d1564a..785f303e 100644 --- a/Source/arcadia/internal/mozroots.clj +++ b/Source/arcadia/internal/mozroots.clj @@ -7,8 +7,10 @@ Mozilla uses in Firefox. We load the assembly and simulate a command line session passing --import --sync as arguments."} arcadia.internal.mozroots - (:import Arcadia.Shell)) + (:import [Arcadia Initialization Shell] + [System.IO Path])) +;; TODO fix hardcoded path here (defn import-sync-mozroots [] (Shell/MonoRun Shell/MozrootsExePath - "--file Assets/Arcadia/Infrastructure/certdata.txt --import --sync")) + (str "--file " (Path/Combine (Initialization/GetArcadiaFolder) "Infrastructure" "certdata.txt") " --import --sync"))) diff --git a/Source/arcadia/internal/packages.clj b/Source/arcadia/internal/packages.clj index 94ab7466..0de8f609 100644 --- a/Source/arcadia/internal/packages.clj +++ b/Source/arcadia/internal/packages.clj @@ -3,7 +3,7 @@ [clojure.edn :as edn] [arcadia.internal.leiningen :as lein] [arcadia.internal.config :as config]) - (:import [Arcadia ProgressBar Shell] + (:import [Arcadia Initialization ProgressBar Shell] UnityEditor.EditorUtility UnityEngine.Debug [System.Diagnostics Process] @@ -72,7 +72,7 @@ ;;;; NuGet & JSON wrangling -(def nuget-exe-path (Path/Combine "Assets" "Arcadia" "Infrastructure" "NuGet.exe")) +(def nuget-exe-path (Path/Combine (Initialization/GetArcadiaFolder) "Infrastructure" "NuGet.exe")) (def external-packages-folder (Path/Combine "Arcadia" "Libraries")) (def internal-packages-folder (Path/Combine "Assets" "Arcadia" "Libraries")) (def external-package-files-folder (Path/Combine external-packages-folder "Files")) @@ -121,7 +121,7 @@ (defn install [destination] (let [to-copy (volatile! [])] (Shell/MonoRun - "Assets/Arcadia/Infrastructure/NuGetAssetParser.exe" + (Path/Combine (Initialization/GetArcadiaFolder) "Infrastructure" "NuGetAssetParser.exe") (str package-lock-file " 4.6") {:output (fn [s] (vswap! to-copy conj s)) :done (fn []