You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
RizzeProjectile/Assets/Photon/Fusion/Editor/FusionWeaverTriggerImporter.cs

65 lines
2.3 KiB
C#

namespace Fusion.Editor {
using System.IO;
using System.Linq;
using UnityEditor;
using UnityEditor.AssetImporters;
using UnityEngine;
[ScriptedImporter(1, ExtensionWithoutDot, NetworkProjectConfigImporter.ImportQueueOffset + 1)]
public class FusionWeaverTriggerImporter : ScriptedImporter {
public const string DependencyName = "FusionILWeaverTriggerImporter/ConfigHash";
public const string Extension = "." + ExtensionWithoutDot;
public const string ExtensionWithoutDot = "fusionweavertrigger";
[Tooltip("If enabled, runs the weaver when weaving-related changes are detected in the config file.")]
public bool RunWeaverOnConfigChanges = true;
public override void OnImportAsset(AssetImportContext ctx) {
ctx.DependsOnCustomDependency(DependencyName);
if (RunWeaverOnConfigChanges) {
ILWeaverUtils.RunWeaver();
}
}
private static void RefreshDependencyHash() {
if (EditorApplication.isCompiling || EditorApplication.isUpdating) {
return;
}
var configPath = NetworkProjectConfigUtilities.GetGlobalConfigPath();
if (string.IsNullOrEmpty(configPath)) {
return;
}
try {
var cfg = NetworkProjectConfigImporter.LoadConfigFromFile(configPath);
var hash = new Hash128();
foreach (var path in cfg.AssembliesToWeave) {
hash.Append(path);
}
hash.Append(cfg.UseSerializableDictionary ? 1 : 0);
hash.Append(cfg.NullChecksForNetworkedProperties ? 1 : 0);
hash.Append(cfg.CheckRpcAttributeUsage ? 1 : 0);
hash.Append(cfg.CheckNetworkedPropertiesBeingEmpty ? 1 : 0);
AssetDatabaseUtils.RegisterCustomDependencyWithMppmWorkaround(DependencyName, hash);
AssetDatabase.Refresh();
} catch {
// ignore the error
}
}
private class Postprocessor : AssetPostprocessor {
private static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) {
foreach (var path in importedAssets) {
if (path.EndsWith(NetworkProjectConfigImporter.Extension)) {
EditorApplication.delayCall -= RefreshDependencyHash;
EditorApplication.delayCall += RefreshDependencyHash;
}
}
}
}
}
}