void GetFavorites() { if (BlockoutEditorSettings.CurrentSceneSetting) { var dict = BlockoutEditorSettings.CurrentSceneSetting.assetDictionary; if (dict != null) { var sortedFavourites = dict.ToList().OrderByDescending(x => x.assetQuantity).ToList(); favouriteItems = new BlockoutItemPreview[(sortedFavourites.Count > amountOfItemsToShow ? amountOfItemsToShow : sortedFavourites.Count)]; for (var i = 0; i < sortedFavourites.Count; ++i) { if (sortedFavourites[i] == null || i >= amountOfItemsToShow) { break; } var fa = AssetDatabase.FindAssets(sortedFavourites[i].assetName + " t:prefab"); if (fa.Length != 0) { var path = AssetDatabase.GUIDToAssetPath(fa[0]); favouriteItems[i].prefab = (GameObject)AssetDatabase.LoadAssetAtPath(path, typeof(GameObject)); favouriteItems[i].name = favouriteItems[i].prefab.name; favouriteItems[i].previewImage = AssetPreview.GetAssetPreview(favouriteItems[i].prefab); } } favouriteItems = favouriteItems.ToList().Distinct().ToArray(); var toRemove = favouriteItems.ToList().Where(x => x.previewImage == null).ToList(); favouriteItems = favouriteItems.ToList().Except(toRemove).ToArray(); if (favouriteItems.Length > 0) { repaint = true; } } } }
void Update() { // If there is an obejcts selected, then find assets with a similar name to it in the asset database. // Only is its selected in the scene and not in the project window if (Selection.gameObjects.Length > 0) { var selected = Selection.gameObjects.ToList(); foreach (var x in selected) { if (!AssetDatabase.Contains(x.gameObject)) { var helper = x.GetComponent <BlockoutHelper> (); if (helper) { if (previousHelper != helper) { previousHelper = helper; if (parentWindow.CurrentSceneSetting.assetDictionary == null) { parentWindow.CurrentSceneSetting.assetDictionary = new List <AssetDefinition> (); } var names = helper.gameObject.name.Split('_').ToList(); string targetName = names [0]; int amount = ((names.Count - 1) > 2 ? 2 : names.Count - 1); for (int i = 1; i < amount; ++i) { targetName += "_" + names [i]; } var foundAssets = AssetDatabase.FindAssets(targetName + " t:prefab"); bool cap = (foundAssets.Length > amountOfItemsToShow); GameObject[] loadedSuggestions = new GameObject[cap ? amountOfItemsToShow : foundAssets.Length]; suggestedItems = new BlockoutItemPreview[cap ? amountOfItemsToShow : foundAssets.Length]; for (int i = 0; i < (cap ? amountOfItemsToShow : foundAssets.Length); ++i) { var path = AssetDatabase.GUIDToAssetPath(foundAssets [i]); suggestedItems[i].prefab = (GameObject)AssetDatabase.LoadAssetAtPath(path, typeof(GameObject)); suggestedItems [i].name = suggestedItems [i].prefab.name; suggestedItems[i].previewImage = AssetPreview.GetAssetPreview(loadedSuggestions[i]); } break; } repaint = true; break; } } } } // If no assets are selected then default the suggested assets to a selection of Block prefabs else { var foundAssets = AssetDatabase.FindAssets("Block t:prefab"); bool cap = (foundAssets.Length > amountOfItemsToShow); GameObject[] loadedSuggestions = new GameObject[cap ? amountOfItemsToShow : foundAssets.Length]; suggestedItems = new BlockoutItemPreview[cap ? amountOfItemsToShow : foundAssets.Length]; for (int i = 0; i < (cap ? amountOfItemsToShow : foundAssets.Length); ++i) { var path = AssetDatabase.GUIDToAssetPath(foundAssets[i]); suggestedItems[i].prefab = (GameObject)AssetDatabase.LoadAssetAtPath(path, typeof(GameObject)); suggestedItems [i].name = suggestedItems [i].prefab.name; suggestedItems[i].previewImage = AssetPreview.GetAssetPreview(loadedSuggestions[i]); } previousHelper = null; repaint = true; } // Do a redundancy check to see if the main editor window exists. If it does, then get the favourite assets list from the scene definition if (parentWindow) { var dict = parentWindow.CurrentSceneSetting.assetDictionary; #region Favourites if (dict != null) { var sortedFavourites = dict.ToList().OrderByDescending(x => x.assetQuantity).ToList(); favouriteItems = new BlockoutItemPreview[(sortedFavourites.Count > amountOfItemsToShow ? amountOfItemsToShow : sortedFavourites.Count)]; for (var i = 0; i < sortedFavourites.Count; ++i) { if (sortedFavourites[i] == null || i >= amountOfItemsToShow) { break; } var fa = AssetDatabase.FindAssets(sortedFavourites[i].assetName + " t:prefab"); if (fa.Length != 0) { var path = AssetDatabase.GUIDToAssetPath(fa[0]); favouriteItems[i].prefab = (GameObject)AssetDatabase.LoadAssetAtPath(path, typeof(GameObject)); favouriteItems [i].name = favouriteItems [i].prefab.name; favouriteItems[i].previewImage = AssetPreview.GetAssetPreview(favouriteItems[i].prefab); } } favouriteItems = favouriteItems.ToList().Distinct().ToArray(); var toRemove = favouriteItems.ToList().Where(x => x.previewImage == null).ToList(); favouriteItems = favouriteItems.ToList().Except(toRemove).ToArray(); } #endregion } if (repaint) { Repaint(); repaint = false; } }