private static void DoClearCacheCoroutineStart(CacheErasingFlags flags) { if (!(instance.lastCoroutine is null)) { WriteTheSignsMod.Controller.StopCoroutine(instance.lastCoroutine); } instance.lastCoroutine = WriteTheSignsMod.Controller?.StartCoroutine(instance.PurgeCache(flags, default)); }
private IEnumerator PurgeCache(CacheErasingFlags cacheFlags, InstanceID instanceID) { coroutineFlagsToErase |= cacheFlags; yield return(0); var objectsToIterate = m_cacheSegments.Values.Cast <IItemCache>() .Concat(m_cacheVehicles.Values.Cast <IItemCache>()) .Concat(m_cacheTransportLines.Values.Cast <IItemCache>()) .Concat(m_cacheIntercityTransportLines.Values.Cast <IItemCache>()) .Concat(m_cacheDistricts.Values.Cast <IItemCache>()) .Concat(m_cacheParks.Values.Cast <IItemCache>()) .Concat(m_cacheBuildings.Values.Cast <IItemCache>()).ToList(); for (int i = 0; i < objectsToIterate.Count; i++) { objectsToIterate[i].PurgeCache(coroutineFlagsToErase, instanceID); if (i % 100 == 99) { yield return(0); } } coroutineFlagsToErase = 0; instance.lastCoroutine = null; }
public static bool Has(this CacheErasingFlags src, CacheErasingFlags test) => (src & test) != 0;