EnhancedBattleTestMode.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414
  1. using System.Collections.Generic;
  2. using UnityEngine;
  3. /// <summary>
  4. /// Enhanced test mode that creates both BattleSetupData and CombatDataTransfer test data
  5. /// This provides more realistic character stats, equipment, and battle context
  6. /// </summary>
  7. public class EnhancedBattleTestMode : MonoBehaviour
  8. {
  9. [Header("Enhanced Test Mode Settings")]
  10. [Tooltip("Enable enhanced test mode with full combat data")]
  11. public bool enableEnhancedTestMode = true;
  12. [Tooltip("Number of player characters to create")]
  13. [Range(1, 4)]
  14. public int testPlayerCount = 2;
  15. [Tooltip("Number of enemy characters to create")]
  16. [Range(1, 6)]
  17. public int testEnemyCount = 2;
  18. [Header("Battle Context Settings")]
  19. [Tooltip("Test terrain type")]
  20. public TerrainType testTerrain = TerrainType.Plains;
  21. [Tooltip("Test weather")]
  22. public Weather testWeather = Weather.Clear;
  23. [Tooltip("Test time of day (0-24)")]
  24. [Range(0f, 24f)]
  25. public float testTimeOfDay = 12f;
  26. [Header("Character Stats Settings")]
  27. [Tooltip("Base health for test players")]
  28. [Range(10, 100)]
  29. public int basePlayerHealth = 25;
  30. [Tooltip("Base health for test enemies")]
  31. [Range(5, 50)]
  32. public int baseEnemyHealth = 15;
  33. [Tooltip("Base armor class for test characters")]
  34. [Range(8, 18)]
  35. public int baseArmorClass = 12;
  36. [Header("Available Equipment")]
  37. public WeaponItem[] testWeapons;
  38. [Header("Debug Settings")]
  39. public bool showDebugLogs = true;
  40. // Test character names
  41. private readonly string[] playerNames = { "FastRogue", "SlowTank", "TestMage", "TestRogue" };
  42. private readonly string[] enemyNames = { "TestSkeleton", "TestBandit", "TestOrc", "TestGoblin", "TestTroll", "TestSpider" };
  43. void Awake()
  44. {
  45. if (!enableEnhancedTestMode)
  46. {
  47. if (showDebugLogs)
  48. Debug.Log("🧪 EnhancedBattleTestMode: Enhanced test mode is disabled");
  49. return;
  50. }
  51. // Only activate if no existing data
  52. if (!CombatDataTransfer.HasValidSession() &&
  53. BattleSetupData.playerSelections.Count == 0 &&
  54. BattleSetupData.enemySelections.Count == 0)
  55. {
  56. CreateEnhancedTestData();
  57. }
  58. else
  59. {
  60. if (showDebugLogs)
  61. Debug.Log("🧪 EnhancedBattleTestMode: Combat session or battle data already exists, skipping test mode");
  62. }
  63. }
  64. /// <summary>
  65. /// Create comprehensive test data including combat session and battle setup data
  66. /// </summary>
  67. void CreateEnhancedTestData()
  68. {
  69. if (showDebugLogs)
  70. Debug.Log("🧪 EnhancedBattleTestMode: Creating enhanced test data...");
  71. // Create test combat session
  72. CreateTestCombatSession();
  73. // Create legacy battle setup data for compatibility
  74. CreateTestBattleSetupData();
  75. if (showDebugLogs)
  76. {
  77. Debug.Log("🧪 EnhancedBattleTestMode: Enhanced test data created successfully");
  78. LogEnhancedTestData();
  79. }
  80. }
  81. /// <summary>
  82. /// Create a test combat session with realistic character data
  83. /// </summary>
  84. void CreateTestCombatSession()
  85. {
  86. var sessionData = new CombatDataTransfer.CombatSessionData
  87. {
  88. battleTerrain = testTerrain,
  89. battleFeature = FeatureType.None,
  90. weather = testWeather,
  91. timeOfDay = testTimeOfDay,
  92. playerTeam = new List<CombatDataTransfer.TeamCharacterCombatData>(),
  93. enemies = new List<CombatDataTransfer.EnemyCombatData>()
  94. };
  95. // Create test players
  96. for (int i = 0; i < testPlayerCount; i++)
  97. {
  98. var playerData = CreateTestPlayerData(i);
  99. sessionData.playerTeam.Add(playerData);
  100. }
  101. // Create test enemies
  102. for (int i = 0; i < testEnemyCount; i++)
  103. {
  104. var enemyData = CreateTestEnemyData(i);
  105. sessionData.enemies.Add(enemyData);
  106. }
  107. // Set the combat session
  108. CombatDataTransfer.SetCombatSession(sessionData);
  109. if (showDebugLogs)
  110. Debug.Log($"🧪 Created combat session with {sessionData.playerTeam.Count} players and {sessionData.enemies.Count} enemies");
  111. }
  112. /// <summary>
  113. /// Create test player character data
  114. /// </summary>
  115. CombatDataTransfer.TeamCharacterCombatData CreateTestPlayerData(int index)
  116. {
  117. string playerName = index < playerNames.Length ? playerNames[index] : $"TestPlayer{index + 1}";
  118. WeaponItem weapon = GetRandomTestWeapon();
  119. CombatDataTransfer.TeamCharacterCombatData playerData;
  120. // Create different character archetypes with varying movement speeds
  121. switch (index)
  122. {
  123. case 0: // Fast character - Very High Dexterity (Movement Speed ~45)
  124. playerData = new CombatDataTransfer.TeamCharacterCombatData
  125. {
  126. characterName = playerName,
  127. maxHealth = 18,
  128. currentHealth = 18,
  129. armorClass = 13,
  130. equippedWeapon = weapon?.itemName ?? "Sword",
  131. equippedWeaponItem = weapon,
  132. strength = 12,
  133. dexterity = 25, // Very High DEX = Very Fast movement (MovementSpeed = 30 + 15 = 45)
  134. constitution = 14,
  135. wisdom = 12,
  136. perception = 16,
  137. miscItems = CreateTestInventory(index)
  138. };
  139. if (showDebugLogs)
  140. Debug.Log($"🧪 Created FAST character: {playerName} - DEX:25 (Expected MovementSpeed: 45)");
  141. break;
  142. case 1: // Slow character - Very Low Dexterity (Movement Speed ~15)
  143. playerData = new CombatDataTransfer.TeamCharacterCombatData
  144. {
  145. characterName = playerName,
  146. maxHealth = 25,
  147. currentHealth = 25,
  148. armorClass = 11,
  149. equippedWeapon = weapon?.itemName ?? "Sword",
  150. equippedWeaponItem = weapon,
  151. strength = 16,
  152. dexterity = 1, // Very Low DEX = Very Slow movement (MovementSpeed = 30 + (-10) = 20, but formula should give us ~15)
  153. constitution = 16,
  154. wisdom = 14,
  155. perception = 10,
  156. miscItems = CreateTestInventory(index)
  157. };
  158. if (showDebugLogs)
  159. Debug.Log($"🧪 Created SLOW character: {playerName} - DEX:1 (Expected MovementSpeed: ~15)");
  160. break;
  161. default: // Balanced character for any additional characters
  162. playerData = new CombatDataTransfer.TeamCharacterCombatData
  163. {
  164. characterName = playerName,
  165. maxHealth = 22,
  166. currentHealth = 22,
  167. armorClass = 12,
  168. equippedWeapon = weapon?.itemName ?? "Sword",
  169. equippedWeaponItem = weapon,
  170. strength = 14,
  171. dexterity = 14, // Average DEX = Average movement (MovementSpeed = 30 + 4*5 = 50)
  172. constitution = 14,
  173. wisdom = 12,
  174. perception = 12,
  175. miscItems = CreateTestInventory(index)
  176. };
  177. if (showDebugLogs)
  178. Debug.Log($"🧪 Created BALANCED character: {playerName} - DEX:14 (Expected MovementSpeed: 50)");
  179. break;
  180. }
  181. if (showDebugLogs)
  182. Debug.Log($"🧪 Created test player: {playerName} (HP: {playerData.maxHealth}, AC: {playerData.armorClass}, Weapon: {playerData.equippedWeapon})");
  183. return playerData;
  184. }
  185. /// <summary>
  186. /// Create test enemy character data
  187. /// </summary>
  188. CombatDataTransfer.EnemyCombatData CreateTestEnemyData(int index)
  189. {
  190. string enemyName = index < enemyNames.Length ? enemyNames[index] : $"TestEnemy{index + 1}";
  191. WeaponItem weapon = GetRandomTestWeapon();
  192. var enemyData = new CombatDataTransfer.EnemyCombatData
  193. {
  194. enemyName = enemyName,
  195. maxHealth = baseEnemyHealth + Random.Range(-3, 8),
  196. armorClass = baseArmorClass + Random.Range(-2, 2),
  197. preferredWeapon = weapon?.itemName ?? "Fists",
  198. preferredWeaponItem = weapon,
  199. threatLevel = Random.Range(1, 6)
  200. };
  201. // Set current health to max health
  202. enemyData.currentHealth = enemyData.maxHealth;
  203. if (showDebugLogs)
  204. Debug.Log($"🧪 Created test enemy: {enemyName} (HP: {enemyData.maxHealth}, AC: {enemyData.armorClass}, Weapon: {enemyData.preferredWeapon}, Threat: {enemyData.threatLevel})");
  205. return enemyData;
  206. }
  207. /// <summary>
  208. /// Create legacy battle setup data for backward compatibility
  209. /// </summary>
  210. void CreateTestBattleSetupData()
  211. {
  212. // Populate legacy data from the combat session
  213. CombatDataTransfer.PopulateLegacyBattleSetupData();
  214. if (showDebugLogs)
  215. Debug.Log($"🧪 Populated legacy battle setup data: {BattleSetupData.playerSelections.Count} players, {BattleSetupData.enemySelections.Count} enemies");
  216. }
  217. /// <summary>
  218. /// Get a random weapon from available test weapons
  219. /// </summary>
  220. WeaponItem GetRandomTestWeapon()
  221. {
  222. if (testWeapons == null || testWeapons.Length == 0)
  223. return null;
  224. return testWeapons[Random.Range(0, testWeapons.Length)];
  225. }
  226. /// <summary>
  227. /// Create a test inventory with varied items for each character
  228. /// </summary>
  229. List<string> CreateTestInventory(int characterIndex)
  230. {
  231. var inventory = new List<string>();
  232. // Base items all characters get
  233. inventory.Add("Health Potion");
  234. inventory.Add("Bread");
  235. // Varied items based on character index
  236. switch (characterIndex % 4)
  237. {
  238. case 0: // Fighter-type
  239. inventory.Add("Health Potion"); // Extra healing
  240. inventory.Add("Bandage");
  241. inventory.Add("Iron Ration");
  242. break;
  243. case 1: // Rogue-type
  244. inventory.Add("Thieves' Tools");
  245. inventory.Add("Rope");
  246. inventory.Add("Antidote");
  247. break;
  248. case 2: // Mage-type
  249. inventory.Add("Spell Component");
  250. inventory.Add("Scroll of Identify");
  251. inventory.Add("Magic Ink");
  252. break;
  253. case 3: // Cleric-type
  254. inventory.Add("Holy Water");
  255. inventory.Add("Bandage");
  256. inventory.Add("Blessed Bread");
  257. break;
  258. }
  259. // Random bonus items
  260. var bonusItems = new[] { "Torch", "Trail Rations", "Blanket", "Waterskin", "Flint and Steel" };
  261. int bonusCount = Random.Range(1, 3);
  262. for (int i = 0; i < bonusCount; i++)
  263. {
  264. string bonusItem = bonusItems[Random.Range(0, bonusItems.Length)];
  265. if (!inventory.Contains(bonusItem))
  266. inventory.Add(bonusItem);
  267. }
  268. return inventory;
  269. }
  270. /// <summary>
  271. /// Log all enhanced test data for debugging
  272. /// </summary>
  273. void LogEnhancedTestData()
  274. {
  275. Debug.Log("🧪 === Enhanced Test Battle Data ===");
  276. var session = CombatDataTransfer.GetCurrentSession();
  277. if (session != null)
  278. {
  279. Debug.Log($"🧪 Battle Context: {session.battleTerrain} terrain, {session.weather} weather, {session.timeOfDay:F1}h");
  280. Debug.Log($"🧪 Players ({session.playerTeam.Count}):");
  281. foreach (var player in session.playerTeam)
  282. {
  283. Debug.Log($"🧪 - {player.characterName}: HP {player.currentHealth}/{player.maxHealth}, AC {player.armorClass}, Weapon: {player.equippedWeapon}");
  284. }
  285. Debug.Log($"🧪 Enemies ({session.enemies.Count}):");
  286. foreach (var enemy in session.enemies)
  287. {
  288. Debug.Log($"🧪 - {enemy.enemyName}: HP {enemy.currentHealth}/{enemy.maxHealth}, AC {enemy.armorClass}, Weapon: {enemy.preferredWeapon}, Threat: {enemy.threatLevel}");
  289. }
  290. }
  291. Debug.Log("🧪 ====================================");
  292. }
  293. /// <summary>
  294. /// Context menu method to manually create enhanced test data
  295. /// </summary>
  296. [ContextMenu("Create Enhanced Test Data")]
  297. public void ManualCreateEnhancedTestData()
  298. {
  299. CreateEnhancedTestData();
  300. }
  301. /// <summary>
  302. /// Context menu method to clear all test data
  303. /// </summary>
  304. [ContextMenu("Clear All Test Data")]
  305. public void ClearAllTestData()
  306. {
  307. CombatDataTransfer.ClearSession();
  308. BattleSetupData.playerSelections.Clear();
  309. BattleSetupData.enemySelections.Clear();
  310. if (showDebugLogs)
  311. Debug.Log("🧪 EnhancedBattleTestMode: All test data cleared");
  312. }
  313. /// <summary>
  314. /// Create a balanced test battle
  315. /// </summary>
  316. [ContextMenu("Create Balanced Test Battle")]
  317. public void CreateBalancedTestBattle()
  318. {
  319. testPlayerCount = 2;
  320. testEnemyCount = 2;
  321. testTerrain = TerrainType.Plains;
  322. testWeather = Weather.Clear;
  323. testTimeOfDay = 14f;
  324. CreateEnhancedTestData();
  325. }
  326. /// <summary>
  327. /// Create a challenging test battle
  328. /// </summary>
  329. [ContextMenu("Create Challenging Test Battle")]
  330. public void CreateChallengingTestBattle()
  331. {
  332. testPlayerCount = 2;
  333. testEnemyCount = 4;
  334. baseEnemyHealth = 20; // Tougher enemies
  335. testTerrain = TerrainType.Plains;
  336. testWeather = Weather.Storm;
  337. testTimeOfDay = 22f; // Night battle
  338. CreateEnhancedTestData();
  339. // Reset values
  340. baseEnemyHealth = 15;
  341. }
  342. /// <summary>
  343. /// Create a simple test battle for quick testing
  344. /// </summary>
  345. [ContextMenu("Create Simple Test Battle")]
  346. public void CreateSimpleTestBattle()
  347. {
  348. testPlayerCount = 1;
  349. testEnemyCount = 1;
  350. testTerrain = TerrainType.Plains;
  351. testWeather = Weather.Clear;
  352. testTimeOfDay = 12f;
  353. CreateEnhancedTestData();
  354. }
  355. }