diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index f057aae8..c809ea69 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,31 +1,14 @@ -## Asana Ticket - +## Github Issues +Closes ## Description -## Motivation and Context - ## How has this been tested? - -## Screenshots (if appropriate): - -## Types of changes - -- [ ] Bug fix (non-breaking change which fixes an issue) -- [ ] New feature (non-breaking change which adds functionality) -- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) - -## Checklist: - - -- [ ] My code follows the code style of this project. -- [ ] My change requires a change to the documentation. -- [ ] I have updated the documentation accordingly. diff --git a/Assets/Mona/BuildMintableFiles.cs b/Assets/Mona/BuildMintableFiles.cs index 8363750c..3558ba17 100644 --- a/Assets/Mona/BuildMintableFiles.cs +++ b/Assets/Mona/BuildMintableFiles.cs @@ -12,27 +12,32 @@ static void BuildMintableFilesHandler() Helpers.UpsertExportsDirectory(); BuildPlaygroundFiles.BuildPlaygroundFilesHandler(); - List sceneList = new List() + QualityAssurance.SpaceErrors = QualityAssurance.GetSpaceErrors(); + + if (QualityAssurance.SpaceErrors == null || QualityAssurance.SpaceErrors.Count == 0) { - Constants.SpacePath, - Constants.PortalsPath, - Constants.ArtifactsPath - }; + List sceneList = new List() + { + Constants.SpacePath, + Constants.PortalsPath, + Constants.ArtifactsPath + }; - List exportsList = new List(); + List exportsList = new List(); - foreach (string scene in sceneList) - { - exportsList.Add(scene); - string[] sceneDependencies = AssetDatabase.GetDependencies(scene, true); - foreach (string dependency in sceneDependencies) + foreach (string scene in sceneList) { - exportsList.Add(dependency); + exportsList.Add(scene); + string[] sceneDependencies = AssetDatabase.GetDependencies(scene, true); + foreach (string dependency in sceneDependencies) + { + exportsList.Add(dependency); + } } - } - AssetDatabase.ExportPackage(exportsList.ToArray(), Constants.MintingFile, ExportPackageOptions.Recurse); - Helpers.OpenDirectory(Constants.ExportsDirectory); + AssetDatabase.ExportPackage(exportsList.ToArray(), Constants.MintingFile, ExportPackageOptions.Recurse); + Helpers.OpenDirectory(Constants.ExportsDirectory); + } } } } diff --git a/Assets/Mona/BuildPlaygroundFiles.cs b/Assets/Mona/BuildPlaygroundFiles.cs index 4164def9..0edeb296 100644 --- a/Assets/Mona/BuildPlaygroundFiles.cs +++ b/Assets/Mona/BuildPlaygroundFiles.cs @@ -1,5 +1,6 @@ #if UNITY_EDITOR using UnityEditor; +using UnityEngine; namespace Mona { @@ -8,9 +9,19 @@ public class BuildPlaygroundFiles [MenuItem("Mona/Build Playground Files")] public static void BuildPlaygroundFilesHandler() { - Helpers.UpsertExportsDirectory(); - BuildPipeline.BuildAssetBundles(Constants.PlaygroundDirectory, BuildAssetBundleOptions.None, BuildTarget.WebGL); - Helpers.OpenDirectory(Constants.ExportsDirectory); + QualityAssurance.SpaceErrors = QualityAssurance.GetSpaceErrors(); + + if (QualityAssurance.SpaceErrors == null || QualityAssurance.SpaceErrors.Count == 0) + { + Helpers.UpsertExportsDirectory(); + BuildPipeline.BuildAssetBundles(Constants.PlaygroundDirectory, BuildAssetBundleOptions.None, BuildTarget.WebGL); + Helpers.OpenDirectory(Constants.ExportsDirectory); + Application.OpenURL(Constants.PlaygroundURL); + } + else + { + QualityAssuranceEditor.Init(); + } } } } diff --git a/Assets/Mona/MonaLibrary/MonaLibraryWindow.cs b/Assets/Mona/MonaLibrary/MonaLibraryWindow.cs index 9df26c6a..0fd5fe0b 100644 --- a/Assets/Mona/MonaLibrary/MonaLibraryWindow.cs +++ b/Assets/Mona/MonaLibrary/MonaLibraryWindow.cs @@ -1,9 +1,8 @@ #if UNITY_EDITOR -using System.Collections; using System.Collections.Generic; +using System.Threading.Tasks; using UnityEngine; using UnityEditor; -using Unity.EditorCoroutines.Editor; using UnityEngine.Networking; namespace Mona @@ -11,12 +10,17 @@ namespace Mona public class MonaLibraryWindow : EditorWindow { static MonaLibraryWindow window = null; - private readonly string AIRTABLE_PUBLIC_API_KEY = "keywC7DhH4fzXGWcg"; + private readonly string AIRTABLE_BASE_ID = "appglbIlOT8JLLnur"; - private readonly string AIRTABLE_ROOTTABLE_ID = "tblf3EHvQM36tPLJE"; - private bool isInitalized = false, isLoading = false; - private string searchString = ""; - private Vector2 scrollPos = new Vector2(0,0); + private readonly string AIRTABLE_ROOTTABLE_ID = "tblf3EHvQM36tPLJE"; + private readonly int ICON_RESOLUTION = 128; + + private bool _isInitialized = false; + private bool _isLoading = false; + private bool _isError = false; + + private string _searchString = ""; + private Vector2 _scrollPos = new Vector2(0,0); private MonaLibrary monaLibrary; private int sectionTab; @@ -28,8 +32,8 @@ public static void ShowWindow() window = EditorWindow.GetWindow(typeof(MonaLibraryWindow), false, "Mona Library") as MonaLibraryWindow; window.minSize = new Vector2(600,360); window.maxSize = new Vector2(600,1440); - window.isInitalized = false; - window.isLoading = false; + window._isInitialized = false; + window._isLoading = false; } [UnityEditor.Callbacks.DidReloadScripts] @@ -44,12 +48,8 @@ void OnDestroy() { SessionState.SetBool("MonaLibraryOpen", false); } - void OnInspectorUpdate() - { - Repaint(); - } - void OnGUI() + private void OnGUI() { Texture banner = (Texture)AssetDatabase.LoadAssetAtPath("Assets/Resources/Editor/library.png", typeof(Texture)); if (banner) @@ -57,133 +57,149 @@ void OnGUI() GUI.DrawTexture(new Rect(0, 0, 600, 66), banner, ScaleMode.ScaleToFit); } GUILayout.Space(60); + if (GUILayout.Button("Submit to Library")) { Application.OpenURL("https://docs.monaverse.com/resources/mona-library-submission"); } + if (GUILayout.Button("Refresh")) { - isInitalized = false; - isLoading = false; + _isInitialized = false; + _isLoading = false; } - if (!isInitalized) + + if (_isInitialized) { - if (!isLoading) - { - isLoading = true; - EditorCoroutineUtility.StartCoroutine(getLibrary(), this); - } - EditorGUILayout.LabelField("Loading Mona Library...", EditorStyles.boldLabel); - GUIUtility.ExitGUI(); + DrawLibrary(); + return; + } + + if (_isLoading) + { + EditorGUILayout.LabelField(_isError ? "Error: Mona Library Failed to load." : "Loading Mona Library...", EditorStyles.boldLabel); } else { - string[] sections = new string[monaLibrary.sections.records.Count]; - for (int i = 0; i < sections.Length; i++) - { - sections[i] = monaLibrary.sections.records[i].fields.name; - } - sectionTab = GUILayout.Toolbar (sectionTab, sections); - searchString = GUILayout.TextField(searchString, GUI.skin.FindStyle("ToolbarSeachTextField")); - scrollPos = EditorGUILayout.BeginScrollView(scrollPos); - try + EditorGUILayout.LabelField("Starting loading...", EditorStyles.boldLabel); + StartLoadingLibraryAsync(); + } + } + + private async void StartLoadingLibraryAsync() + { + _isLoading = true; + bool isLibraryLoaded = await GetLibraryAsync(); + if (!isLibraryLoaded) + { + _isError = true; + } + } + + private void DrawLibrary() + { + string[] sections = new string[monaLibrary.sections.records.Count]; + for (int i = 0; i < sections.Length; i++) + { + sections[i] = monaLibrary.sections.records[i].fields.name; + } + sectionTab = GUILayout.Toolbar (sectionTab, sections); + _searchString = GUILayout.TextField(_searchString, GUI.skin.FindStyle("ToolbarSeachTextField")); + _scrollPos = EditorGUILayout.BeginScrollView(_scrollPos); + if (monaLibrary.sections.records[sectionTab].fields.type == "asset") + { + for (int i = 0; i < monaLibrary.assets[sectionTab].records.Count;) { - if (monaLibrary.sections.records[sectionTab].fields.type == "asset") + GUILayout.BeginHorizontal(); + for (int j = 0; j < (int)(this.position.width / 145) & i < monaLibrary.assets[sectionTab].records.Count;) { - for (int i = 0; i < monaLibrary.assets[sectionTab].records.Count;) + if (!monaLibrary.assets[sectionTab].records[i].fields.invalid & ( monaLibrary.assets[sectionTab].records[i].fields.name.ToLower().Contains(_searchString.ToLower()) | monaLibrary.assets[sectionTab].records[i].fields.artist.ToLower().Contains(_searchString.ToLower()))) { - GUILayout.BeginHorizontal(); - for (int j = 0; j < (int)(this.position.width / 145) & i < monaLibrary.assets[sectionTab].records.Count;) + GUILayout.BeginVertical(monaLibrary.assets[sectionTab].records[i].fields.name, "window", GUILayout.Height(ICON_RESOLUTION), GUILayout.Width(ICON_RESOLUTION)); + EditorGUILayout.BeginHorizontal(); + { + GUILayout.FlexibleSpace(); + EditorGUILayout.LabelField(monaLibrary.assets[sectionTab].records[i].fields.artist, EditorStyles.wordWrappedMiniLabel); + GUILayout.FlexibleSpace(); + } + EditorGUILayout.EndHorizontal(); + if (monaLibrary.icons.ContainsKey(monaLibrary.assets[sectionTab].records[i].fields.icon[0].url)) + { + GUILayout.Box(monaLibrary.icons[monaLibrary.assets[sectionTab].records[i].fields.icon[0].url], GUILayout.Width(ICON_RESOLUTION), GUILayout.Height(ICON_RESOLUTION)); + } + else + { + monaLibrary.icons.Add(monaLibrary.assets[sectionTab].records[i].fields.icon[0].url, AssetDatabase.LoadAssetAtPath("Assets/Resources/Editor/error_thumb.png")); + _ = DownloadThumbnailAsync(monaLibrary.assets[sectionTab].records[i].fields.icon[0].url); + } + if (GUILayout.Button("Download")) { - if (!monaLibrary.assets[sectionTab].records[i].fields.invalid & ( monaLibrary.assets[sectionTab].records[i].fields.name.ToLower().Contains(searchString.ToLower()) | monaLibrary.assets[sectionTab].records[i].fields.artist.ToLower().Contains(searchString.ToLower()))) - { - GUILayout.BeginVertical(monaLibrary.assets[sectionTab].records[i].fields.name, "window", GUILayout.Height(128), GUILayout.Width(128)); - EditorGUILayout.BeginHorizontal(); - { - GUILayout.FlexibleSpace(); - EditorGUILayout.LabelField(monaLibrary.assets[sectionTab].records[i].fields.artist, EditorStyles.wordWrappedMiniLabel); - GUILayout.FlexibleSpace(); - } - EditorGUILayout.EndHorizontal(); - if (monaLibrary.icons.ContainsKey(monaLibrary.assets[sectionTab].records[i].fields.icon[0].url)) - { - GUILayout.Box(monaLibrary.icons[monaLibrary.assets[sectionTab].records[i].fields.icon[0].url], GUILayout.Width(128), GUILayout.Height(128)); - } - else - { - monaLibrary.icons.Add(monaLibrary.assets[sectionTab].records[i].fields.icon[0].url, AssetDatabase.LoadAssetAtPath("Assets/Resources/Editor/error_thumb.png")); - EditorCoroutineUtility.StartCoroutine(DownloadThumbnail(monaLibrary.assets[sectionTab].records[i].fields.icon[0].url), this); - } - if (GUILayout.Button("Download")) - { - EditorCoroutineUtility.StartCoroutine(DownloadAssetPackage(monaLibrary.assets[sectionTab].records[i].fields.file[0].url, monaLibrary.assets[sectionTab].records[i].fields.file[0].filename), this); - } - GUILayout.EndVertical(); - j++; - } - i++; + _ = DownloadAssetPackageAsync(monaLibrary.assets[sectionTab].records[i].fields.file[0].url, monaLibrary.assets[sectionTab].records[i].fields.file[0].filename); } - GUILayout.EndHorizontal(); + GUILayout.EndVertical(); + j++; } + i++; } - else if (monaLibrary.sections.records[sectionTab].fields.type == "tool") + GUILayout.EndHorizontal(); + } + } + else if (monaLibrary.sections.records[sectionTab].fields.type == "tool") + { + for (int i = 0; i < monaLibrary.tools[sectionTab].records.Count;) + { + GUILayout.BeginHorizontal(); + for (int j = 0; j < (int)(this.position.width / 145) & i < monaLibrary.tools[sectionTab].records.Count;) { - for (int i = 0; i < monaLibrary.tools[sectionTab].records.Count;) + if (monaLibrary.tools[sectionTab].records[i].fields.name.ToLower().Contains(_searchString.ToLower())) { - GUILayout.BeginHorizontal(); - for (int j = 0; j < (int)(this.position.width / 145) & i < monaLibrary.tools[sectionTab].records.Count;) + GUILayout.BeginVertical(monaLibrary.tools[sectionTab].records[i].fields.name, "window", GUILayout.Height(ICON_RESOLUTION), GUILayout.Width(ICON_RESOLUTION)); + if (monaLibrary.icons.ContainsKey(monaLibrary.tools[sectionTab].records[i].fields.icon[0].url)) + { + GUILayout.Box(monaLibrary.icons[monaLibrary.tools[sectionTab].records[i].fields.icon[0].url], GUILayout.Width(ICON_RESOLUTION), GUILayout.Height(ICON_RESOLUTION)); + } + else + { + monaLibrary.icons.Add(monaLibrary.tools[sectionTab].records[i].fields.icon[0].url, AssetDatabase.LoadAssetAtPath("Assets/Resources/Editor/error_thumb.png")); + _ = DownloadThumbnailAsync(monaLibrary.tools[sectionTab].records[i].fields.icon[0].url); + } + if (GUILayout.Button("Download")) { - if (monaLibrary.tools[sectionTab].records[i].fields.name.ToLower().Contains(searchString.ToLower())) - { - GUILayout.BeginVertical(monaLibrary.tools[sectionTab].records[i].fields.name, "window", GUILayout.Height(128), GUILayout.Width(128)); - if (monaLibrary.icons.ContainsKey(monaLibrary.tools[sectionTab].records[i].fields.icon[0].url)) - { - GUILayout.Box(monaLibrary.icons[monaLibrary.tools[sectionTab].records[i].fields.icon[0].url], GUILayout.Width(128), GUILayout.Height(128)); - } - else - { - monaLibrary.icons.Add(monaLibrary.tools[sectionTab].records[i].fields.icon[0].url, AssetDatabase.LoadAssetAtPath("Assets/Resources/Editor/error_thumb.png")); - EditorCoroutineUtility.StartCoroutine(DownloadThumbnail(monaLibrary.tools[sectionTab].records[i].fields.icon[0].url), this); - } - if (GUILayout.Button("Download")) - { - EditorCoroutineUtility.StartCoroutine(DownloadAssetPackage(monaLibrary.tools[sectionTab].records[i].fields.file[0].url, monaLibrary.tools[sectionTab].records[i].fields.file[0].filename), this); - } - GUILayout.EndVertical(); - j++; - } - i++; + _ = DownloadAssetPackageAsync(monaLibrary.tools[sectionTab].records[i].fields.file[0].url, monaLibrary.tools[sectionTab].records[i].fields.file[0].filename); } - GUILayout.EndHorizontal(); + GUILayout.EndVertical(); + j++; } - + i++; } + GUILayout.EndHorizontal(); } - catch - { - Repaint(); - } - EditorGUILayout.EndScrollView(); + } - } + EditorGUILayout.EndScrollView(); + } - private IEnumerator getLibrary() + private async Task GetLibraryAsync() { string json = ""; string[] fields; - - IEnumerator DownloadJson(string type, string url) + + async Task DownloadJsonAsync(string type, string url) { using (UnityWebRequest webReq = new UnityWebRequest(url)) { - webReq.SetRequestHeader("Authorization", $"Bearer {AIRTABLE_PUBLIC_API_KEY}"); + webReq.SetRequestHeader("Authorization", $"Bearer {TemplateCheck.AIRTABLE_PUBLIC_API_KEY}"); webReq.downloadHandler = new DownloadHandlerBuffer(); - yield return webReq.SendWebRequest(); + + var operation = webReq.SendWebRequest(); + + while (!operation.isDone) await Task.Delay(100); + if (webReq.result != UnityWebRequest.Result.Success) { Debug.Log($"Mona Library API Request Failed: {url} Error = {webReq.result}"); json = "error"; - yield return new WaitForSecondsRealtime(5); + await Task.Delay(5000); } else { @@ -191,14 +207,16 @@ IEnumerator DownloadJson(string type, string url) } } } - - fields = new string[] {"name","table","type"}; - yield return EditorCoroutineUtility.StartCoroutine(DownloadJson("sections", getJsonURL(AIRTABLE_ROOTTABLE_ID, 100, fields)), this); + + fields = new string[] { "name", "table", "type" }; + await DownloadJsonAsync("sections", getJsonURL(AIRTABLE_ROOTTABLE_ID, 100, fields)); + if (json == "error") { - isLoading = false; - yield break; + _isLoading = false; + return false; } + monaLibrary = new MonaLibrary(); monaLibrary.sections = new MonaLibrary.Sections(); monaLibrary.sections.records = new List(); @@ -206,47 +224,58 @@ IEnumerator DownloadJson(string type, string url) monaLibrary.icons = new Dictionary(); monaLibrary.tools = new Dictionary(); monaLibrary.assets = new Dictionary(); + for (int i = 0; i < monaLibrary.sections.records.Count; i++) { if (monaLibrary.sections.records[i].fields.type == "tool") { - fields = new string[] {"name", "file", "icon", "description", "docslink"}; - yield return EditorCoroutineUtility.StartCoroutine(DownloadJson("tool", getJsonURL(monaLibrary.sections.records[i].fields.table, 300, fields)), this); + fields = new string[] { "name", "file", "icon", "description", "docslink" }; + await DownloadJsonAsync("tool", getJsonURL(monaLibrary.sections.records[i].fields.table, 300, fields)); + if (json == "error") { - isLoading = false; - yield break; + _isLoading = false; + return false; } + monaLibrary.tempTool = new MonaLibrary.Tools(); monaLibrary.tempTool.records = new List(); - JsonUtility.FromJsonOverwrite(json, monaLibrary.tempTool); + JsonUtility.FromJsonOverwrite(json, monaLibrary.tempTool); monaLibrary.tools.Add(i, monaLibrary.tempTool); } if (monaLibrary.sections.records[i].fields.type == "asset") { - fields = new string[] {"Asset+Name", "Category", "Asset+Files", "Polycount+(Tris)", "Artist+Name", "Photo(s)", "Alias", "Invalid"}; - yield return EditorCoroutineUtility.StartCoroutine(DownloadJson("asset", getJsonURL(monaLibrary.sections.records[i].fields.table, 300, fields)), this); + fields = new string[] { "Asset+Name", "Category", "Asset+Files", "Polycount+(Tris)", "Artist+Name", "Photo(s)", "Alias", "Invalid" }; + await DownloadJsonAsync("asset", getJsonURL(monaLibrary.sections.records[i].fields.table, 300, fields)); + if (json == "error") { - isLoading = false; - yield break; + _isLoading = false; + return false; } + monaLibrary.tempAsset = new MonaLibrary.Assets(); monaLibrary.tempAsset.records = new List(); - JsonUtility.FromJsonOverwrite(json, monaLibrary.tempAsset); + JsonUtility.FromJsonOverwrite(json, monaLibrary.tempAsset); monaLibrary.assets.Add(i, monaLibrary.tempAsset); } } - isInitalized = true; + _isInitialized = true; + return true; } - private IEnumerator DownloadThumbnail(string url) + private async Task DownloadThumbnailAsync(string url) { - using (UnityWebRequest imgReq = UnityWebRequestAssetBundle.GetAssetBundle(url)) + await Task.Yield(); + + using (UnityWebRequest imgReq = UnityWebRequestTexture.GetTexture(url)) { - imgReq.SetRequestHeader("Authorization", $"Bearer {AIRTABLE_PUBLIC_API_KEY}"); - imgReq.downloadHandler = new DownloadHandlerTexture(); - yield return imgReq.SendWebRequest(); + imgReq.SetRequestHeader("Authorization", $"Bearer {TemplateCheck.AIRTABLE_PUBLIC_API_KEY}"); + + var operation = imgReq.SendWebRequest(); + + while (!operation.isDone) await Task.Delay(100); + if (imgReq.result != UnityWebRequest.Result.Success) { Debug.Log($"Mona Library Asset Request Failed: {url}{imgReq.result}"); @@ -258,20 +287,27 @@ private IEnumerator DownloadThumbnail(string url) } } - private IEnumerator DownloadAssetPackage(string url, string name) + private async Task DownloadAssetPackageAsync(string url, string name) { + await Task.Yield(); + using (UnityWebRequest assetReq = new UnityWebRequest(url)) { - assetReq.SetRequestHeader("Authorization", $"Bearer {AIRTABLE_PUBLIC_API_KEY}"); - assetReq.downloadHandler = new DownloadHandlerFile($"Assets/_MonaLibrary/{name}/.unitypackage"); - yield return assetReq.SendWebRequest(); + string filePath = $"Assets/_MonaLibrary/{name}/.unitypackage"; + assetReq.SetRequestHeader("Authorization", $"Bearer {TemplateCheck.AIRTABLE_PUBLIC_API_KEY}"); + assetReq.downloadHandler = new DownloadHandlerFile(filePath); + + var operation = assetReq.SendWebRequest(); + + while (!operation.isDone) await Task.Delay(100); + if (assetReq.result != UnityWebRequest.Result.Success) { Debug.Log($"Mona Library Request Failed: {url}{assetReq.result}"); } else { - AssetDatabase.ImportPackage($"Assets/_MonaLibrary/{name}/.unitypackage", true); + AssetDatabase.ImportPackage(filePath, true); } } } diff --git a/Assets/Mona/QualityAssurance/QualityAssurance.Codes.cs b/Assets/Mona/QualityAssurance/QualityAssurance.Codes.cs index 05028d6b..ea4bf36a 100644 --- a/Assets/Mona/QualityAssurance/QualityAssurance.Codes.cs +++ b/Assets/Mona/QualityAssurance/QualityAssurance.Codes.cs @@ -1,100 +1,110 @@ #if UNITY_EDITOR using System.Collections.Generic; -public static class ErrorDescriptions +namespace Mona { - // Missing Layer Errors - public static string MISSING_SPACE_LAYER = "You're missing a Space layer"; - public static string MISSING_ARTIFACT_LAYER = "You're missing the Artifact Layer"; - public static string MISSING_PORTAL_LAYER = "You're missing the Portal Layer"; - - // Missing Scene Errors - public static string MISSING_SPACE_SCENE = "You're missing the Space scene"; - public static string MISSING_PORTAL_SCENE = "You're missing the Portal scene"; - public static string MISSING_ARTIFACT_SCENE = "You're missing the Artifact Scene"; - - // Multiple Root Object Errors - public static string MULTIPLE_SPACE_ROOTS = "You have more than one root object in the Space scene"; - public static string MULTIPLE_ARTIFACT_ROOTS = "Your Artifact Layer has more than one root object"; - public static string MULTIPLE_PORTAL_ROOTS = "You have multiple root objects in your Portal scene"; - - // Object Placement errors - public static string BAD_ARTIFACT_PLACEMENT = "One of your Artifacts is outside of the Artifact Layer"; - public static string BAD_CANVAS_PLACEMENT = "One of your Canvases is outside of the Artifact Layer"; - public static string BAD_PORTAL_PLACEMENT = "One of your Portals is outside of the PortalLayer"; - - // Duplicate Name Errors - public static string DUPLICATE_ARTIFACT_NAME = "Two or more of your Artifacts have the same GameObject name"; - public static string DUPLICATE_CANVAS_NAME = "Two or more of your Canvases have the same GameObject name"; - public static string DUPLICATE_PORTAL_NAME = "Two or more of your Portals have the same GameObject name"; - - // Layer Content Errors - public static string BAD_PORTAL_LAYER_CONTENTS = "You have non-Portal objects in your Portal Layer"; - - // Collider Errors - public static string BAD_PORTAL_COLLIDER = "There is a problem with the collider on one of your Portals"; - public static string BAD_ARTIFACT_COLLIDER = "There is a problem with the collider on one of your Artifacts"; - public static string BAD_CANVAS_COLLIDER = "There is a problem with the collider on one of your Canvases"; -} + public static class ErrorDescriptions + { + // Missing Layer Errors + public static string MISSING_SPACE_LAYER = "You're missing a Space layer"; + public static string MISSING_ARTIFACT_LAYER = "You're missing the Artifact Layer"; + public static string MISSING_PORTAL_LAYER = "You're missing the Portal Layer"; -public static class MonaErrorCodes -{ - // Missing Layer Errors - public static string MISSING_SPACE_LAYER = "space.missing-layer"; - public static string MISSING_ARTIFACT_LAYER = "artifact.missing-layer"; - public static string MISSING_PORTAL_LAYER = "portal.missing-layer"; - - // Missing Scene Errors - public static string MISSING_SPACE_SCENE = "space.missing-scene"; - public static string MISSING_PORTAL_SCENE = "portal.missing-scene"; - public static string MISSING_ARTIFACT_SCENE = "artifact.missing-scene"; - - // Multiple Root Object Errors - public static string MULTIPLE_SPACE_ROOTS = "space.multiple-roots"; - public static string MULTIPLE_ARTIFACT_ROOTS = "artifact.multiple-roots"; - public static string MULTIPLE_PORTAL_ROOTS = "portal.multiple-roots"; - - // Object Placement errors - public static string BAD_ARTIFACT_PLACEMENT = "artifact.bad-placement"; - public static string BAD_CANVAS_PLACEMENT = "canvas.bad-placement"; - public static string BAD_PORTAL_PLACEMENT = "portal.bad-placement"; - - // Duplicate Name Errors - public static string DUPLICATE_ARTIFACT_NAME = "artifact.duplicate-name"; - public static string DUPLICATE_CANVAS_NAME = "canvas.duplicate-name"; - public static string DUPLICATE_PORTAL_NAME = "portal.duplicate-name"; - - // Layer Content Errors - public static string BAD_PORTAL_LAYER_CONTENTS = "portal.layer-contents"; - - // Collider Errors - public static string BAD_PORTAL_COLLIDER = "portal.bad-collider"; - public static string BAD_ARTIFACT_COLLIDER = "artifact.bad-collider"; - public static string BAD_CANVAS_COLLIDER = "canvas.bad-collider"; - - public static Dictionary GetErrorDescriptionMap() + // Missing Scene Errors + public static string MISSING_SPACE_SCENE = "You're missing the Space scene"; + public static string MISSING_PORTAL_SCENE = "You're missing the Portal scene"; + public static string MISSING_ARTIFACT_SCENE = "You're missing the Artifact Scene"; + + // Multiple Root Object Errors + public static string MULTIPLE_SPACE_ROOTS = "You have more than one root object in the Space scene"; + public static string MULTIPLE_ARTIFACT_ROOTS = "Your Artifact Layer has more than one root object"; + public static string MULTIPLE_PORTAL_ROOTS = "You have multiple root objects in your Portal scene"; + + // Object Placement errors + public static string BAD_ARTIFACT_PLACEMENT = "One of your Artifacts is outside of the Artifact Layer"; + public static string BAD_CANVAS_PLACEMENT = "One of your Canvases is outside of the Artifact Layer"; + public static string BAD_PORTAL_PLACEMENT = "One of your Portals is outside of the PortalLayer"; + + // Duplicate Name Errors + public static string DUPLICATE_ARTIFACT_NAME = "Two or more of your Artifacts have the same GameObject name"; + public static string DUPLICATE_CANVAS_NAME = "Two or more of your Canvases have the same GameObject name"; + public static string DUPLICATE_PORTAL_NAME = "Two or more of your Portals have the same GameObject name"; + + // Layer Content Errors + public static string BAD_PORTAL_LAYER_CONTENTS = "You have non-Portal objects in your Portal Layer"; + + // Collider Errors + public static string BAD_PORTAL_COLLIDER = "There is a problem with the collider on one of your Portals"; + public static string BAD_ARTIFACT_COLLIDER = "There is a problem with the collider on one of your Artifacts"; + public static string BAD_CANVAS_COLLIDER = "There is a problem with the collider on one of your Canvases"; + + // Texture Errors + public static string TEXTURE_CRUNCH_COMPRESSION = "One or more of your textures is using crunch compression. See console for more info."; + } + + public static class MonaErrorCodes { - return new Dictionary { - { MonaErrorCodes.MISSING_SPACE_LAYER, ErrorDescriptions.MISSING_SPACE_LAYER }, - { MonaErrorCodes.MISSING_ARTIFACT_LAYER, ErrorDescriptions.MISSING_ARTIFACT_LAYER }, - { MonaErrorCodes.MISSING_PORTAL_LAYER, ErrorDescriptions.MISSING_PORTAL_LAYER }, - { MonaErrorCodes.MISSING_SPACE_SCENE, ErrorDescriptions.MISSING_SPACE_SCENE }, - { MonaErrorCodes.MISSING_ARTIFACT_SCENE, ErrorDescriptions.MISSING_ARTIFACT_SCENE }, - { MonaErrorCodes.MISSING_PORTAL_SCENE, ErrorDescriptions.MISSING_PORTAL_SCENE }, - { MonaErrorCodes.MULTIPLE_SPACE_ROOTS, ErrorDescriptions.MULTIPLE_SPACE_ROOTS }, - { MonaErrorCodes.MULTIPLE_ARTIFACT_ROOTS, ErrorDescriptions.MULTIPLE_ARTIFACT_ROOTS }, - { MonaErrorCodes.MULTIPLE_PORTAL_ROOTS, ErrorDescriptions.MULTIPLE_PORTAL_ROOTS }, - { MonaErrorCodes.BAD_ARTIFACT_PLACEMENT, ErrorDescriptions.BAD_ARTIFACT_PLACEMENT }, - { MonaErrorCodes.BAD_PORTAL_PLACEMENT, ErrorDescriptions.BAD_PORTAL_PLACEMENT }, - { MonaErrorCodes.BAD_CANVAS_PLACEMENT, ErrorDescriptions.BAD_CANVAS_PLACEMENT }, - { MonaErrorCodes.DUPLICATE_ARTIFACT_NAME, ErrorDescriptions.DUPLICATE_ARTIFACT_NAME }, - { MonaErrorCodes.DUPLICATE_PORTAL_NAME, ErrorDescriptions.DUPLICATE_PORTAL_NAME }, - { MonaErrorCodes.DUPLICATE_CANVAS_NAME, ErrorDescriptions.DUPLICATE_CANVAS_NAME }, - { MonaErrorCodes.BAD_PORTAL_LAYER_CONTENTS, ErrorDescriptions.BAD_PORTAL_LAYER_CONTENTS }, - { MonaErrorCodes.BAD_PORTAL_COLLIDER, ErrorDescriptions.BAD_PORTAL_COLLIDER }, - { MonaErrorCodes.BAD_ARTIFACT_COLLIDER, ErrorDescriptions.BAD_ARTIFACT_COLLIDER }, - { MonaErrorCodes.BAD_CANVAS_COLLIDER, ErrorDescriptions.BAD_CANVAS_COLLIDER } - }; + // Missing Layer Errors + public static string MISSING_SPACE_LAYER = "space.missing-layer"; + public static string MISSING_ARTIFACT_LAYER = "artifact.missing-layer"; + public static string MISSING_PORTAL_LAYER = "portal.missing-layer"; + + // Missing Scene Errors + public static string MISSING_SPACE_SCENE = "space.missing-scene"; + public static string MISSING_PORTAL_SCENE = "portal.missing-scene"; + public static string MISSING_ARTIFACT_SCENE = "artifact.missing-scene"; + + // Multiple Root Object Errors + public static string MULTIPLE_SPACE_ROOTS = "space.multiple-roots"; + public static string MULTIPLE_ARTIFACT_ROOTS = "artifact.multiple-roots"; + public static string MULTIPLE_PORTAL_ROOTS = "portal.multiple-roots"; + + // Object Placement errors + public static string BAD_ARTIFACT_PLACEMENT = "artifact.bad-placement"; + public static string BAD_CANVAS_PLACEMENT = "canvas.bad-placement"; + public static string BAD_PORTAL_PLACEMENT = "portal.bad-placement"; + + // Duplicate Name Errors + public static string DUPLICATE_ARTIFACT_NAME = "artifact.duplicate-name"; + public static string DUPLICATE_CANVAS_NAME = "canvas.duplicate-name"; + public static string DUPLICATE_PORTAL_NAME = "portal.duplicate-name"; + + // Layer Content Errors + public static string BAD_PORTAL_LAYER_CONTENTS = "portal.layer-contents"; + + // Collider Errors + public static string BAD_PORTAL_COLLIDER = "portal.bad-collider"; + public static string BAD_ARTIFACT_COLLIDER = "artifact.bad-collider"; + public static string BAD_CANVAS_COLLIDER = "canvas.bad-collider"; + + // Texture Errors + public static string TEXTURE_CRUNCH_COMPRESSION = "texture.crunch-compression"; + + public static Dictionary GetErrorDescriptionMap() + { + return new Dictionary { + { MonaErrorCodes.MISSING_SPACE_LAYER, ErrorDescriptions.MISSING_SPACE_LAYER }, + { MonaErrorCodes.MISSING_ARTIFACT_LAYER, ErrorDescriptions.MISSING_ARTIFACT_LAYER }, + { MonaErrorCodes.MISSING_PORTAL_LAYER, ErrorDescriptions.MISSING_PORTAL_LAYER }, + { MonaErrorCodes.MISSING_SPACE_SCENE, ErrorDescriptions.MISSING_SPACE_SCENE }, + { MonaErrorCodes.MISSING_ARTIFACT_SCENE, ErrorDescriptions.MISSING_ARTIFACT_SCENE }, + { MonaErrorCodes.MISSING_PORTAL_SCENE, ErrorDescriptions.MISSING_PORTAL_SCENE }, + { MonaErrorCodes.MULTIPLE_SPACE_ROOTS, ErrorDescriptions.MULTIPLE_SPACE_ROOTS }, + { MonaErrorCodes.MULTIPLE_ARTIFACT_ROOTS, ErrorDescriptions.MULTIPLE_ARTIFACT_ROOTS }, + { MonaErrorCodes.MULTIPLE_PORTAL_ROOTS, ErrorDescriptions.MULTIPLE_PORTAL_ROOTS }, + { MonaErrorCodes.BAD_ARTIFACT_PLACEMENT, ErrorDescriptions.BAD_ARTIFACT_PLACEMENT }, + { MonaErrorCodes.BAD_PORTAL_PLACEMENT, ErrorDescriptions.BAD_PORTAL_PLACEMENT }, + { MonaErrorCodes.BAD_CANVAS_PLACEMENT, ErrorDescriptions.BAD_CANVAS_PLACEMENT }, + { MonaErrorCodes.DUPLICATE_ARTIFACT_NAME, ErrorDescriptions.DUPLICATE_ARTIFACT_NAME }, + { MonaErrorCodes.DUPLICATE_PORTAL_NAME, ErrorDescriptions.DUPLICATE_PORTAL_NAME }, + { MonaErrorCodes.DUPLICATE_CANVAS_NAME, ErrorDescriptions.DUPLICATE_CANVAS_NAME }, + { MonaErrorCodes.BAD_PORTAL_LAYER_CONTENTS, ErrorDescriptions.BAD_PORTAL_LAYER_CONTENTS }, + { MonaErrorCodes.BAD_PORTAL_COLLIDER, ErrorDescriptions.BAD_PORTAL_COLLIDER }, + { MonaErrorCodes.BAD_ARTIFACT_COLLIDER, ErrorDescriptions.BAD_ARTIFACT_COLLIDER }, + { MonaErrorCodes.BAD_CANVAS_COLLIDER, ErrorDescriptions.BAD_CANVAS_COLLIDER }, + { MonaErrorCodes.TEXTURE_CRUNCH_COMPRESSION, ErrorDescriptions.TEXTURE_CRUNCH_COMPRESSION } + }; + } } } #endif \ No newline at end of file diff --git a/Assets/Mona/QualityAssurance/QualityAssurance.Tests.cs b/Assets/Mona/QualityAssurance/QualityAssurance.Tests.cs index 8363c279..81d62f1b 100644 --- a/Assets/Mona/QualityAssurance/QualityAssurance.Tests.cs +++ b/Assets/Mona/QualityAssurance/QualityAssurance.Tests.cs @@ -1,6 +1,7 @@ #if UNITY_EDITOR using System; using UnityEngine; +using UnityEditor; using System.Collections.Generic; using UnityEngine.SceneManagement; @@ -130,6 +131,26 @@ public static void TestObjectColliders(string objectTag, string error) AddError(error, sceneObject.GetInstanceID()); } } + + public static void TestCrunchCompression(string error) + { + string[] guids = AssetDatabase.FindAssets("t:Texture2D", null); + foreach (string guid in guids) + { + string path = AssetDatabase.GUIDToAssetPath(guid); + TextureImporter importer = AssetImporter.GetAtPath(path) as TextureImporter; + + if (importer != null) + { + // Check if Crunch compression is enabled + if (importer.crunchedCompression == true) + { + Debug.LogWarning($"Mona does not support Crunch Compression. Please disable Crunch Compression in the importer for ({path})"); + AddError(error, -1); + } + } + } + } } } #endif \ No newline at end of file diff --git a/Assets/Mona/QualityAssurance/QualityAssurance.cs b/Assets/Mona/QualityAssurance/QualityAssurance.cs index 70b16780..d6702975 100644 --- a/Assets/Mona/QualityAssurance/QualityAssurance.cs +++ b/Assets/Mona/QualityAssurance/QualityAssurance.cs @@ -40,6 +40,8 @@ public static Dictionary> GetSpaceErrors() TestObjectColliders("Artifact", MonaErrorCodes.BAD_ARTIFACT_COLLIDER); TestObjectColliders("Portal", MonaErrorCodes.BAD_PORTAL_COLLIDER); + TestCrunchCompression(MonaErrorCodes.TEXTURE_CRUNCH_COMPRESSION); + if (HierarchyDrawer != null) { HierarchyDrawer.Unregister(); diff --git a/Assets/Mona/QualityAssurance/QualityAssuranceEditor.cs b/Assets/Mona/QualityAssurance/QualityAssuranceEditor.cs index 7751bf50..4aa2c342 100644 --- a/Assets/Mona/QualityAssurance/QualityAssuranceEditor.cs +++ b/Assets/Mona/QualityAssurance/QualityAssuranceEditor.cs @@ -25,7 +25,7 @@ void OnGUI() Scroll = GUILayout.BeginScrollView(Scroll, false, false); GUIStyle buttonStyle = GUI.skin.button; - buttonStyle.margin = new RectOffset(30, 30, 10, 10); + buttonStyle.margin = new RectOffset(40, 40, 10, 10); Texture banner = (Texture)AssetDatabase.LoadAssetAtPath("Assets/Resources/Editor/qa.png", typeof(Texture)); if (banner) @@ -53,10 +53,10 @@ void OnGUI() title = title.Substring(0, 1).ToUpper() + title.Substring(1); GUILayout.BeginHorizontal("box"); - GUILayout.Box(title + " ( " + QualityAssurance.SpaceErrors[error].Count + " )", GUILayout.MinWidth(100)); + GUILayout.Box(title + " ( " + QualityAssurance.SpaceErrors[error].Count + " )", GUILayout.MinWidth(110)); GUILayout.BeginVertical(); - GUILayout.Label(QualityAssurance.GetErrorDescription(error)); + GUILayout.Label(QualityAssurance.GetErrorDescription(error), new GUIStyle(GUI.skin.GetStyle("label")) { wordWrap = true }); if (QualityAssurance.SpaceErrors[error] != null && QualityAssurance.SpaceErrors[error][0] != -1) { diff --git a/Assets/Mona/QualityAssurance/Resolvers.meta b/Assets/Mona/QualityAssurance/Resolvers.meta new file mode 100644 index 00000000..d3547376 --- /dev/null +++ b/Assets/Mona/QualityAssurance/Resolvers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 779ad8f89c5e45d498ebad6595156065 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mona/QualityAssurance/Resolvers/ResolveCrunchCompression.cs b/Assets/Mona/QualityAssurance/Resolvers/ResolveCrunchCompression.cs new file mode 100644 index 00000000..5e5426ee --- /dev/null +++ b/Assets/Mona/QualityAssurance/Resolvers/ResolveCrunchCompression.cs @@ -0,0 +1,29 @@ +#if UNITY_EDITOR +using UnityEditor; + +namespace Mona +{ + public class ResolveCrunchCompression + { + [MenuItem("Mona/Disable Crunch Compression")] + public static void ResolveCrunchCompressionHandler() + { + string[] guids = AssetDatabase.FindAssets("t:Texture2D", null); + foreach (string guid in guids) + { + string path = AssetDatabase.GUIDToAssetPath(guid); + TextureImporter importer = AssetImporter.GetAtPath(path) as TextureImporter; + + if (importer != null) + { + if (importer.crunchedCompression == true) + { + importer.crunchedCompression = false; + } + } + } + QualityAssurance.SpaceErrors = QualityAssurance.GetSpaceErrors(); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Mona/QualityAssurance/Resolvers/ResolveCrunchCompression.cs.meta b/Assets/Mona/QualityAssurance/Resolvers/ResolveCrunchCompression.cs.meta new file mode 100644 index 00000000..c4773bc4 --- /dev/null +++ b/Assets/Mona/QualityAssurance/Resolvers/ResolveCrunchCompression.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 72570d6bada9bd8418be67427f44ce06 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mona/TemplateHelper/TemplateHelper.cs b/Assets/Mona/TemplateHelper/TemplateHelper.cs index bb01cccc..bc595167 100644 --- a/Assets/Mona/TemplateHelper/TemplateHelper.cs +++ b/Assets/Mona/TemplateHelper/TemplateHelper.cs @@ -1,9 +1,9 @@ #if UNITY_EDITOR -using System.Collections; +using System.IO; using System.Collections.Generic; +using System.Threading.Tasks; using UnityEngine; using UnityEditor; -using Unity.EditorCoroutines.Editor; using UnityEngine.Networking; namespace Mona @@ -11,7 +11,7 @@ namespace Mona [InitializeOnLoad] public class TemplateCheck { - public static readonly string AIRTABLE_PUBLIC_API_KEY = "keywC7DhH4fzXGWcg"; + public static readonly string AIRTABLE_PUBLIC_API_KEY = "pat9rVBOrcxurF56k.6cf822174f832767665e8a2dfeb0790a0a46c694453882cb09409a56928e3dca"; public static bool UpdateAvaliable = false; public static bool ConfigurationIssue = false; static TemplateCheck() @@ -22,7 +22,7 @@ static TemplateCheck() TemplateChecker templateChecker = new TemplateChecker(); - EditorCoroutineUtility.StartCoroutine(templateChecker.GetUpdate(), templateChecker); + _ = templateChecker.GetUpdateAsync(); ConfigurationIssue = !templateChecker.HasCorrectUVersion(); if (!ConfigurationIssue) @@ -69,13 +69,16 @@ public class File } private TemplateVersion templateVersion; - public IEnumerator GetUpdate() + public async Task GetUpdateAsync() { using (UnityWebRequest webReq = new UnityWebRequest(url)) { webReq.SetRequestHeader("Authorization", $"Bearer {TemplateCheck.AIRTABLE_PUBLIC_API_KEY}"); webReq.downloadHandler = new DownloadHandlerBuffer(); - yield return webReq.SendWebRequest(); + + var operation = webReq.SendWebRequest(); + while (!operation.isDone) await Task.Delay(100); + if (webReq.result != UnityWebRequest.Result.Success) { Debug.Log($"Failed to check for update: {webReq.result}"); @@ -101,6 +104,8 @@ public IEnumerator GetUpdate() } } } + + public bool HasCorrectUVersion() { if (Application.unityVersion.Contains(TemplateInfo.UnityVer)) @@ -109,6 +114,7 @@ public bool HasCorrectUVersion() } return false; } + public bool HasWebGLModule() { var moduleManager = System.Type.GetType("UnityEditor.Modules.ModuleManager,UnityEditor.dll"); @@ -120,6 +126,7 @@ public bool HasWebGLModule() } return false; } + // Takes 2 input version numbers and outputs -1, 0, 1 depending on which verion number is larger // Goes through each numerical part of the version number until it finds one version number which is great than the other. private int versionCompare(string v1, string v2) @@ -157,6 +164,7 @@ private int versionCompare(string v1, string v2) return 0; } } + public class TemplateHelper : EditorWindow { private TemplateChecker templateChecker; @@ -167,12 +175,12 @@ public static void ShowWindow() window.minSize = new Vector2(498,250); window.maxSize = new Vector2(498,250); } - void OnGUI() + async void OnGUI() { if (templateChecker == null) { templateChecker = new TemplateChecker(); - EditorCoroutineUtility.StartCoroutine(templateChecker.GetUpdate(), this); + _ = templateChecker.GetUpdateAsync(); } Texture banner = (Texture)AssetDatabase.LoadAssetAtPath("Assets/Resources/Editor/templatehelper.png", typeof(Texture)); @@ -211,7 +219,7 @@ void OnGUI() EditorGUILayout.LabelField("Template Update Avaliable", EditorStyles.boldLabel); if (GUILayout.Button("Update")) { - EditorCoroutineUtility.StartCoroutine(DownloadAssetPackage(templateChecker.Update, templateChecker.FileName), this); + await DownloadAssetPackageAsync(templateChecker.Update, templateChecker.FileName); } } } @@ -230,14 +238,18 @@ void OnGUI() } } - private IEnumerator DownloadAssetPackage(string url, string name) + private async Task DownloadAssetPackageAsync(string url, string name) { - Debug.Log($"Downloading {url}"); + //Debug.Log($"Downloading {url}"); + using (UnityWebRequest assetReq = new UnityWebRequest(url)) { assetReq.SetRequestHeader("Authorization", $"Bearer {TemplateCheck.AIRTABLE_PUBLIC_API_KEY}"); assetReq.downloadHandler = new DownloadHandlerFile($"Assets/{name}.unitypackage"); - yield return assetReq.SendWebRequest(); + + var operation = assetReq.SendWebRequest(); + while (!operation.isDone) await Task.Delay(100); + if (assetReq.result != UnityWebRequest.Result.Success) { Debug.Log($"Mona Library Request Failed: {url}{assetReq.result}"); @@ -245,6 +257,7 @@ private IEnumerator DownloadAssetPackage(string url, string name) else { AssetDatabase.ImportPackage($"Assets/{name}.unitypackage", true); + AssetDatabase.Refresh(); } } } diff --git a/Assets/Mona/TemplateHelper/TemplateVersion.cs b/Assets/Mona/TemplateHelper/TemplateVersion.cs index 5a16c27a..fc016c91 100644 --- a/Assets/Mona/TemplateHelper/TemplateVersion.cs +++ b/Assets/Mona/TemplateHelper/TemplateVersion.cs @@ -6,7 +6,7 @@ namespace Mona { public static class TemplateInfo { - public static readonly string Version = "2.0.3"; + public static readonly string Version = "2.0.4"; public static readonly string UnityVer = "2022.2.3"; } } diff --git a/Assets/Resources/Editor/error_thumb.png.meta b/Assets/Resources/Editor/error_thumb.png.meta index 6815f8bb..edf06314 100644 --- a/Assets/Resources/Editor/error_thumb.png.meta +++ b/Assets/Resources/Editor/error_thumb.png.meta @@ -3,7 +3,7 @@ guid: dc83ec0791578d9408a0cdd036edee3f TextureImporter: internalIDToNameTable: [] externalObjects: {} - serializedVersion: 11 + serializedVersion: 12 mipmaps: mipMapMode: 0 enableMipMap: 1 @@ -20,10 +20,12 @@ TextureImporter: externalNormalMap: 0 heightScale: 0.25 normalMapFilter: 0 + flipGreenChannel: 0 isReadable: 0 streamingMipmaps: 0 streamingMipmapsPriority: 0 vTOnly: 0 + ignoreMipmapLimit: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -62,6 +64,8 @@ TextureImporter: textureFormatSet: 0 ignorePngGamma: 0 applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 platformSettings: - serializedVersion: 3 buildTarget: DefaultTexturePlatform @@ -123,6 +127,30 @@ TextureImporter: overridden: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 8192 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 8192 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 sprites: [] @@ -136,9 +164,9 @@ TextureImporter: edges: [] weights: [] secondaryTextures: [] - spritePackingTag: + nameFileIdTable: {} + mipmapLimitGroupName: pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Resources/Editor/library.png.meta b/Assets/Resources/Editor/library.png.meta index 6243da68..2cd7417a 100644 --- a/Assets/Resources/Editor/library.png.meta +++ b/Assets/Resources/Editor/library.png.meta @@ -3,7 +3,7 @@ guid: b698ae33e2e1ffa45a5717f7ffc68ea6 TextureImporter: internalIDToNameTable: [] externalObjects: {} - serializedVersion: 11 + serializedVersion: 12 mipmaps: mipMapMode: 0 enableMipMap: 0 @@ -20,10 +20,12 @@ TextureImporter: externalNormalMap: 0 heightScale: 0.25 normalMapFilter: 0 + flipGreenChannel: 0 isReadable: 0 streamingMipmaps: 0 streamingMipmapsPriority: 0 vTOnly: 0 + ignoreMipmapLimit: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -62,6 +64,8 @@ TextureImporter: textureFormatSet: 0 ignorePngGamma: 0 applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 platformSettings: - serializedVersion: 3 buildTarget: DefaultTexturePlatform @@ -135,6 +139,18 @@ TextureImporter: overridden: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 8192 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 sprites: [] @@ -148,9 +164,9 @@ TextureImporter: edges: [] weights: [] secondaryTextures: [] - spritePackingTag: + nameFileIdTable: {} + mipmapLimitGroupName: pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Resources/Editor/ppv.png.meta b/Assets/Resources/Editor/ppv.png.meta index ec4c87ca..c74f62f5 100644 --- a/Assets/Resources/Editor/ppv.png.meta +++ b/Assets/Resources/Editor/ppv.png.meta @@ -3,7 +3,7 @@ guid: 60cebc83c3e263544bccdde6a15df0d6 TextureImporter: internalIDToNameTable: [] externalObjects: {} - serializedVersion: 11 + serializedVersion: 12 mipmaps: mipMapMode: 0 enableMipMap: 1 @@ -20,10 +20,12 @@ TextureImporter: externalNormalMap: 0 heightScale: 0.25 normalMapFilter: 0 + flipGreenChannel: 0 isReadable: 0 streamingMipmaps: 0 streamingMipmapsPriority: 0 vTOnly: 0 + ignoreMipmapLimit: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -62,6 +64,8 @@ TextureImporter: textureFormatSet: 0 ignorePngGamma: 0 applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 platformSettings: - serializedVersion: 3 buildTarget: DefaultTexturePlatform @@ -70,7 +74,7 @@ TextureImporter: textureFormat: -1 textureCompression: 1 compressionQuality: 50 - crunchedCompression: 1 + crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 @@ -135,6 +139,18 @@ TextureImporter: overridden: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 8192 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 sprites: [] @@ -148,9 +164,9 @@ TextureImporter: edges: [] weights: [] secondaryTextures: [] - spritePackingTag: + nameFileIdTable: {} + mipmapLimitGroupName: pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Resources/Editor/qa.png.meta b/Assets/Resources/Editor/qa.png.meta index 99b5613d..46862b8b 100644 --- a/Assets/Resources/Editor/qa.png.meta +++ b/Assets/Resources/Editor/qa.png.meta @@ -3,7 +3,7 @@ guid: 425eed0ad05d8094bb6d75f3fa041e57 TextureImporter: internalIDToNameTable: [] externalObjects: {} - serializedVersion: 11 + serializedVersion: 12 mipmaps: mipMapMode: 0 enableMipMap: 1 @@ -20,10 +20,12 @@ TextureImporter: externalNormalMap: 0 heightScale: 0.25 normalMapFilter: 0 + flipGreenChannel: 0 isReadable: 0 streamingMipmaps: 0 streamingMipmapsPriority: 0 vTOnly: 0 + ignoreMipmapLimit: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -62,6 +64,8 @@ TextureImporter: textureFormatSet: 0 ignorePngGamma: 0 applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 platformSettings: - serializedVersion: 3 buildTarget: DefaultTexturePlatform @@ -70,7 +74,7 @@ TextureImporter: textureFormat: -1 textureCompression: 1 compressionQuality: 50 - crunchedCompression: 1 + crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 @@ -135,6 +139,18 @@ TextureImporter: overridden: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 8192 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 sprites: [] @@ -148,9 +164,9 @@ TextureImporter: edges: [] weights: [] secondaryTextures: [] - spritePackingTag: + nameFileIdTable: {} + mipmapLimitGroupName: pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Resources/Editor/reactor.png.meta b/Assets/Resources/Editor/reactor.png.meta index e3fc5955..bf4fc313 100644 --- a/Assets/Resources/Editor/reactor.png.meta +++ b/Assets/Resources/Editor/reactor.png.meta @@ -3,7 +3,7 @@ guid: 1e4118434d45eaf4b9857f9c1733ca94 TextureImporter: internalIDToNameTable: [] externalObjects: {} - serializedVersion: 11 + serializedVersion: 12 mipmaps: mipMapMode: 0 enableMipMap: 1 @@ -20,10 +20,12 @@ TextureImporter: externalNormalMap: 0 heightScale: 0.25 normalMapFilter: 0 + flipGreenChannel: 0 isReadable: 0 streamingMipmaps: 0 streamingMipmapsPriority: 0 vTOnly: 0 + ignoreMipmapLimit: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -62,6 +64,8 @@ TextureImporter: textureFormatSet: 0 ignorePngGamma: 0 applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 platformSettings: - serializedVersion: 3 buildTarget: DefaultTexturePlatform @@ -70,7 +74,7 @@ TextureImporter: textureFormat: -1 textureCompression: 1 compressionQuality: 50 - crunchedCompression: 1 + crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 @@ -135,6 +139,18 @@ TextureImporter: overridden: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 8192 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 sprites: [] @@ -148,9 +164,9 @@ TextureImporter: edges: [] weights: [] secondaryTextures: [] - spritePackingTag: + nameFileIdTable: {} + mipmapLimitGroupName: pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/_MonaAssets/Materials/Floor/stone_d.png.meta b/Assets/_MonaAssets/Materials/Floor/stone_d.png.meta index 4427d3b4..ac49f04f 100644 --- a/Assets/_MonaAssets/Materials/Floor/stone_d.png.meta +++ b/Assets/_MonaAssets/Materials/Floor/stone_d.png.meta @@ -3,7 +3,7 @@ guid: e3279062c35a26d41b6132a5ab56afdd TextureImporter: internalIDToNameTable: [] externalObjects: {} - serializedVersion: 11 + serializedVersion: 12 mipmaps: mipMapMode: 0 enableMipMap: 1 @@ -20,10 +20,12 @@ TextureImporter: externalNormalMap: 0 heightScale: 0.25 normalMapFilter: 0 + flipGreenChannel: 0 isReadable: 0 streamingMipmaps: 0 streamingMipmapsPriority: 0 vTOnly: 0 + ignoreMipmapLimit: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -62,6 +64,8 @@ TextureImporter: textureFormatSet: 0 ignorePngGamma: 0 applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 platformSettings: - serializedVersion: 3 buildTarget: DefaultTexturePlatform @@ -70,7 +74,7 @@ TextureImporter: textureFormat: -1 textureCompression: 2 compressionQuality: 50 - crunchedCompression: 1 + crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 @@ -135,6 +139,18 @@ TextureImporter: overridden: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 8192 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 sprites: [] @@ -148,9 +164,9 @@ TextureImporter: edges: [] weights: [] secondaryTextures: [] - spritePackingTag: + nameFileIdTable: {} + mipmapLimitGroupName: pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/_MonaAssets/Materials/Floor/stone_n.png.meta b/Assets/_MonaAssets/Materials/Floor/stone_n.png.meta index a76edaad..69254a56 100644 --- a/Assets/_MonaAssets/Materials/Floor/stone_n.png.meta +++ b/Assets/_MonaAssets/Materials/Floor/stone_n.png.meta @@ -3,7 +3,7 @@ guid: 52a06b9715cb9784cabb853d2416867e TextureImporter: internalIDToNameTable: [] externalObjects: {} - serializedVersion: 11 + serializedVersion: 12 mipmaps: mipMapMode: 0 enableMipMap: 1 @@ -20,10 +20,12 @@ TextureImporter: externalNormalMap: 0 heightScale: 0.25 normalMapFilter: 0 + flipGreenChannel: 0 isReadable: 0 streamingMipmaps: 0 streamingMipmapsPriority: 0 vTOnly: 0 + ignoreMipmapLimit: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -62,6 +64,8 @@ TextureImporter: textureFormatSet: 0 ignorePngGamma: 0 applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 platformSettings: - serializedVersion: 3 buildTarget: DefaultTexturePlatform @@ -70,7 +74,7 @@ TextureImporter: textureFormat: -1 textureCompression: 2 compressionQuality: 50 - crunchedCompression: 1 + crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 @@ -135,6 +139,18 @@ TextureImporter: overridden: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 8192 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 sprites: [] @@ -148,9 +164,9 @@ TextureImporter: edges: [] weights: [] secondaryTextures: [] - spritePackingTag: + nameFileIdTable: {} + mipmapLimitGroupName: pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/_MonaAssets/Materials/Template/Textures/Portal_ms.png.meta b/Assets/_MonaAssets/Materials/Template/Textures/Portal_ms.png.meta index 5fd7443d..48764ff0 100644 --- a/Assets/_MonaAssets/Materials/Template/Textures/Portal_ms.png.meta +++ b/Assets/_MonaAssets/Materials/Template/Textures/Portal_ms.png.meta @@ -3,7 +3,7 @@ guid: 4c7c122ff2a19bf459efc38e45832d36 TextureImporter: internalIDToNameTable: [] externalObjects: {} - serializedVersion: 11 + serializedVersion: 12 mipmaps: mipMapMode: 0 enableMipMap: 1 @@ -20,10 +20,12 @@ TextureImporter: externalNormalMap: 0 heightScale: 0.25 normalMapFilter: 0 + flipGreenChannel: 0 isReadable: 0 streamingMipmaps: 0 streamingMipmapsPriority: 0 vTOnly: 0 + ignoreMipmapLimit: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -62,6 +64,8 @@ TextureImporter: textureFormatSet: 0 ignorePngGamma: 0 applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 platformSettings: - serializedVersion: 3 buildTarget: DefaultTexturePlatform @@ -135,6 +139,18 @@ TextureImporter: overridden: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 sprites: [] @@ -148,9 +164,9 @@ TextureImporter: edges: [] weights: [] secondaryTextures: [] - spritePackingTag: + nameFileIdTable: {} + mipmapLimitGroupName: pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/README.md b/README.md index aac4edd2..3f7da3d6 100644 --- a/README.md +++ b/README.md @@ -20,4 +20,4 @@ Mona [Video tutorials here](https://docs.monaverse.com/create/resources/mona-tut For support, join our [Discord support channel](https://discord.gg/gcrGHzTerU) ## ⚙️ Template version -2.0.2 +2.0.4