Selaa lähdekoodia

Toggle to enable/disable perception Visualization

Axel Nordh 8 kuukautta sitten
vanhempi
sitoutus
791de11ecd

+ 16 - 0
Assets/Resources/UI/MapScene/TeamOverview.uss

@@ -159,6 +159,22 @@
     color: rgb(20, 20, 20);
 }
 
+.perception-toggle {
+    font-size: 12px;
+    color: rgb(80, 80, 80);
+    margin-top: 8px;
+    padding: 4px;
+}
+
+.perception-toggle .unity-toggle__checkmark {
+    background-color: rgb(70, 130, 180);
+    border-color: rgb(100, 100, 100);
+}
+
+.perception-toggle:checked .unity-toggle__checkmark {
+    background-color: rgb(50, 100, 150);
+}
+
 /* Responsive adjustments */
 @media (max-height: 600px) {
     .team-overview-container {

+ 3 - 0
Assets/Resources/UI/MapScene/TeamOverview.uxml

@@ -28,6 +28,9 @@
                 <ui:Label text="Avg Level: " class="stat-label" />
                 <ui:Label text="1" name="AverageLevelLabel" class="stat-value" />
             </ui:VisualElement>
+            <ui:VisualElement class="stats-row">
+                <ui:Toggle text="Show Perception Range" name="PerceptionVisualizationToggle" class="perception-toggle" value="true" />
+            </ui:VisualElement>
         </ui:VisualElement>
     </ui:VisualElement>
 </ui:UXML>

+ 27 - 1
Assets/Scripts/Map/TeamPerceptionVisualizer.cs

@@ -18,6 +18,7 @@ public class TeamPerceptionVisualizer : MonoBehaviour
     [Header("Dynamic Updates")]
     [SerializeField] private bool updatePerceptionInRealTime = true;
     [SerializeField] private float updateInterval = 1f; // How often to check for perception changes (in seconds)
+    [SerializeField] private bool isVisualizationEnabled = true; // Can be controlled by UI
 
     [Header("Debug")]
     [SerializeField] private bool showDebugInfo = true;
@@ -63,6 +64,9 @@ public class TeamPerceptionVisualizer : MonoBehaviour
         // Create the perception circle
         CreatePerceptionCircle();
 
+        // Load visualization state from PlayerPrefs
+        isVisualizationEnabled = PlayerPrefs.GetInt("ShowPerceptionVisualization", 1) == 1;
+
         // Initial position update with slight delay to ensure team marker is loaded
         StartCoroutine(DelayedInitialUpdate());
     }
@@ -81,6 +85,17 @@ public class TeamPerceptionVisualizer : MonoBehaviour
 
     void Update()
     {
+        // Early exit if visualization is disabled
+        if (!isVisualizationEnabled)
+        {
+            // Hide the circle if it's currently visible
+            if (perceptionCircleObject != null && perceptionCircleObject.activeSelf)
+            {
+                perceptionCircleObject.SetActive(false);
+            }
+            return;
+        }
+
         // Always update position to follow team marker
         UpdateCirclePosition();
 
@@ -359,9 +374,20 @@ public class TeamPerceptionVisualizer : MonoBehaviour
     /// <param name="enabled">Whether to show the perception circle</param>
     public void SetPerceptionVisualizationEnabled(bool enabled)
     {
+        isVisualizationEnabled = enabled;
+
         if (perceptionCircleObject != null)
         {
-            perceptionCircleObject.SetActive(enabled && GetHighestTeamPerception() > 0);
+            if (enabled)
+            {
+                // If enabling, trigger an update to show the circle if appropriate
+                UpdatePerceptionVisualization();
+            }
+            else
+            {
+                // If disabling, hide the circle immediately
+                perceptionCircleObject.SetActive(false);
+            }
         }
     }
 

+ 52 - 0
Assets/Scripts/UI/TeamOverviewController.cs

@@ -22,6 +22,7 @@ public class TeamOverviewController : MonoBehaviour
     private Label memberCountLabel;
     private Label totalGoldLabel;
     private Label averageLevelLabel;
+    private Toggle perceptionVisualizationToggle;
 
     // UI Document reference (shared with map)
     private UIDocument uiDocument;
@@ -73,6 +74,7 @@ public class TeamOverviewController : MonoBehaviour
         memberCountLabel = root.Q<Label>("MemberCountLabel");
         totalGoldLabel = root.Q<Label>("TotalGoldLabel");
         averageLevelLabel = root.Q<Label>("AverageLevelLabel");
+        perceptionVisualizationToggle = root.Q<Toggle>("PerceptionVisualizationToggle");
 
         // Debug: Check which elements were found
         if (showDebugLogs)
@@ -85,6 +87,7 @@ public class TeamOverviewController : MonoBehaviour
             Debug.Log($"   MemberCountLabel: {memberCountLabel != null}");
             Debug.Log($"   TotalGoldLabel: {totalGoldLabel != null}");
             Debug.Log($"   AverageLevelLabel: {averageLevelLabel != null}");
+            Debug.Log($"   PerceptionVisualizationToggle: {perceptionVisualizationToggle != null}");
         }
 
         // Setup event handlers
@@ -98,6 +101,19 @@ public class TeamOverviewController : MonoBehaviour
             saveGameButton.clicked += OnSaveGameClicked;
         }
 
+        if (perceptionVisualizationToggle != null)
+        {
+            // Load saved toggle state
+            bool savedState = PlayerPrefs.GetInt("ShowPerceptionVisualization", 1) == 1;
+            perceptionVisualizationToggle.value = savedState;
+
+            // Set up event handler
+            perceptionVisualizationToggle.RegisterValueChangedCallback(OnPerceptionVisualizationToggled);
+
+            // Apply initial state to visualizer
+            UpdatePerceptionVisualizationState(savedState);
+        }
+
         if (showDebugLogs)
         {
             Debug.Log("✅ TeamOverviewController: UI setup complete");
@@ -434,6 +450,42 @@ public class TeamOverviewController : MonoBehaviour
         }
     }
 
+    /// <summary>
+    /// Handle perception visualization toggle change
+    /// </summary>
+    private void OnPerceptionVisualizationToggled(ChangeEvent<bool> evt)
+    {
+        bool newValue = evt.newValue;
+
+        if (showDebugLogs)
+        {
+            Debug.Log($"👁️ TeamOverviewController: Perception visualization toggled to {newValue}");
+        }
+
+        // Save the setting
+        PlayerPrefs.SetInt("ShowPerceptionVisualization", newValue ? 1 : 0);
+        PlayerPrefs.Save();
+
+        // Update the visualizer
+        UpdatePerceptionVisualizationState(newValue);
+    }
+
+    /// <summary>
+    /// Updates the perception visualization state
+    /// </summary>
+    private void UpdatePerceptionVisualizationState(bool enabled)
+    {
+        var visualizer = TeamPerceptionVisualizer.Instance;
+        if (visualizer != null)
+        {
+            visualizer.SetPerceptionVisualizationEnabled(enabled);
+        }
+        else if (showDebugLogs)
+        {
+            Debug.LogWarning("⚠️ TeamPerceptionVisualizer instance not found");
+        }
+    }
+
     /// <summary>
     /// Refreshes the team data and display
     /// </summary>

+ 16 - 0
Assets/UI/MapScene/TeamOverview.uss

@@ -163,6 +163,22 @@
     color: rgb(20, 20, 20);
 }
 
+.perception-toggle {
+    font-size: 12px;
+    color: rgb(80, 80, 80);
+    margin-top: 8px;
+    padding: 4px;
+}
+
+.perception-toggle .unity-toggle__checkmark {
+    background-color: rgb(70, 130, 180);
+    border-color: rgb(100, 100, 100);
+}
+
+.perception-toggle:checked .unity-toggle__checkmark {
+    background-color: rgb(50, 100, 150);
+}
+
 /* Responsive adjustments */
 @media (max-height: 600px) {
     .team-overview-container {

+ 3 - 0
Assets/UI/MapScene/TeamOverview.uxml

@@ -28,6 +28,9 @@
                 <ui:Label text="Avg Level: " class="stat-label" />
                 <ui:Label text="1" name="AverageLevelLabel" class="stat-value" />
             </ui:VisualElement>
+            <ui:VisualElement class="stats-row">
+                <ui:Toggle text="Show Perception Range" name="PerceptionVisualizationToggle" class="perception-toggle" value="true" />
+            </ui:VisualElement>
         </ui:VisualElement>
     </ui:VisualElement>
 </ui:UXML>