1- #define INCLUDE_INSTALLER
2- #if INCLUDE_INSTALLER
1+ #if INCLUDE_INSTALLER
32using System ;
43using System . Collections ;
54using System . Collections . Generic ;
@@ -258,6 +257,12 @@ private bool canRefetch
258257 private float progressTarget = 0f ;
259258 private float progress = 0f ;
260259
260+ [ SerializeField ]
261+ private bool PendingPackageLock = false ;
262+ [ SerializeField ]
263+ private List < string > PendingPackages = new List < string > ( ) ;
264+
265+
261266 [ MenuItem ( "Window/MLAPI" ) ]
262267 public static void ShowWindow ( )
263268 {
@@ -276,6 +281,19 @@ private void OnGUI()
276281 EditorUtility . ClearProgressBar ( ) ;
277282 }
278283
284+ if ( PendingPackages . Count > 0 && ! EditorApplication . isCompiling && ! EditorApplication . isUpdating && ! PendingPackageLock )
285+ {
286+ PendingPackageLock = true ;
287+
288+ string packageName = PendingPackages [ PendingPackages . Count - 1 ] ;
289+ PendingPackages . RemoveAt ( PendingPackages . Count - 1 ) ;
290+
291+ AssetDatabase . importPackageCompleted += OnPackageImported ;
292+ AssetDatabase . importPackageFailed += OnPackageImportFailed ;
293+
294+ AssetDatabase . ImportPackage ( Application . dataPath + "/MLAPI/Lib/" + packageName , false ) ;
295+ }
296+
279297 GUILayout . BeginArea ( new Rect ( 5 , 0 , position . width - 5 , position . height - ( 40 + ( ( string . IsNullOrEmpty ( statusMessage ) ? 0 : 20 ) + ( canRefetch ? 20 : 0 ) ) ) ) ) ;
280298 scrollPos = GUILayout . BeginScrollView ( scrollPos ) ;
281299 tab = GUILayout . Toolbar ( tab , new string [ ] { "GitHub" , "Commits" } ) ;
@@ -356,6 +374,18 @@ private void OnGUI()
356374 Repaint ( ) ;
357375 }
358376
377+ private void OnPackageImported ( string packageName )
378+ {
379+ AssetDatabase . importPackageCompleted -= OnPackageImported ;
380+ PendingPackageLock = false ;
381+ }
382+
383+ private void OnPackageImportFailed ( string packageName , string errorMessage )
384+ {
385+ AssetDatabase . importPackageFailed -= OnPackageImportFailed ;
386+ PendingPackageLock = false ;
387+ }
388+
359389 private List < MLAPIVersion > GetMajorVersionsBetween ( MLAPIVersion currentVersion , MLAPIVersion targetVersion )
360390 {
361391 List < MLAPIVersion > versionsBetween = new List < MLAPIVersion > ( ) ;
@@ -396,6 +426,8 @@ private GithubRelease[] GetReleasesFromVersions(List<MLAPIVersion> versions)
396426
397427 private IEnumerator InstallRelease ( int index )
398428 {
429+ PendingPackages . Clear ( ) ;
430+ PendingPackageLock = true ;
399431 bool waiting = true ;
400432 bool accepted = false ;
401433 MLAPIVersion currentMLAPIVersion = MLAPIVersion . Parse ( currentVersion ) ;
@@ -435,11 +467,7 @@ private IEnumerator InstallRelease(int index)
435467 if ( Directory . Exists ( Application . dataPath + "/MLAPI/Lib/" ) )
436468 Directory . Delete ( Application . dataPath + "/MLAPI/Lib/" , true ) ;
437469
438- if ( Directory . Exists ( Application . dataPath + "/Editor/" ) )
439- Directory . Delete ( Application . dataPath + "/Editor/MLAPI/" , false ) ;
440-
441470 Directory . CreateDirectory ( Application . dataPath + "/MLAPI/Lib/" ) ;
442- Directory . CreateDirectory ( Application . dataPath + "/Editor/MLAPI/" ) ;
443471
444472 bool downloadFail = false ;
445473 for ( int i = 0 ; i < releases [ index ] . assets . Length ; i ++ )
@@ -467,15 +495,12 @@ private IEnumerator InstallRelease(int index)
467495 statusMessage = "Writing " + releases [ index ] . assets [ i ] . name + " to disk" ;
468496 yield return null ;
469497
470- if ( ! releases [ index ] . assets [ i ] . name . ToLower ( ) . Contains ( "editor" ) )
471- {
472- File . WriteAllBytes ( Application . dataPath + "/MLAPI/Lib/" + releases [ index ] . assets [ i ] . name , www . bytes ) ;
473- }
474- else
498+ File . WriteAllBytes ( Application . dataPath + "/MLAPI/Lib/" + releases [ index ] . assets [ i ] . name , www . bytes ) ;
499+
500+ if ( releases [ index ] . assets [ i ] . name . EndsWith ( ".unitypackage" ) )
475501 {
476- File . WriteAllBytes ( Application . dataPath + "/Editor/MLAPI/" + releases [ index ] . assets [ i ] . name , www . bytes ) ;
502+ PendingPackages . Add ( releases [ index ] . assets [ i ] . name ) ;
477503 }
478-
479504 yield return null ;
480505 }
481506 progress = i ;
@@ -489,6 +514,7 @@ private IEnumerator InstallRelease(int index)
489514 }
490515 showProgressBar = false ;
491516 statusMessage = "" ;
517+ PendingPackageLock = false ;
492518 }
493519
494520 private IEnumerator GetReleases ( )
0 commit comments