Exemple #1
0
    void LoadAssetsFromPack(PlayAssetPackRequest packRequest)
    {
        var discreteAssets =
            gameAssetManager.GetDiscreteAssetNameList();

        foreach (string discreteAsset in discreteAssets)
        {
            var assetLocation = packRequest.GetAssetLocation(
                discreteAsset);
            if (assetLocation != null)
            {
                long assetSize       = (long)assetLocation.Size;
                long assetOffset     = (long)assetLocation.Offset;
                var  assetFileStream = File.OpenRead(assetLocation.Path);
                var  assetBuffer     = new byte[assetSize];
                assetFileStream.Seek(assetOffset, SeekOrigin.Begin);
                assetFileStream.Read(assetBuffer, 0, assetBuffer.Length);
                Debug.Log("Finished discrete load of " + discreteAsset);
                // The asset is a raw .jpg or .png, convert to a sprite
                gameAssetManager.AddSpriteAsset(discreteAsset,
                                                GameAssetManager.GenerateSpriteFromRawImage(
                                                    assetBuffer));
            }
        }
    }
Exemple #2
0
    public PlayAssetPackRequest FinishPackDownload()
    {
        PlayAssetPackRequest request = assetPackRequest;

        assetPackRequest = null;
        return(request);
    }
Exemple #3
0
 private void Awake()
 {
     assetPackSize                = 0;
     isAssetPackSizeValid         = false;
     isCellularConfirmationActive = false;
     didApproveCellularData       = false;
     assetBundleRequest           = null;
     assetPackRequest             = null;
 }
 public override void Unload()
 {
     base.Unload();
     if (playAssetPackRequest != null)
     {
         playAssetPackRequest.AttemptCancel();
         playAssetPackRequest = null;
     }
 }
 private void OnPackRequestCompleted(PlayAssetPackRequest packRequest)
 {
     packRequest.Completed -= OnPackRequestCompleted;
     if (packRequest.Error == AssetDeliveryErrorCode.NoError)
     {
         StartLoadingAssetBundle();
     }
     else
     {
         IsDone = true;
         InvokeCompletedEvent();
     }
 }
Exemple #6
0
 public void StartDownload()
 {
     if (isSingleAssetBundlePack && assetBundleRequest == null)
     {
         assetBundleRequest = PlayAssetDelivery.RetrieveAssetBundleAsync(
             assetPackName);
     }
     else if (!isSingleAssetBundlePack && assetPackRequest == null)
     {
         assetPackRequest = PlayAssetDelivery.RetrieveAssetPackAsync(
             assetPackName);
     }
 }
Exemple #7
0
 public void Unload()
 {
     if (assetBundle != null)
     {
         assetBundle.Unload(true);
         assetBundle = null;
     }
     if (playAssetPackRequest != null)
     {
         playAssetPackRequest.AttemptCancel();
         playAssetPackRequest = null;
     }
 }
Exemple #8
0
        private void OnChildPackCompleted(PlayAssetPackRequest request)
        {
            var requestImpl = request as PlayAssetPackRequestImpl;

            if (requestImpl == null)
            {
                throw new ArgumentException("Request is not a PlayAssetPackRequestImpl");
            }

            _completedPackNames.Add(requestImpl.AssetPackName);
            if (_completedPackNames.Count == Requests.Count && !IsDone)
            {
                IsDone = true;
                InvokeCompletedEvent();
            }
        }
        private IEnumerator DownloadAssetPackCo()
        {
#if PLAY_ASSET_DELIVERY_EXPERIMENTAL
            _request           = PlayAssetDelivery.RetrieveAssetPackAsync(AssetPackName);
            _requestInProgress = true;

            while (!_request.IsDone)
            {
                if (_request.Status == AssetDeliveryStatus.WaitingForWifi)
                {
                    // Wait until user has confirmed or cancelled the dialog.
                    var asyncOperation = PlayAssetDelivery.ShowCellularDataConfirmation();
                    yield return(asyncOperation);

                    if (asyncOperation.Error != AssetDeliveryErrorCode.NoError ||
                        asyncOperation.GetResult() != ConfirmationDialogResult.Accepted)
                    {
                        // Provide a button to re-show the dialog in case user changes their mind.
                        Display.SetStatus(_request.Status, _request.Error);
                    }

                    yield return(new WaitUntil(() => _request.Status != AssetDeliveryStatus.WaitingForWifi));
                }

                Display.SetProgress(_request.DownloadProgress);
                Display.SetStatus(_request.Status, _request.Error);

                yield return(null);
            }

            Display.SetProgress(_request.DownloadProgress);
            Display.SetStatus(_request.Status, _request.Error);

            if (_request.Error != AssetDeliveryErrorCode.NoError)
            {
                Debug.LogErrorFormat("Couldn't load asset pack: {0}", _request.Error);
                _request = null;
            }

            _requestInProgress = false;
#else
            // Assign values to avoid unassigned variable warning.
            _request           = null;
            _requestInProgress = false;
            throw new Exception("Experimental Play Asset Delivery methods are disabled.");
#endif
        }
Exemple #10
0
    private void UpdateDownloading()
    {
        if (infoStatus != AssetPackInfoStatus.PACKSTATUS_DOWNLOADING)
        {
            infoStatus = AssetPackInfoStatus.PACKSTATUS_DOWNLOADING;
            SetupDownloadUI();
        }

        AssetDeliveryStatus deliveryStatus = gameAssetPack.GetStatus();

        if (deliveryStatus == AssetDeliveryStatus.Failed)
        {
            SetupErrorUI();
        }
        else if (deliveryStatus == AssetDeliveryStatus.Loaded ||
                 deliveryStatus == AssetDeliveryStatus.Available)
        {
            if (gameAssetPack.IsSingleAssetBundlePack)
            {
                AssetBundle newBundle = gameAssetPack.FinishBundleDownload();
                StartCoroutine(LoadAssetsFromBundle(newBundle));
            }
            else
            {
                PlayAssetPackRequest packRequest =
                    gameAssetPack.FinishPackDownload();
                LoadAssetsFromPack(packRequest);
            }
        }
        else if (deliveryStatus == AssetDeliveryStatus.Loading)
        {
            assetPackStatusLabel.text            = "Loading";
            assetPackProgressBar.PercentComplete = 1.0f;
        }
        else if (deliveryStatus == AssetDeliveryStatus.Retrieving)
        {
            assetPackProgressBar.PercentComplete =
                gameAssetPack.GetDownloadProgress();
        }
        else if (deliveryStatus == AssetDeliveryStatus.WaitingForWifi)
        {
            Debug.Log("Download status WaitingForWifi");
            infoStatus = AssetPackInfoStatus.PACKSTATUS_NEEDS_PERMISSION;
            waitingOnPermissionResult = true;
            gameAssetPack.RequestCellularDataDownload();
        }
    }
Exemple #11
0
        private void BeginOperation(string assetPackName)
        {
            Debug.LogFormat("[{0}.{1}] assetPackName={2}", nameof(AssetPackBundleSyncResource), nameof(BeginOperation), assetPackName);
            playAssetPackRequest = PlayAssetDelivery.RetrieveAssetPackAsync(assetPackName);
            Exception exception = null;

            if (playAssetPackRequest.IsDone)
            {
                var assetLocation = playAssetPackRequest.GetAssetLocation(assetPackName);
                assetBundle = AssetBundle.LoadFromFile(assetLocation.Path, /* crc= */ 0, assetLocation.Offset);
            }
            else
            {
                exception = new Exception($"Asset Pack was not retrieved Synchronously: '{assetPackName}'.");
            }
            CompletedEvent?.Invoke(this, assetBundle != null, exception);
        }
        private void OnPlayAssetPackRequestCompleted(string assetPackName, PlayAssetPackRequest request)
        {
            if (request.Error != AssetDeliveryErrorCode.NoError)
            {
                CompletedEvent?.Invoke(this, false, new Exception($"Error downloading error pack: {request.Error}"));
                return;
            }
            if (request.Status != AssetDeliveryStatus.Available)
            {
                CompletedEvent?.Invoke(this, false, new Exception($"Error downloading status: {request.Status}"));
                return;
            }
            var assetLocation = request.GetAssetLocation(assetPackName);

            requestOperation            = AssetBundle.LoadFromFileAsync(assetLocation.Path, /* crc= */ 0, assetLocation.Offset);
            requestOperation.completed += LocalRequestOperationCompleted;
        }
        private IEnumerator DownloadAssetPackCo()
        {
            _request           = PlayAssetDelivery.RetrieveAssetPackAsync(AssetPackName);
            _requestInProgress = true;

            while (!_request.IsDone)
            {
                if (_request.Status == AssetDeliveryStatus.WaitingForWifi)
                {
                    // Wait until user has confirmed or cancelled the dialog.
                    var asyncOperation = PlayAssetDelivery.ShowCellularDataConfirmation();
                    yield return(asyncOperation);

                    if (asyncOperation.Error != AssetDeliveryErrorCode.NoError ||
                        asyncOperation.GetResult() != ConfirmationDialogResult.Accepted)
                    {
                        // Provide a button to re-show the dialog in case user changes their mind.
                        Display.SetStatus(_request.Status, _request.Error);
                    }

                    yield return(new WaitUntil(() => _request.Status != AssetDeliveryStatus.WaitingForWifi));
                }

                Display.SetProgress(_request.DownloadProgress);
                Display.SetStatus(_request.Status, _request.Error);

                yield return(null);
            }

            Display.SetProgress(_request.DownloadProgress);
            Display.SetStatus(_request.Status, _request.Error);

            if (_request.Error != AssetDeliveryErrorCode.NoError)
            {
                Debug.LogErrorFormat("Couldn't load asset pack: {0}", _request.Error);
                _request = null;
            }

            _requestInProgress = false;
        }
Exemple #14
0
        private void OnPlayAssetPackRequestCompleted(string assetPackName, PlayAssetPackRequest request)
        {
            if (request.Error != AssetDeliveryErrorCode.NoError)
            {
                CompleteOperation(this, $"Error downloading error pack: {request.Error}");
                return;
            }
            if (request.Status != AssetDeliveryStatus.Available)
            {
                CompleteOperation(this, $"Error downloading status: {request.Status}");
                return;
            }
            var assetLocation = request.GetAssetLocation(assetPackName);

            m_RequestOperation = AssetBundle.LoadFromFileAsync(assetLocation.Path, /* crc= */ 0, assetLocation.Offset);
            if (m_RequestOperation.isDone)
            {
                LocalMRequestOperationCompleted(m_RequestOperation);
                return;
            }
            m_RequestOperation.completed += LocalMRequestOperationCompleted;
        }
 private void BeginOperation(string assetPackName)
 {
     Debug.LogFormat("[{0}.{1}] assetPackName={2}", nameof(AssetPackBundleAsyncResource), nameof(BeginOperation), assetPackName);
     playAssetPackRequest            = PlayAssetDelivery.RetrieveAssetPackAsync(assetPackName);
     playAssetPackRequest.Completed += request => OnPlayAssetPackRequestCompleted(assetPackName, request);
 }