public static bool Override_RequestResource_Internal(DataManager __instance, BattleTechResourceType resourceType, string identifier, PrewarmRequest prewarm, bool allowRequestStacking, ref bool ___isLoading) { try { if (UnpatchManager || string.IsNullOrEmpty(identifier)) { return(false); } // Quickly skip duplicate request if (resourceType == lastResourceType && identifier == lastIdentifier) { return(false); } lastResourceType = resourceType; lastIdentifier = identifier; DataManager me = __instance; string key = GetKey(resourceType, identifier); if (monitoringMech != null) { LogDependee(monitoringMech, key); } foreground.TryGetValue(key, out DataManager.DataManagerLoadRequest dataManagerLoadRequest); if (dataManagerLoadRequest != null) { if (dataManagerLoadRequest.State != DataManager.DataManagerLoadRequest.RequestState.Complete || !dataManagerLoadRequest.DependenciesLoaded(dataManagerLoadRequest.RequestWeight.RequestWeight)) { if (allowRequestStacking) { dataManagerLoadRequest.IncrementCacheCount(); } } else { NotifyFileLoaded(me, dataManagerLoadRequest, ref ___isLoading); } return(false); } bool movedToForeground = GraduateBackgroundRequest(me, resourceType, identifier); bool skipLoad = false; bool isTemplate = identifier.ToLowerInvariant().Contains("template"); if (!movedToForeground && !skipLoad && !isTemplate) { dataManagerLoadRequest = (DataManager.DataManagerLoadRequest)CreateByResourceType.Invoke(me, new object[] { resourceType, identifier, prewarm }); if (foreground.Count <= 0) { Info("Starting new queue"); stopwatch.Start(); } if (DebugLog) { Verbo("Queued: {0} ({1})", key, dataManagerLoadRequest.GetType()); } //if ( key == "19_CombatGameConstants" ) Info( Logger.Stacktrace ); foreground.Add(key, dataManagerLoadRequest); if (LoadingQueue && !dataManagerLoadRequest.IsComplete()) { foregroundLoading.Add(dataManagerLoadRequest); } } return(false); } catch (Exception ex) { return(KillManagerPatch(__instance, ex)); } }
public static bool Override_RequestResourceAsync_Internal(DataManager __instance, BattleTechResourceType resourceType, string identifier, PrewarmRequest prewarm, uint ___backgroundRequestsCurrentAllowedWeight) { try { if (UnpatchManager || string.IsNullOrEmpty(identifier)) { return(false); } DataManager me = __instance; string key = GetKey(resourceType, identifier); background.TryGetValue(key, out DataManager.DataManagerLoadRequest dataManagerLoadRequest); if (dataManagerLoadRequest != null) { if (dataManagerLoadRequest.State == DataManager.DataManagerLoadRequest.RequestState.Complete) { if (!dataManagerLoadRequest.DependenciesLoaded(___backgroundRequestsCurrentAllowedWeight)) { dataManagerLoadRequest.ResetRequestState(); } else { dataManagerLoadRequest.NotifyLoadComplete(); } } else { if (DebugLog) { Warn("Cannot move {0} to top of background queue.", GetKey(dataManagerLoadRequest)); } // Move to top of queue. Not supported by HashTable. //backgroundRequest.Remove( dataManagerLoadRequest ); //backgroundRequest.Insert( 0, dataManagerLoadRequest ); } return(false); } bool isForeground = foreground.ContainsKey(key); bool isTemplate = identifier.ToLowerInvariant().Contains("template"); if (!isForeground && !isTemplate) { dataManagerLoadRequest = (DataManager.DataManagerLoadRequest)CreateByResourceType.Invoke(me, new object[] { resourceType, identifier, prewarm }); dataManagerLoadRequest.SetAsync(true); if (DebugLog) { Info("Queued Async: {0} ({1}) ", key, dataManagerLoadRequest.GetType()); } background.Add(key, dataManagerLoadRequest); } return(false); } catch (Exception ex) { return(KillManagerPatch(__instance, ex)); } }