100 private List<CesiumCredit> _onScreenCredits;
101 private List<CesiumCredit> _popupCredits;
102 private List<Texture2D> _images;
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 =
new List<CesiumCredit>();
159 this._popupCredits =
new List<CesiumCredit>();
160 this._images =
new List<Texture2D>();
162 Cesium3DTileset.OnSetShowCreditsOnScreen += this.ForceUpdateCredits;
165 private void Update()
167 this.UpdateCredits(
false);
170 private void OnDestroy()
172 Cesium3DTileset.OnSetShowCreditsOnScreen -= this.ForceUpdateCredits;
174 for (
int i = 0, count = this._images.Count; i < count; i++)
176 if (this._images !=
null)
178 UnityLifetime.Destroy(this._images[i]);
182 this._images.Clear();
184 if (
this == _defaultCreditSystem)
186 _defaultCreditSystem =
null;
194 private void OnApplicationQuit()
196 UnityLifetime.Destroy(this.gameObject);
205 private void ForceUpdateCredits()
207 this.UpdateCredits(
true);
214 private partial
void UpdateCredits(
bool forceUpdate);
216 internal void BroadcastCreditsUpdate()
218 if (this.OnCreditsUpdate !=
null)
220 this.OnCreditsUpdate(this._onScreenCredits, this._popupCredits);
235 GameObject creditSystemPrefab = Resources.Load<GameObject>(creditSystemPrefabName);
236 GameObject creditSystemGameObject = UnityEngine.Object.Instantiate(creditSystemPrefab);
237 creditSystemGameObject.name = defaultName;
238 creditSystemGameObject.hideFlags = HideFlags.HideAndDontSave;
249 if (_defaultCreditSystem ==
null)
252 for (
int i = 0; i < creditSystems.Length; i++)
254 if (creditSystems[i].gameObject.name == defaultName)
256 _defaultCreditSystem = creditSystems[i];
262 if (_defaultCreditSystem ==
null)
264 _defaultCreditSystem = CreateDefaultCreditSystem();
267 return _defaultCreditSystem;
274 internal int GetNumberOfLoadingImages()
276 return this._numLoadingImages;
283 internal IEnumerator LoadImage(
string url)
285 int index = this._images.Count;
286 this._numLoadingImages++;
291 Texture2D texture =
new Texture2D(1, 1);
292 this._images.Add(texture);
294 if (url.LastIndexOf(base64Prefix, base64Prefix.Length) == 0)
298 string byteString = url.Substring(base64Prefix.Length);
301 byte[] bytes = Convert.FromBase64String(byteString);
302 if (!texture.LoadImage(bytes))
304 Debug.Log(
"Credit image could not be loaded into Texture2D.");
307 catch (FormatException e)
309 Debug.Log(
"Could not parse credit image from base64 string.");
315 UnityWebRequest request = UnityWebRequestTexture.GetTexture(url);
316 yield
return request.SendWebRequest();
318 if (request.result == UnityWebRequest.Result.ConnectionError ||
319 request.result == UnityWebRequest.Result.ProtocolError)
321 Debug.LogError(request.error);
325 texture = ((DownloadHandlerTexture)request.downloadHandler).texture;
327 Texture2D placeholderTexture = this._images[index];
328 this._images[index] = texture;
329 UnityLifetime.Destroy(placeholderTexture);
334 texture.wrapMode = TextureWrapMode.Clamp;
335 this._numLoadingImages--;