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;
270 internal bool HasLoadingImages()
272 return this._numLoadingImages > 0;
275 internal IEnumerator LoadImage(
string url)
277 int index = this._images.Count;
282 Texture2D texture =
new Texture2D(1, 1);
283 this._images.Add(texture);
285 if (url.LastIndexOf(base64Prefix, base64Prefix.Length) == 0)
289 string byteString = url.Substring(base64Prefix.Length);
290 byte[] bytes = Convert.FromBase64String(byteString);
291 if (!texture.LoadImage(bytes))
293 Debug.Log(
"Could not parse image from base64 string.");
299 UnityWebRequest request = UnityWebRequestTexture.GetTexture(url);
300 this._numLoadingImages++;
301 yield
return request.SendWebRequest();
303 if (request.result == UnityWebRequest.Result.ConnectionError ||
304 request.result == UnityWebRequest.Result.ProtocolError)
306 Debug.Log(request.error);
310 texture = ((DownloadHandlerTexture)request.downloadHandler).texture;
312 Texture2D placeholderTexture = this._images[index];
313 this._images[index] = texture;
314 UnityLifetime.Destroy(placeholderTexture);
317 this._numLoadingImages--;
320 texture.wrapMode = TextureWrapMode.Clamp;