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.
65 lines
2.3 KiB
C#
65 lines
2.3 KiB
C#
4 weeks ago
|
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;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|