123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- using System;
- using System.IO;
- using UnityEngine;
-
- namespace UnityEditor.Purchasing
- {
- internal class WinRTPatcher
- {
- private const string k_OutputPath = "Assets/Scripts/UnityPurchasing/generated";
-
- private const string k_WorkaroundFileName = "WindowsRuntimeWorkaround.cs";
- private const string k_WorkaroundTemplateFileName = "WindowsRuntimeWorkaround.cs.template";
-
- internal static void PatchWinRTBuild()
- {
- #if UNITY_2020
- if (!DoesWorkaroundClassExist())
- {
- try
- {
- BuildWorkaroundClass();
- }
- catch (Exception patchException)
- {
- Debug.LogWarning(patchException.StackTrace);
- }
- }
-
- AssetDatabase.Refresh();
- #endif
- }
-
- private static bool DoesWorkaroundClassExist()
- {
- return File.Exists(GetFullPathForWorkaroundClass());
- }
-
- private static string GetFullPathForWorkaroundClass()
- {
- return Path.Combine(k_OutputPath, k_WorkaroundFileName);
- }
-
- private static void BuildWorkaroundClass()
- {
- var templateText = LoadTemplateText();
-
- if (templateText != null)
- {
- GeneratePatchFile(templateText);
- }
- }
-
- private static string LoadTemplateText()
- {
- var templateGUID = FindTemplateGUID(k_WorkaroundFileName);
- string templateText = null;
-
- if (templateGUID != null)
- {
- var templateAbsolutePath = Path.Combine(Path.GetDirectoryName(Application.dataPath), AssetDatabase.GUIDToAssetPath(templateGUID));
-
- templateText = File.ReadAllText(templateAbsolutePath);
- }
- else
- {
- Debug.LogError($"Could not find template \"{k_WorkaroundTemplateFileName}\".");
- }
-
- return templateText;
- }
-
- private static string FindTemplateGUID(string templateFilename)
- {
- var assetGUIDs = AssetDatabase.FindAssets(k_WorkaroundFileName);
- return (assetGUIDs.Length > 0) ? assetGUIDs[0] : null;
- }
-
- private static void GeneratePatchFile(string templateText)
- {
- Directory.CreateDirectory(k_OutputPath);
- File.WriteAllText(GetFullPathForWorkaroundClass(), templateText);
- }
- }
- }
|