diff --git a/Assets/Scripts/UI/FactExplorer/FactFavorisation.cs b/Assets/Scripts/UI/FactExplorer/FactFavorisation.cs index 3de65219a967d43d3e8b0dc375eea864a3d37114..b439daf1376f1993c7ed3143c9e4f9d49b327930 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 }