99 private List<CesiumCredit> _onScreenCredits;
100 private List<CesiumCredit> _popupCredits;
101 private List<Texture2D> _images;
102 private int _numLoadingImages = 0;
104 const string base64Prefix =
"data:image/png;base64,";
105 const string defaultName =
"CesiumCreditSystemDefault";
106 const string creditSystemPrefabName =
"CesiumCreditSystem";
108 #region Fields and Events
112 internal List<CesiumCredit> onScreenCredits
114 get => this._onScreenCredits;
121 internal List<CesiumCredit> popupCredits
123 get => this._popupCredits;
129 internal List<Texture2D> images
140 internal delegate
void CreditsUpdateDelegate(List<CesiumCredit> onScreenCredits, List<CesiumCredit> onPopupCredits);
150 internal event CreditsUpdateDelegate OnCreditsUpdate;
153 #region Unity Messages
155 private void OnEnable()
157 this._onScreenCredits =
new List<CesiumCredit>();
158 this._popupCredits =
new List<CesiumCredit>();
159 this._images =
new List<Texture2D>();
161 Cesium3DTileset.OnSetShowCreditsOnScreen += this.ForceUpdateCredits;
163 EditorSceneManager.sceneClosing += HandleClosingSceneView;
167 private void Update()
169 this.UpdateCredits(
false);
172 private void OnDestroy()
174 Cesium3DTileset.OnSetShowCreditsOnScreen -= this.ForceUpdateCredits;
176 for (
int i = 0, count = this._images.Count; i < count; i++)
178 if (this._images !=
null)
180 UnityLifetime.Destroy(this._images[i]);
184 this._images.Clear();
186 if (_defaultCreditSystem ==
this)
188 _defaultCreditSystem =
null;
196 private void OnApplicationQuit()
198 UnityLifetime.Destroy(this.gameObject);
207 private void ForceUpdateCredits()
209 this.UpdateCredits(
true);
216 private partial
void UpdateCredits(
bool forceUpdate);
218 internal void BroadcastCreditsUpdate()
220 if (this.OnCreditsUpdate !=
null)
222 this.OnCreditsUpdate(this._onScreenCredits, this._popupCredits);
237 GameObject creditSystemPrefab = Resources.Load<GameObject>(creditSystemPrefabName);
238 GameObject creditSystemGameObject = UnityEngine.Object.Instantiate(creditSystemPrefab);
239 creditSystemGameObject.name = defaultName;
240 creditSystemGameObject.hideFlags = HideFlags.HideAndDontSave;
251 if (_defaultCreditSystem ==
null)
254 for (
int i = 0; i < creditSystems.Length; i++)
256 if (creditSystems[i].gameObject.name == defaultName)
258 _defaultCreditSystem = creditSystems[i];
264 if (_defaultCreditSystem ==
null)
266 _defaultCreditSystem = CreateDefaultCreditSystem();
269 return _defaultCreditSystem;
272 internal bool HasLoadingImages()
274 return this._numLoadingImages > 0;
277 internal IEnumerator LoadImage(
string url)
279 int index = this._images.Count;
284 Texture2D texture =
new Texture2D(1, 1);
285 this._images.Add(texture);
287 if (url.LastIndexOf(base64Prefix, base64Prefix.Length) == 0)
291 string byteString = url.Substring(base64Prefix.Length);
292 byte[] bytes = Convert.FromBase64String(byteString);
293 if (!texture.LoadImage(bytes))
295 Debug.Log(
"Could not parse image from base64 string.");
301 UnityWebRequest request = UnityWebRequestTexture.GetTexture(url);
302 this._numLoadingImages++;
303 yield
return request.SendWebRequest();
305 if (request.result == UnityWebRequest.Result.ConnectionError ||
306 request.result == UnityWebRequest.Result.ProtocolError)
308 Debug.Log(request.error);
312 texture = ((DownloadHandlerTexture)request.downloadHandler).texture;
314 Texture2D placeholderTexture = this._images[index];
315 this._images[index] = texture;
316 UnityLifetime.Destroy(placeholderTexture);
319 this._numLoadingImages--;
322 texture.wrapMode = TextureWrapMode.Clamp;
334 private static void HandleClosingSceneView(Scene scene,
bool removingScene)
336 if (_defaultCreditSystem !=
null && _defaultCreditSystem.gameObject.scene == scene)
338 UnityLifetime.Destroy(_defaultCreditSystem.gameObject);