# Team Perception Visualization System ## Overview The Team Perception Visualization System displays a semi-transparent purple circle around the team marker in MapScene2 to represent the team's collective perception range. The circle radius is based on the highest perception value among all team members. ## Features ### 🔮 Visual Perception Range - **Purple Circle**: 50% transparent purple circle around team marker - **Dynamic Radius**: Based on highest team member perception value - **Real-time Updates**: Updates when team composition or perception changes - **Customizable**: Color, size multiplier, and other settings can be adjusted ### 🎯 Smart Team Detection - **Multiple Sources**: Gets team data from MainTeamSelectScript or GameStateManager - **Automatic Updates**: Monitors team changes and updates visualization - **Fallback Support**: Works even if team data is only in save file ### ⚙️ Easy Setup - **Automatic Setup**: Just add TeamPerceptionSetup component to any GameObject - **Inspector Configuration**: All settings available in Unity Inspector - **Debug Tools**: Built-in verification and debug tools ## Setup Instructions ### Method 1: Automatic Setup (Recommended) 1. **Open MapScene2** in Unity 2. **Create Empty GameObject**: - Right-click in Hierarchy → Create Empty - Name it "PerceptionSystem" 3. **Add Setup Component**: - Select the new GameObject - In Inspector, click "Add Component" - Search for "TeamPerceptionSetup" and add it 4. **Configure Settings** (optional): - Adjust color if you want different from purple - Modify perception multiplier to change circle size - Enable/disable debug logging 5. **Play the Scene**: The system will automatically set up when the scene starts ### Method 2: Manual Setup 1. **Find SimpleTeamPlacement**: Locate the existing SimpleTeamPlacement object in your scene 2. **Add Visualizer Component**: Add TeamPerceptionVisualizer component to the same GameObject 3. **Configure Settings**: Adjust the settings in the Inspector as needed ## Configuration Options ### TeamPerceptionSetup Settings - **Auto Setup On Start**: Automatically sets up the system when scene starts - **Enable Perception Visualization**: Toggle to show/hide the perception circle - **Perception Color**: Color of the circle (default: 50% transparent purple) - **Perception Multiplier**: How large the circle is relative to perception value (default: 0.2) - **Custom Material**: Optional material for advanced circle styling - **Show Debug Info**: Enable debug logging for troubleshooting ### TeamPerceptionVisualizer Settings (Advanced) - **Circle Segments**: Resolution of the circle (higher = smoother) - **Height Offset**: How high above ground the circle appears - **Update Interval**: How often to check for perception changes - **Update In Real Time**: Whether to continuously monitor for changes ## How It Works ### Perception Calculation 1. **Scans Team Members**: Checks all current team members 2. **Finds Highest Perception**: Uses the highest `FinalPerception` value (includes equipment bonuses) 3. **Calculates Radius**: `radius = highestPerception * perceptionMultiplier` 4. **Positions Circle**: Centers the circle on the team marker position ### Team Data Sources The system gets team information from multiple sources: 1. **MainTeamSelectScript.teamMembers** (if available in current scene) 2. **GameStateManager.savedTeam** (fallback from save data) ### Visual Updates - **Team Changes**: Updates when team composition changes - **Equipment Changes**: Updates when perception-affecting equipment is added/removed - **Position Changes**: Follows the team marker when it moves - **Real-time**: Checks for changes every second (configurable) ## Usage Examples ### Basic Setup ```csharp // The setup component handles everything automatically // Just add TeamPerceptionSetup to any GameObject and it will work ``` ### Runtime Control ```csharp // Get the setup component TeamPerceptionSetup setup = FindObjectOfType(); // Change color to blue with 30% transparency setup.SetPerceptionColor(new Color(0f, 0f, 1f, 0.3f)); // Make circles larger setup.SetPerceptionMultiplier(0.4f); // Toggle visualization setup.SetPerceptionVisualizationEnabled(false); ``` ### Advanced Customization ```csharp // Get the visualizer directly for advanced control TeamPerceptionVisualizer visualizer = FindObjectOfType(); // Force an immediate update visualizer.ForceUpdatePerception(); // Show debug information visualizer.ShowPerceptionDebugInfo(); ``` ## Debug Tools ### Inspector Context Menus Right-click on the components in Inspector to access: **TeamPerceptionSetup**: - "Setup Perception Visualization" - Manually trigger setup - "Verify Perception System" - Check if everything is working - "Force Refresh Perception" - Update visualization immediately **TeamPerceptionVisualizer**: - "Show Perception Debug Info" - Display detailed team perception data ### Console Output With debug logging enabled, you'll see messages like: ``` TeamPerceptionVisualizer: Updated perception circle - Max Perception: 15, Radius: 3.0 === Team Perception Debug Info === Team Members Count: 4 - Alice: Perception 15 (Base: 12, Modifier: 3) - Bob: Perception 10 (Base: 10, Modifier: 0) - Carol: Perception 14 (Base: 14, Modifier: 0) - Dave: Perception 8 (Base: 8, Modifier: 0) Highest Perception: 15 (Alice) Circle Radius: 3.0 units ``` ## Troubleshooting ### Circle Not Appearing 1. **Check Team Data**: Verify you have team members with perception > 0 2. **Check Team Marker**: Ensure SimpleTeamPlacement has placed the team marker 3. **Run Verification**: Use "Verify Perception System" context menu 4. **Check Console**: Look for error messages ### Circle Wrong Size 1. **Adjust Multiplier**: Increase perceptionMultiplier for larger circles 2. **Check Perception Values**: Use debug info to see actual perception values 3. **Verify Calculation**: radius = highestPerception × multiplier ### Circle Wrong Position 1. **Check Team Marker**: Ensure team marker is correctly positioned 2. **Verify SimpleTeamPlacement**: Make sure it's working properly 3. **Check Console**: Look for position-related debug messages ### Team Data Not Found 1. **Create Team**: Make sure you've created team members in Team Select scene 2. **Save Game**: Ensure team data is saved to GameStateManager 3. **Check Sources**: Verify MainTeamSelectScript or GameStateManager has team data ## Integration with Existing Systems ### Compatible With - ✅ **SimpleTeamPlacement**: Uses team marker position automatically - ✅ **GameStateManager**: Reads saved team data - ✅ **MainTeamSelectScript**: Reads current team composition - ✅ **TeamCharacter System**: Uses FinalPerception property - ✅ **Equipment System**: Automatically includes perception equipment bonuses ### Performance Notes - **Efficient Updates**: Only updates when perception actually changes - **Configurable Frequency**: Update interval can be adjusted for performance - **Memory Friendly**: Minimal memory footprint - **Scene Integration**: Works seamlessly with existing map systems ## Future Enhancements Possible improvements: - **Gradient Colors**: Different colors based on perception level - **Multiple Circles**: Show individual team member perception ranges - **Animated Effects**: Pulsing or rotating circle animations - **Terrain Integration**: Different visibility based on terrain type - **Minimap Integration**: Show perception range on minimap ## Files Created 1. **`Assets/Scripts/Map/TeamPerceptionVisualizer.cs`**: Main visualization component 2. **`Assets/Scripts/Map/TeamPerceptionSetup.cs`**: Easy setup and configuration script 3. **Enhanced `Assets/Scripts/Map/SimpleTeamPlacement.cs`**: Added team marker access properties ## Example Team Perception Values With default settings (multiplier = 0.2): - **Perception 10**: 2.0 unit radius circle - **Perception 15**: 3.0 unit radius circle - **Perception 20**: 4.0 unit radius circle - **Perception 25**: 5.0 unit radius circle (high-perception scouts) The system automatically uses the highest perception value among all team members, so having one high-perception scout will give the entire team a large detection radius.