EnhancedBattleTestMode.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368
  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 = { "TestHero", "TestRanger", "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. var playerData = new CombatDataTransfer.TeamCharacterCombatData
  120. {
  121. characterName = playerName,
  122. maxHealth = basePlayerHealth + Random.Range(-5, 10),
  123. armorClass = baseArmorClass + Random.Range(-1, 3),
  124. equippedWeapon = weapon?.itemName ?? "Sword",
  125. equippedWeaponItem = weapon,
  126. // Add some variety to stats
  127. strength = Random.Range(8, 16),
  128. dexterity = Random.Range(8, 16),
  129. constitution = Random.Range(8, 16),
  130. wisdom = Random.Range(8, 16),
  131. perception = Random.Range(8, 16),
  132. // Add test inventory items
  133. miscItems = CreateTestInventory(index)
  134. };
  135. // Set current health to max health
  136. playerData.currentHealth = playerData.maxHealth;
  137. if (showDebugLogs)
  138. Debug.Log($"🧪 Created test player: {playerName} (HP: {playerData.maxHealth}, AC: {playerData.armorClass}, Weapon: {playerData.equippedWeapon})");
  139. return playerData;
  140. }
  141. /// <summary>
  142. /// Create test enemy character data
  143. /// </summary>
  144. CombatDataTransfer.EnemyCombatData CreateTestEnemyData(int index)
  145. {
  146. string enemyName = index < enemyNames.Length ? enemyNames[index] : $"TestEnemy{index + 1}";
  147. WeaponItem weapon = GetRandomTestWeapon();
  148. var enemyData = new CombatDataTransfer.EnemyCombatData
  149. {
  150. enemyName = enemyName,
  151. maxHealth = baseEnemyHealth + Random.Range(-3, 8),
  152. armorClass = baseArmorClass + Random.Range(-2, 2),
  153. preferredWeapon = weapon?.itemName ?? "Fists",
  154. preferredWeaponItem = weapon,
  155. threatLevel = Random.Range(1, 6)
  156. };
  157. // Set current health to max health
  158. enemyData.currentHealth = enemyData.maxHealth;
  159. if (showDebugLogs)
  160. Debug.Log($"🧪 Created test enemy: {enemyName} (HP: {enemyData.maxHealth}, AC: {enemyData.armorClass}, Weapon: {enemyData.preferredWeapon}, Threat: {enemyData.threatLevel})");
  161. return enemyData;
  162. }
  163. /// <summary>
  164. /// Create legacy battle setup data for backward compatibility
  165. /// </summary>
  166. void CreateTestBattleSetupData()
  167. {
  168. // Populate legacy data from the combat session
  169. CombatDataTransfer.PopulateLegacyBattleSetupData();
  170. if (showDebugLogs)
  171. Debug.Log($"🧪 Populated legacy battle setup data: {BattleSetupData.playerSelections.Count} players, {BattleSetupData.enemySelections.Count} enemies");
  172. }
  173. /// <summary>
  174. /// Get a random weapon from available test weapons
  175. /// </summary>
  176. WeaponItem GetRandomTestWeapon()
  177. {
  178. if (testWeapons == null || testWeapons.Length == 0)
  179. return null;
  180. return testWeapons[Random.Range(0, testWeapons.Length)];
  181. }
  182. /// <summary>
  183. /// Create a test inventory with varied items for each character
  184. /// </summary>
  185. List<string> CreateTestInventory(int characterIndex)
  186. {
  187. var inventory = new List<string>();
  188. // Base items all characters get
  189. inventory.Add("Health Potion");
  190. inventory.Add("Bread");
  191. // Varied items based on character index
  192. switch (characterIndex % 4)
  193. {
  194. case 0: // Fighter-type
  195. inventory.Add("Health Potion"); // Extra healing
  196. inventory.Add("Bandage");
  197. inventory.Add("Iron Ration");
  198. break;
  199. case 1: // Rogue-type
  200. inventory.Add("Thieves' Tools");
  201. inventory.Add("Rope");
  202. inventory.Add("Antidote");
  203. break;
  204. case 2: // Mage-type
  205. inventory.Add("Spell Component");
  206. inventory.Add("Scroll of Identify");
  207. inventory.Add("Magic Ink");
  208. break;
  209. case 3: // Cleric-type
  210. inventory.Add("Holy Water");
  211. inventory.Add("Bandage");
  212. inventory.Add("Blessed Bread");
  213. break;
  214. }
  215. // Random bonus items
  216. var bonusItems = new[] { "Torch", "Trail Rations", "Blanket", "Waterskin", "Flint and Steel" };
  217. int bonusCount = Random.Range(1, 3);
  218. for (int i = 0; i < bonusCount; i++)
  219. {
  220. string bonusItem = bonusItems[Random.Range(0, bonusItems.Length)];
  221. if (!inventory.Contains(bonusItem))
  222. inventory.Add(bonusItem);
  223. }
  224. return inventory;
  225. }
  226. /// <summary>
  227. /// Log all enhanced test data for debugging
  228. /// </summary>
  229. void LogEnhancedTestData()
  230. {
  231. Debug.Log("🧪 === Enhanced Test Battle Data ===");
  232. var session = CombatDataTransfer.GetCurrentSession();
  233. if (session != null)
  234. {
  235. Debug.Log($"🧪 Battle Context: {session.battleTerrain} terrain, {session.weather} weather, {session.timeOfDay:F1}h");
  236. Debug.Log($"🧪 Players ({session.playerTeam.Count}):");
  237. foreach (var player in session.playerTeam)
  238. {
  239. Debug.Log($"🧪 - {player.characterName}: HP {player.currentHealth}/{player.maxHealth}, AC {player.armorClass}, Weapon: {player.equippedWeapon}");
  240. }
  241. Debug.Log($"🧪 Enemies ({session.enemies.Count}):");
  242. foreach (var enemy in session.enemies)
  243. {
  244. Debug.Log($"🧪 - {enemy.enemyName}: HP {enemy.currentHealth}/{enemy.maxHealth}, AC {enemy.armorClass}, Weapon: {enemy.preferredWeapon}, Threat: {enemy.threatLevel}");
  245. }
  246. }
  247. Debug.Log("🧪 ====================================");
  248. }
  249. /// <summary>
  250. /// Context menu method to manually create enhanced test data
  251. /// </summary>
  252. [ContextMenu("Create Enhanced Test Data")]
  253. public void ManualCreateEnhancedTestData()
  254. {
  255. CreateEnhancedTestData();
  256. }
  257. /// <summary>
  258. /// Context menu method to clear all test data
  259. /// </summary>
  260. [ContextMenu("Clear All Test Data")]
  261. public void ClearAllTestData()
  262. {
  263. CombatDataTransfer.ClearSession();
  264. BattleSetupData.playerSelections.Clear();
  265. BattleSetupData.enemySelections.Clear();
  266. if (showDebugLogs)
  267. Debug.Log("🧪 EnhancedBattleTestMode: All test data cleared");
  268. }
  269. /// <summary>
  270. /// Create a balanced test battle
  271. /// </summary>
  272. [ContextMenu("Create Balanced Test Battle")]
  273. public void CreateBalancedTestBattle()
  274. {
  275. testPlayerCount = 2;
  276. testEnemyCount = 2;
  277. testTerrain = TerrainType.Plains;
  278. testWeather = Weather.Clear;
  279. testTimeOfDay = 14f;
  280. CreateEnhancedTestData();
  281. }
  282. /// <summary>
  283. /// Create a challenging test battle
  284. /// </summary>
  285. [ContextMenu("Create Challenging Test Battle")]
  286. public void CreateChallengingTestBattle()
  287. {
  288. testPlayerCount = 2;
  289. testEnemyCount = 4;
  290. baseEnemyHealth = 20; // Tougher enemies
  291. testTerrain = TerrainType.Plains;
  292. testWeather = Weather.Storm;
  293. testTimeOfDay = 22f; // Night battle
  294. CreateEnhancedTestData();
  295. // Reset values
  296. baseEnemyHealth = 15;
  297. }
  298. /// <summary>
  299. /// Create a simple test battle for quick testing
  300. /// </summary>
  301. [ContextMenu("Create Simple Test Battle")]
  302. public void CreateSimpleTestBattle()
  303. {
  304. testPlayerCount = 1;
  305. testEnemyCount = 1;
  306. testTerrain = TerrainType.Plains;
  307. testWeather = Weather.Clear;
  308. testTimeOfDay = 12f;
  309. CreateEnhancedTestData();
  310. }
  311. }