void AssetReferer.ReferAsset(AssetUnitInfo assetUnitInfo, AssetReferenceListener listener) { foreach (var referer in referers) { var listenerWrapper = new PrvtAssetReferenceListener { clientListener = listener }; referer.ReferAsset(assetUnitInfo, listenerWrapper); if (listenerWrapper.didBegin) { return; } } }
void Giver <AssetInterface, AssetUnitInfo> .PickBestElement(AssetUnitInfo assetUnitInfo, Taker <AssetInterface> collector) { requestCount++; var localAUInfo = localizedAssetInfoGiver.PickBestElement(assetUnitInfo); //already localized if (localAUInfo != null) { CheckDependencyAndCollectInterface(localAUInfo, collector); } //localref is empty = it's newly generated asset else if (Utilities.IsStringEmpty(assetUnitInfo.localref)) { var generatedLocalAssetInfo = assetUnitInfo; assetUnitInfo.localref = EditTimeAssetUtils.LocalAssetRefForGenerated(assetUnitInfo); CheckDependencyAndCollectInterface(assetUnitInfo, collector, true); } //it's remote asset else { var refListener = new PrvtAssetReferenceListener { baseAssetUnitInfo = assetUnitInfo, interfaceTaker = collector, parent = this }; //someone want to controll download timing if (installListener != null) { installListener.OnInstallRemoteAsset(assetUnitInfo, new PrvtDelayedAssetRefTrigger { client = this, assetUnitInfo = assetUnitInfo, refListener = refListener }); } else { remoteAssetReferer.ReferAsset(assetUnitInfo, refListener); } } }