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