From 4f816c22f1a92c666ca2032ff9e9d596052c148e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20Sch=C3=B6ner?= <tobias.stonehead@gmail.com> Date: Fri, 13 Jan 2023 01:27:49 +0100 Subject: [PATCH] fix: surplus favoriteDisplays caused by cloning will be deleted now --- .../UI/FactExplorer/FactFavorisation.cs | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/Assets/Scripts/UI/FactExplorer/FactFavorisation.cs b/Assets/Scripts/UI/FactExplorer/FactFavorisation.cs index 3de65219..b439daf1 100644 --- a/Assets/Scripts/UI/FactExplorer/FactFavorisation.cs +++ b/Assets/Scripts/UI/FactExplorer/FactFavorisation.cs @@ -13,7 +13,7 @@ public class FactFavorisation : MonoBehaviour, IPointerClickHandler #endregion InspectorVariables #region Static Variables - private static readonly UnityEvent<Fact, bool> ChangeFavoriteEvent = new(); + public static readonly UnityEvent<Fact, bool> ChangeFavoriteEvent = new(); private static readonly List<Fact> favorites = new(); #endregion Static Variables @@ -53,32 +53,34 @@ private void Start() fact = transform.GetComponent<FactWrapper>().fact; ChangeFavoriteEvent.AddListener(OnFavoriteChange); + // if there already was a favoriteDisplayPrefab child (e.g. due to cloning) remove it + gameObject.ForAllChildren(child => { + if (child.name.StartsWith(favoriteDisplayPrefab.name)) + Destroy(child); + }); + // instantiate new favoriteDisplay + favoriteDisplay = Instantiate(favoriteDisplayPrefab, transform); + // check if fact is currenty a favorite - if (favorites.Contains(fact)) - { - isFavorite = true; - UpdateDisplay(); - } + isFavorite = favorites.Contains(fact); + + UpdateDisplay(); } #endregion UnityMethods #region Implementation - private void OnFavoriteChange(Fact changedFact, bool isFavourite) + private void OnFavoriteChange(Fact changedFact, bool isFavorite) { if (fact == changedFact) { - this.isFavorite = isFavourite; + this.isFavorite = isFavorite; UpdateDisplay(); } } private void UpdateDisplay() { - if (!isFavorite) - Destroy(favoriteDisplay); - else - if (!favoriteDisplay) - favoriteDisplay = Instantiate(favoriteDisplayPrefab, transform); + favoriteDisplay.SetActive(isFavorite); } #endregion Implementation } -- GitLab