CombatIntegrationTest.cs 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. using UnityEngine;
  2. using System.Collections.Generic;
  3. /// <summary>
  4. /// Test script for the Combat Scene Integration system
  5. /// Use this to verify that the system works correctly
  6. /// </summary>
  7. public class CombatIntegrationTest : MonoBehaviour
  8. {
  9. [Header("Test Configuration")]
  10. [Tooltip("Test terrain type for combat")]
  11. public TerrainType testTerrain = TerrainType.Forest;
  12. [Tooltip("Test feature type")]
  13. public FeatureType testFeature = FeatureType.Road;
  14. [Tooltip("Number of test enemies")]
  15. public int testEnemyCount = 2;
  16. [Tooltip("Test enemy type name")]
  17. public string testEnemyType = "Test Bandit";
  18. [Header("Test Controls")]
  19. [Tooltip("Enable this to run test combat on Start - Creates FastRogue (DEX:20) and SlowTank (DEX:4)")]
  20. public bool runTestOnStart = false;
  21. void Start()
  22. {
  23. if (runTestOnStart)
  24. {
  25. // Delay the test slightly to ensure scene is fully loaded
  26. Invoke(nameof(RunCombatTest), 1f);
  27. }
  28. }
  29. /// <summary>
  30. /// Run a test combat scenario
  31. /// </summary>
  32. [ContextMenu("Run Combat Test")]
  33. public void RunCombatTest()
  34. {
  35. Debug.Log("🧪 Running combat integration test...");
  36. // Create test team data
  37. List<TeamCharacter> testTeam = CreateTestTeam();
  38. // Create test battle data
  39. BattleEventData testBattleData = CreateTestBattleData();
  40. // Create test context
  41. TravelEventContext testContext = CreateTestContext();
  42. // Initialize combat session
  43. CombatDataTransfer.InitializeCombatSession(testBattleData, testContext, testTeam);
  44. // Test the CombatSceneManager
  45. TestCombatSceneManager();
  46. Debug.Log("✅ Combat integration test complete!");
  47. }
  48. /// <summary>
  49. /// Create test team data with varied movement speeds
  50. /// </summary>
  51. private List<TeamCharacter> CreateTestTeam()
  52. {
  53. List<TeamCharacter> team = new List<TeamCharacter>();
  54. // Create a FAST character - Very High Dexterity
  55. var fastRogue = new TeamCharacter
  56. {
  57. name = "FastRogue",
  58. isMale = true,
  59. strength = 12,
  60. dexterity = 25, // Very High DEX = Very Fast movement (MovementSpeed = 30 + 15 = 45)
  61. constitution = 14,
  62. wisdom = 12,
  63. perception = 16,
  64. gold = 50,
  65. silver = 25,
  66. copper = 10,
  67. equippedWeapon = "Sword",
  68. equippedArmor = "Leather Armor",
  69. weapons = new List<string> { "Sword", "Bow" },
  70. armor = new List<string> { "Leather Armor" }
  71. };
  72. team.Add(fastRogue);
  73. // Create a SLOW character - Very Low Dexterity
  74. var slowTank = new TeamCharacter
  75. {
  76. name = "SlowTank",
  77. isMale = false,
  78. strength = 16,
  79. dexterity = 1, // Very Low DEX = Very Slow movement (MovementSpeed = 30 + (-10) = 20, but formula should give us ~15)
  80. constitution = 16,
  81. wisdom = 14,
  82. perception = 10,
  83. gold = 45,
  84. silver = 30,
  85. copper = 5,
  86. equippedWeapon = "Sword",
  87. equippedArmor = "Plate Armor",
  88. weapons = new List<string> { "Sword", "Mace" },
  89. armor = new List<string> { "Plate Armor" }
  90. };
  91. team.Add(slowTank);
  92. Debug.Log($"🏷️ Created test team with {team.Count} members - FastRogue (DEX:25) and SlowTank (DEX:1)");
  93. return team;
  94. }
  95. /// <summary>
  96. /// Create test battle data
  97. /// </summary>
  98. private BattleEventData CreateTestBattleData()
  99. {
  100. var battleData = new BattleEventData
  101. {
  102. enemyCount = testEnemyCount,
  103. enemyType = testEnemyType,
  104. battleDescription = $"A test encounter with {testEnemyCount} {testEnemyType}s",
  105. enemyCharacterData = null // Could be set to a real EnemyCharacterData asset
  106. };
  107. Debug.Log($"⚔️ Created test battle data: {battleData.enemyCount}x {battleData.enemyType}");
  108. return battleData;
  109. }
  110. /// <summary>
  111. /// Create test travel context
  112. /// </summary>
  113. private TravelEventContext CreateTestContext()
  114. {
  115. // Create a mock map tile
  116. var mockTile = new MapTile(0, 0)
  117. {
  118. terrainType = testTerrain,
  119. featureType = testFeature
  120. };
  121. var context = new TravelEventContext(Vector2Int.zero, mockTile, null)
  122. {
  123. dayOfJourney = 3,
  124. timeOfDay = 14.5f, // 2:30 PM
  125. currentWeather = Weather.Clear,
  126. teamGold = 150,
  127. teamFood = 75,
  128. teamMorale = 0.8f,
  129. isOnMainRoad = testFeature == FeatureType.Road,
  130. distanceToDestination = 25.5f
  131. };
  132. Debug.Log($"🌍 Created test context: {testTerrain} terrain, {testFeature} feature");
  133. return context;
  134. }
  135. /// <summary>
  136. /// Test the CombatSceneManager functionality
  137. /// </summary>
  138. private void TestCombatSceneManager()
  139. {
  140. // Find CombatSceneManager
  141. var manager = FindFirstObjectByType<MonoBehaviour>();
  142. MonoBehaviour combatManager = null;
  143. // Look for CombatSceneManager by name
  144. var allComponents = FindObjectsByType<MonoBehaviour>(FindObjectsSortMode.None);
  145. foreach (var comp in allComponents)
  146. {
  147. if (comp.GetType().Name == "CombatSceneManager")
  148. {
  149. combatManager = comp;
  150. break;
  151. }
  152. }
  153. if (combatManager != null)
  154. {
  155. Debug.Log("✅ Found CombatSceneManager");
  156. // Test getting battle context description
  157. var method = combatManager.GetType().GetMethod("GetBattleContextDescription");
  158. if (method != null)
  159. {
  160. string description = (string)method.Invoke(combatManager, null);
  161. Debug.Log($"📝 Battle context: {description}");
  162. }
  163. }
  164. else
  165. {
  166. Debug.LogWarning("⚠️ CombatSceneManager not found - add it to test scene loading");
  167. }
  168. }
  169. /// <summary>
  170. /// Test data transfer without scene loading
  171. /// </summary>
  172. [ContextMenu("Test Data Transfer Only")]
  173. public void TestDataTransferOnly()
  174. {
  175. Debug.Log("📊 Testing data transfer system...");
  176. // Create test data
  177. List<TeamCharacter> testTeam = CreateTestTeam();
  178. BattleEventData testBattleData = CreateTestBattleData();
  179. TravelEventContext testContext = CreateTestContext();
  180. // Test initialization
  181. CombatDataTransfer.InitializeCombatSession(testBattleData, testContext, testTeam);
  182. // Test session validity
  183. bool hasValidSession = CombatDataTransfer.HasValidSession();
  184. Debug.Log($"🔍 Has valid session: {hasValidSession}");
  185. // Test getting session data
  186. var session = CombatDataTransfer.GetCurrentSession();
  187. if (session != null)
  188. {
  189. Debug.Log($"👥 Player team: {session.playerTeam.Count} members");
  190. Debug.Log($"👹 Enemies: {session.enemies.Count} enemies");
  191. Debug.Log($"🌍 Terrain: {session.battleTerrain}");
  192. Debug.Log($"🌤️ Weather: {session.weather}");
  193. // Test terrain description
  194. string terrainDesc = CombatDataTransfer.GetTerrainDescription(session.battleTerrain, session.battleFeature);
  195. Debug.Log($"📝 Terrain description: {terrainDesc}");
  196. }
  197. // Test legacy compatibility
  198. CombatDataTransfer.PopulateLegacyBattleSetupData();
  199. Debug.Log($"🔧 Legacy data populated: {BattleSetupData.playerSelections.Count} players, {BattleSetupData.enemySelections.Count} enemies");
  200. // Test cleanup
  201. CombatDataTransfer.ClearSession();
  202. Debug.Log($"🧹 Session cleared. Has valid session: {CombatDataTransfer.HasValidSession()}");
  203. Debug.Log("✅ Data transfer test complete!");
  204. }
  205. /// <summary>
  206. /// Test team data loading from various sources
  207. /// </summary>
  208. [ContextMenu("Test Team Data Loading")]
  209. public void TestTeamDataLoading()
  210. {
  211. Debug.Log("👥 Testing team data loading...");
  212. // Test MainTeamSelectScript
  213. var teamSelect = FindFirstObjectByType<MainTeamSelectScript>();
  214. if (teamSelect != null)
  215. {
  216. var characters = teamSelect.GetConfiguredCharacters();
  217. Debug.Log($"📋 MainTeamSelectScript: {characters?.Count ?? 0} characters");
  218. }
  219. else
  220. {
  221. Debug.Log("📋 MainTeamSelectScript: Not found");
  222. }
  223. // Test GameStateManager
  224. if (GameStateManager.Instance != null && GameStateManager.Instance.savedTeam != null)
  225. {
  226. int count = 0;
  227. foreach (var char_ in GameStateManager.Instance.savedTeam)
  228. {
  229. if (char_ != null) count++;
  230. }
  231. Debug.Log($"💾 GameStateManager: {count} characters");
  232. }
  233. else
  234. {
  235. Debug.Log("💾 GameStateManager: Not available or no saved team");
  236. }
  237. // Test PlayerPrefs
  238. int prefCount = 0;
  239. for (int i = 0; i < 4; i++)
  240. {
  241. if (PlayerPrefs.GetInt($"Character{i}_Exists", 0) == 1)
  242. {
  243. prefCount++;
  244. }
  245. }
  246. Debug.Log($"🗃️ PlayerPrefs: {prefCount} characters");
  247. Debug.Log("✅ Team data loading test complete!");
  248. }
  249. /// <summary>
  250. /// Clear test data
  251. /// </summary>
  252. [ContextMenu("Clear Test Data")]
  253. public void ClearTestData()
  254. {
  255. CombatDataTransfer.ClearSession();
  256. BattleSetupData.playerSelections.Clear();
  257. BattleSetupData.enemySelections.Clear();
  258. Debug.Log("🧹 Test data cleared");
  259. }
  260. }