100 private List<CesiumCredit> _onScreenCredits =
new List<CesiumCredit>();
101 private List<CesiumCredit> _popupCredits =
new List<CesiumCredit>();
102 private List<Texture2D> _images =
new List<Texture2D>();
103 private int _numLoadingImages = 0;
105 const string base64Prefix =
"data:image/png;base64,";
106 const string creditSystemPrefabName =
"CesiumCreditSystem";
107 const string defaultName =
"CesiumCreditSystemDefault";
109 #region Fields and Events
113 internal List<CesiumCredit> onScreenCredits
115 get => this._onScreenCredits;
122 internal List<CesiumCredit> popupCredits
124 get => this._popupCredits;
130 internal List<Texture2D> images
141 internal delegate
void CreditsUpdateDelegate(List<CesiumCredit> onScreenCredits, List<CesiumCredit> onPopupCredits);
151 internal event CreditsUpdateDelegate OnCreditsUpdate;
154 #region Unity Messages
156 private void OnEnable()
158 this._onScreenCredits.Clear();
159 this._popupCredits.Clear();
162 Cesium3DTileset.OnSetShowCreditsOnScreen += this.ForceUpdateCredits;
165 private void Update()
167 this.UpdateCredits(
false);
170 private void OnDisable()
172 this._onScreenCredits.Clear();
173 this._popupCredits.Clear();
176 Cesium3DTileset.OnSetShowCreditsOnScreen -= this.ForceUpdateCredits;
179 private void OnDestroy()
181 if (
this == _defaultCreditSystem)
183 _defaultCreditSystem =
null;
191 private void OnApplicationQuit()
193 UnityLifetime.Destroy(this.gameObject);
202 private void ForceUpdateCredits()
204 this.UpdateCredits(
true);
211 private partial
void UpdateCredits(
bool forceUpdate);
213 internal void BroadcastCreditsUpdate()
215 if (this.OnCreditsUpdate !=
null)
217 this.OnCreditsUpdate(this._onScreenCredits, this._popupCredits);
232 GameObject creditSystemPrefab = Resources.Load<GameObject>(creditSystemPrefabName);
233 GameObject creditSystemGameObject = UnityEngine.Object.Instantiate(creditSystemPrefab);
234 creditSystemGameObject.name = defaultName;
235 creditSystemGameObject.hideFlags = HideFlags.HideAndDontSave;
246 if (_defaultCreditSystem ==
null)
249 for (
int i = 0; i < creditSystems.Length; i++)
251 if (creditSystems[i].gameObject.name == defaultName)
253 _defaultCreditSystem = creditSystems[i];
259 if (_defaultCreditSystem ==
null)
261 _defaultCreditSystem = CreateDefaultCreditSystem();
264 return _defaultCreditSystem;
271 internal int GetNumberOfLoadingImages()
273 return this._numLoadingImages;
280 internal IEnumerator LoadImage(
string url)
282 int index = this._images.Count;
283 this._numLoadingImages++;
288 Texture2D texture =
new Texture2D(1, 1);
289 this._images.Add(texture);
291 if (url.LastIndexOf(base64Prefix, base64Prefix.Length) == 0)
295 string byteString = url.Substring(base64Prefix.Length);
298 byte[] bytes = Convert.FromBase64String(byteString);
299 if (!texture.LoadImage(bytes))
301 Debug.Log(
"Credit image could not be loaded into Texture2D.");
304 catch (FormatException)
306 Debug.Log(
"Could not parse credit image from base64 string.");
312 UnityWebRequest request = UnityWebRequestTexture.GetTexture(url);
313 yield
return request.SendWebRequest();
315 if (request.result == UnityWebRequest.Result.ConnectionError ||
316 request.result == UnityWebRequest.Result.ProtocolError)
318 Debug.LogError(request.error);
322 texture = ((DownloadHandlerTexture)request.downloadHandler).texture;
324 Texture2D placeholderTexture = this._images[index];
325 this._images[index] = texture;
326 UnityLifetime.Destroy(placeholderTexture);
331 texture.wrapMode = TextureWrapMode.Clamp;
332 this._numLoadingImages--;
335 private void ClearImages()
337 for (
int i = 0, count = this._images.Count; i < count; i++)
339 UnityLifetime.Destroy(this._images[i]);
342 this._images.Clear();