public void StartCapturing(CaptureJob captureJob)
    {
        Capturing         = true;
        currentCaptureJob = captureJob;
        pngs.Clear();

        AnimationController = AssetBundlesLoader.CaptureParents[currentCaptureJob.slotIndex].GetComponent <AnimationController>();
        AnimationController.AnimationFinished += HandleAnimationFinished;
        AnimationController.Init();
        Logger.Log($"Start rendering job {currentCaptureJob.Guid} with settings {GifWidth}x{GifHeight} capture time {AnimationController.AnimationDuration}");
    }
 void AssignSlot(CaptureJob job)
 {
     for (int i = 0; i < availableSlots.Length; i++)
     {
         if (availableSlots[i])
         {
             job.slotIndex     = i;
             availableSlots[i] = false;
             return;
         }
     }
     throw new Exception("All slots are busy.");
 }
 void JobAction(CaptureJob job)
 {
     try
     {
         AssignSlot(job);
         UnityMainThreadDispatcher.Instance().Enqueue(() =>
         {
             var shield = AssetBundlesLoader.GenerateRandomShield(new Vector3(SpawnX, SpawnY + job.slotIndex * SpacingPerCamera, SpawnZ), job.slotIndex);
             //Save shield selection
             File.WriteAllText($"{job.UserId}.shield", JsonUtility.ToJson(shield));
             GifCaptureManagers[job.slotIndex].StartCapturing(job);
         });
     }
     catch (Exception)
     {
         job.Status = CaptureJobStatus.Error;
     }
 }