using UnityEngine; /// /// Quick fix to properly setup SettlementInteractionManager references /// Run this in play mode to fix the settlement interaction system /// public class SettlementInteractionFixer : MonoBehaviour { [Header("Fix Settlement Interaction")] [Space] [TextArea(3, 5)] public string instructions = "1. Run this in Play Mode\n2. Click 'Fix Settlement Interaction' button\n3. Move TeamMarker near settlements\n4. Press E to enter"; [ContextMenu("Fix Settlement Interaction")] public void FixSettlementInteraction() { Debug.Log("=== Fixing Settlement Interaction ==="); // Find components var settlementManager = FindFirstObjectByType(); var teamMarker = GameObject.Find("TeamMarker"); var mapMaker = FindFirstObjectByType(); if (settlementManager == null) { Debug.LogError("❌ SettlementInteractionManager not found! Create it first."); return; } // Fix TeamMarker reference if (teamMarker != null) { settlementManager.SetTeamMarker(teamMarker.transform); Debug.Log("✅ TeamMarker reference set"); } else { Debug.LogError("❌ TeamMarker GameObject not found!"); } // Check MapMaker2 and MapData if (mapMaker != null) { var mapData = mapMaker.GetMapData(); if (mapData != null) { var settlements = mapData.GetAllSettlements(); Debug.Log($"✅ MapData found with {settlements?.Count ?? 0} settlements"); } else { Debug.LogError("❌ MapData is null!"); } } else { Debug.LogError("❌ MapMaker2 not found!"); } // Force enable debug logging settlementManager.enableDebugLogs = true; Debug.Log("✅ Debug logging enabled"); // Test current position if (teamMarker != null) { Vector3 teamPos = teamMarker.transform.position; Debug.Log($"📍 TeamMarker position: {teamPos}"); // Force check for nearby settlements var currentSettlement = settlementManager.GetCurrentNearbySettlement(); Debug.Log($"🏠 Current nearby settlement: {(currentSettlement?.name ?? "None")}"); } Debug.Log("=== Fix Complete ==="); Debug.Log("Now move TeamMarker near a settlement and press E"); } [ContextMenu("Test Settlement Detection")] public void TestSettlementDetection() { var settlementManager = FindFirstObjectByType(); var teamMarker = GameObject.Find("TeamMarker"); var mapMaker = FindFirstObjectByType(); if (settlementManager == null || teamMarker == null || mapMaker == null) { Debug.LogError("Missing components for testing!"); return; } Vector2 teamWorldPos = new Vector2(teamMarker.transform.position.x, teamMarker.transform.position.z); Debug.Log($"🎯 TeamMarker world position: {teamWorldPos}"); // Convert to map coordinates manually to check conversion float tileSize = 1f; var mapVisualizer = FindFirstObjectByType(); if (mapVisualizer != null && mapVisualizer.tileSize > 0) { tileSize = mapVisualizer.tileSize; Debug.Log($"📏 MapVisualizer tile size: {tileSize}"); } else { Debug.LogWarning("⚠️ MapVisualizer not found, using default tile size 1.0"); } Vector2Int mapPos = new Vector2Int( Mathf.RoundToInt(teamWorldPos.x / tileSize), Mathf.RoundToInt(teamWorldPos.y / tileSize) ); Debug.Log($"🗺️ Converted map position: {mapPos}"); // Test different coordinate interpretations Vector2Int mapPosFloor = new Vector2Int( Mathf.FloorToInt(teamWorldPos.x / tileSize), Mathf.FloorToInt(teamWorldPos.y / tileSize) ); Vector2Int mapPosCeil = new Vector2Int( Mathf.CeilToInt(teamWorldPos.x / tileSize), Mathf.CeilToInt(teamWorldPos.y / tileSize) ); Debug.Log($"🔍 Alternative positions - Floor: {mapPosFloor}, Ceil: {mapPosCeil}"); // Check settlements manually var mapData = mapMaker.GetMapData(); if (mapData != null) { var settlements = mapData.GetAllSettlements(); Debug.Log($"📊 Total settlements: {settlements?.Count ?? 0}"); if (settlements != null) { Debug.Log("🏘️ Checking all settlements:"); foreach (var settlement in settlements) { float distanceRound = Vector2Int.Distance(mapPos, settlement.position); float distanceFloor = Vector2Int.Distance(mapPosFloor, settlement.position); float distanceCeil = Vector2Int.Distance(mapPosCeil, settlement.position); Debug.Log($" '{settlement.name}' at {settlement.position}"); Debug.Log($" Round distance: {distanceRound:F2}"); Debug.Log($" Floor distance: {distanceFloor:F2}"); Debug.Log($" Ceil distance: {distanceCeil:F2}"); if (distanceRound <= 2f || distanceFloor <= 2f || distanceCeil <= 2f) { Debug.Log($"🎯 WITHIN RANGE: {settlement.name}"); // Test the exact method SettlementInteractionManager uses var foundSettlement = mapData.GetSettlementAt(mapPos, 2f); Debug.Log($"🔍 GetSettlementAt result: {foundSettlement?.name ?? "null"}"); } } // Try to find settlements around the exact position (122, 71) Debug.Log($"🔍 Checking exact position (122, 71):"); var exactSettlement = mapData.GetSettlementAt(new Vector2Int(122, 71), 2f); Debug.Log($" Settlement at (122, 71): {exactSettlement?.name ?? "None"}"); } } } [ContextMenu("Force Manual Entry")] public void ForceManualEntry() { var settlementManager = FindFirstObjectByType(); if (settlementManager != null) { settlementManager.TestEnterCurrentSettlement(); } else { Debug.LogError("SettlementInteractionManager not found!"); } } void Update() { // Show debug info on screen if (Input.GetKeyDown(KeyCode.F9)) { FixSettlementInteraction(); } if (Input.GetKeyDown(KeyCode.F10)) { TestSettlementDetection(); } if (Input.GetKeyDown(KeyCode.F11)) { ForceManualEntry(); } } void OnGUI() { GUILayout.BeginArea(new Rect(10, Screen.height - 150, 400, 140)); GUILayout.BeginVertical("box"); GUILayout.Label("Settlement Interaction Quick Fix", new GUIStyle(GUI.skin.label) { fontSize = 14, fontStyle = FontStyle.Bold }); if (GUILayout.Button("Fix Settlement Interaction (F9)")) { FixSettlementInteraction(); } if (GUILayout.Button("Test Settlement Detection (F10)")) { TestSettlementDetection(); } if (GUILayout.Button("Force Manual Entry (F11)")) { ForceManualEntry(); } GUILayout.EndVertical(); GUILayout.EndArea(); } }