private static void MovePointerForward(ref QueuePosition ptr) { switch (ptr) { case QueuePosition.Q1: ptr = QueuePosition.Q2; break; case QueuePosition.Q2: ptr = QueuePosition.Q3; break; case QueuePosition.Q3: ptr = QueuePosition.Q4; break; case QueuePosition.Q4: ptr = QueuePosition.Q5; break; case QueuePosition.Q5: ptr = QueuePosition.Q1; break; } }
private static Video GetVideoFromPointer(QueuePosition ptr, bool includePriority = false) { if (includePriority) { if (PriorityQueue.Count > 0) { return(PriorityQueue.First()); } } switch (ptr) { case QueuePosition.Q1: return(VidQueue[0]); case QueuePosition.Q2: return(VidQueue[1]); case QueuePosition.Q3: return(VidQueue[2]); case QueuePosition.Q4: return(VidQueue[3]); case QueuePosition.Q5: return(VidQueue[4]); } return(null); }
private static void MovePointerToNextVideo(ref QueuePosition ptr) { int count = 11; Video vidAtPos = GetVideoFromPointer(ptr); while (vidAtPos == null && count > 0) { MovePointerForward(ref ptr); vidAtPos = GetVideoFromPointer(ptr); count--; } }
private void Awake() { QueuePositions = GetComponentsInChildren <QueuePosition>().ToList(); QueuePositions.Sort((p1, p2) => string.Compare(p1.name, p2.name, StringComparison.Ordinal)); Entrypoint = QueuePositions.First(); Endpoint = QueuePositions.Last(); if (QueuePositions.Count < 1) { Debug.LogError("Invalid queue size"); } else { BuildLink(); } }
public static Boolean ClearQueue() { //Reset the pointers pointer = QueuePosition.Q1; queuePointer = QueuePosition.Q1; //Check if the queue is already empty if (IsEmpty()) { return(false); } //Clear the queue VidQueue = new Video[5]; return(true); }
public static void AddToQueue(Video video, QueuePosition position = QueuePosition.Nextfree) { //Check if the queue is empty -> If this is the first video, the pointer must be set appropriately bool wasEmpty = IsEmpty(); switch (position) { case QueuePosition.Nextfree: int count = 5; pointer = queuePointer; Video vidAtCurrentPosition = GetVideoFromPointer(pointer); while (vidAtCurrentPosition != null && count >= 0) { MovePointerForward(ref pointer); vidAtCurrentPosition = GetVideoFromPointer(pointer); count--; } if (vidAtCurrentPosition == null) { InsertOnPointer(video); } break; case QueuePosition.Priority: PriorityQueue.Add(video); break; default: MovePointer(position); InsertOnPointer(video); break; } if (wasEmpty) { //Move the pointer to the next video MovePointerToNextVideo(ref queuePointer); } }
public void AddThumbnailAssetItems(IEnumerable <AssetItem> assetItems, QueuePosition position) { if (!thumbnailThreadShouldTerminate) { assetBuilderService.WaitForShaders(); lock (hashLock) { foreach (var asset in assetItems) { if (thumbnailsInProgressAndContinuation.ContainsKey(asset.Id)) { // Thumbnail is already being generated, set this one as continuation thumbnailsInProgressAndContinuation[asset.Id] = new ThumbnailContinuation(asset, position); } else if (position == QueuePosition.First) { PriorityQueueNode <AssetBuildUnit> node; if (thumbnailQueueHash.TryGetValue(asset, out node)) { assetBuilderService.RemoveBuildUnit(node); thumbnailQueueHash.Remove(asset); } node = assetBuilderService.PushBuildUnit(new ThumbnailAssetBuildUnit(asset, currentGameSettings, this, firstPriority--)); thumbnailQueueHash.Add(asset, node); } else { if (!thumbnailQueueHash.ContainsKey(asset)) { var node = assetBuilderService.PushBuildUnit(new ThumbnailAssetBuildUnit(asset, currentGameSettings, this, lastPriority++)); thumbnailQueueHash.Add(asset, node); } } } } } }
public ThumbnailContinuation(AssetItem updatedAssetToRecompile, QueuePosition position) { UpdatedAssetToRecompile = updatedAssetToRecompile; Position = position; }
public static void RemoveFromQueue(QueuePosition position) { MovePointer(position); RemoveOnPointer(); }
private static void MovePointer(QueuePosition position) { pointer = position; }