using System.Collections.Generic; using UnityEditor; using UnityEngine; namespace Crowdin.Plugin.Helpers { using Models.Screenshot; using ScriptableObjects; public static class ScreenshotHelper { private const string FileName = "CrowdinScreenshots"; private static readonly string ScreenshotsPath = $"Crowdin/{FileName}"; private static readonly string FullScreenshotsPath = $"{FolderHelper.resourcesDirectory}/{FileName}.asset"; private static CrowdinScreenshots Screenshots { get; set; } static ScreenshotHelper() { TryLoadScreenshots(); if (Screenshots is null) { CreateScreenshotsAsset(); TryLoadScreenshots(); } } public static IEnumerable GetScreenshots() { Screenshots.screenshotData ??= new List(); foreach (var screenshotData in Screenshots.screenshotData) { var texture = Resources.Load($"Crowdin/Screenshots/{screenshotData.translationKey}"); if (texture != null) screenshotData.texture = texture; } Screenshots.screenshotData.RemoveAll(data => data.texture is null); return Screenshots.screenshotData; } public static void AddOrUpdateScreenshotByTranslationKey(string key, Texture2D texture2D) { if (Screenshots is null) { CreateScreenshotsAsset(); } if (Screenshots is null) { return; } Screenshots.screenshotData ??= new List(); var findIndex = Screenshots.screenshotData.FindIndex(data => data.translationKey == key); if (findIndex == -1) { Screenshots.screenshotData.Add(new ScreenshotData { name = $"{key}.png", translationKey = key, texture = texture2D }); } else { Screenshots.screenshotData[findIndex].texture = texture2D; } } private static void CreateScreenshotsAsset() { var asset = ScriptableObject.CreateInstance(); AssetDatabase.CreateAsset(asset, FullScreenshotsPath); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate); } private static void TryLoadScreenshots() { Screenshots = Resources.Load(ScreenshotsPath); if (Screenshots is null) { return; } EditorUtility.SetDirty(Screenshots); } } }