Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 52 additions & 2 deletions Assets/UdonSharp/Editor/UdonSharpProgramAsset.cs
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ public static UdonSharpProgramAsset[] GetAllUdonSharpPrograms()

foreach (UdonSharpProgramAsset fallbackAsset in fallbackAssets1)
{
if (!_programAssetCache.Contains(fallbackAsset))
if (_programAssetCache != null && fallbackAsset != null && !_programAssetCache.Contains(fallbackAsset))
{
Debug.LogWarning($"Repairing program asset {fallbackAsset} which Unity has broken");
neededFallback = true;
Expand All @@ -271,7 +271,7 @@ public static UdonSharpProgramAsset[] GetAllUdonSharpPrograms()
var fallbackAssets2 = AssetDatabase.FindAssets($"t:{nameof(UdonProgramAsset)}").Select(e => AssetDatabase.LoadAssetAtPath<UdonProgramAsset>(AssetDatabase.GUIDToAssetPath(e))).OfType<UdonSharpProgramAsset>();
foreach (UdonSharpProgramAsset fallbackAsset in fallbackAssets2)
{
if (!_programAssetCache.Contains(fallbackAsset))
if (_programAssetCache != null && fallbackAsset != null && !_programAssetCache.Contains(fallbackAsset))
{
Debug.LogWarning($"Repairing program asset {fallbackAsset} which Unity has broken pass 2");
neededFallback = true;
Expand Down Expand Up @@ -300,6 +300,56 @@ public static UdonSharpProgramAsset[] GetAllUdonSharpPrograms()
return (UdonSharpProgramAsset[])_programAssetCache.Clone();
}

[MenuItem("Window/Udon Sharp/Refresh All UdonSharp Assets")]
static public void UdonSharpCheckAbsent()
{
Debug.Log( "Checking Absent" );

int cycles = -1;
int lastNumAssets;
int currentNumAssets;
string[] udonSharpDataAssets;

// Loop until we stop picking up assets.
do
{
udonSharpDataAssets = AssetDatabase.FindAssets($"t:{nameof(UdonSharpProgramAsset)}");
lastNumAssets = udonSharpDataAssets.Length;
string[] udonSharpNames = new string[udonSharpDataAssets.Length];
Debug.Log( $"Found {udonSharpDataAssets.Length} assets." );

_programAssetCache = new UdonSharpProgramAsset[udonSharpDataAssets.Length];

for (int i = 0; i < _programAssetCache.Length; ++i)
{
udonSharpDataAssets[i] = AssetDatabase.GUIDToAssetPath(udonSharpDataAssets[i]);
}

foreach(string s in AssetDatabase.GetAllAssetPaths() )
{
if(!udonSharpDataAssets.Contains(s))
{
Type t = AssetDatabase.GetMainAssetTypeAtPath(s);
if (t != null && t.FullName == "UdonSharp.UdonSharpProgramAsset")
{
Debug.Log( $"Trying to recover {s}" );
Selection.activeObject = AssetDatabase.LoadAssetAtPath<UnityEngine.Object>(s);
}
}
}

ClearProgramAssetCache();

GetAllUdonSharpPrograms();

currentNumAssets = AssetDatabase.FindAssets($"t:{nameof(UdonSharpProgramAsset)}").Length;
Debug.Log( $"Checking to see if we need to re-run. Last: {lastNumAssets}, This: {currentNumAssets}" );
cycles++;
} while( lastNumAssets != currentNumAssets );

Debug.Log( $"Completed {cycles} refresh cycles, found {lastNumAssets} assets." );
}

[PublicAPI]
public static bool AnyUdonSharpScriptHasError()
{
Expand Down