public static void WaitForSearch(CLRScriptBase script, User currentUser, ACR_ChooserCreator.ACR_CreatorCommand currentTab, CreatorSearch awaitedSearch) { if (awaitedSearch == null) { // Search has been removed. Abort. return; } if (awaitedSearch.CancellationPending) { // Search has been canceled. Abort. return; } if (currentUser.openCommand != currentTab) { // User has switched tabs. Kill the search. return; } if (currentUser.CreatorSearchResponse != null) { // Looks like we've finished. Draw a list! CreatorSearch oldSearch = currentUser.CurrentSearch; currentUser.CurrentSearch = null; oldSearch.Dispose(); Waiter.DrawNavigatorCategory(script, currentUser.CreatorSearchResponse); switch (currentUser.openCommand) { case ACR_ChooserCreator.ACR_CreatorCommand.ACR_CHOOSERCREATOR_FOCUS_CREATURE_TAB: currentUser.CurrentCreatureCategory = currentUser.CreatorSearchResponse; break; case ACR_ChooserCreator.ACR_CreatorCommand.ACR_CHOOSERCREATOR_FOCUS_ITEM_TAB: currentUser.CurrentItemCategory = currentUser.CreatorSearchResponse; break; case ACR_ChooserCreator.ACR_CreatorCommand.ACR_CHOOSERCREATOR_FOCUS_LIGHTS_TAB: currentUser.CurrentLightCategory = currentUser.CreatorSearchResponse; break; case ACR_ChooserCreator.ACR_CreatorCommand.ACR_CHOOSERCREATOR_FOCUS_PLACEABLE_TAB: currentUser.CurrentPlaceableCategory = currentUser.CreatorSearchResponse; break; case ACR_ChooserCreator.ACR_CreatorCommand.ACR_CHOOSERCREATOR_FOCUS_TRAP_TAB: currentUser.CurrentTrapCategory = currentUser.CreatorSearchResponse; break; case ACR_ChooserCreator.ACR_CreatorCommand.ACR_CHOOSERCREATOR_FOCUS_VFX_TAB: currentUser.CurrentVisualEffectCategory = currentUser.CreatorSearchResponse; break; case ACR_ChooserCreator.ACR_CreatorCommand.ACR_CHOOSERCREATOR_FOCUS_WAYPOINT_TAB: currentUser.CurrentWaypointCategory = currentUser.CreatorSearchResponse; break; } return; } script.DelayCommand(1.0f, delegate { WaitForSearch(script, currentUser, currentTab, awaitedSearch); }); }