using System.Collections.Generic;
using UnityEngine;
///
/// Enhanced test mode that creates both BattleSetupData and CombatDataTransfer test data
/// This provides more realistic character stats, equipment, and battle context
///
public class EnhancedBattleTestMode : MonoBehaviour
{
[Header("Enhanced Test Mode Settings")]
[Tooltip("Enable enhanced test mode with full combat data")]
public bool enableEnhancedTestMode = true;
[Tooltip("Number of player characters to create")]
[Range(1, 4)]
public int testPlayerCount = 2;
[Tooltip("Number of enemy characters to create")]
[Range(1, 6)]
public int testEnemyCount = 2;
[Header("Battle Context Settings")]
[Tooltip("Test terrain type")]
public TerrainType testTerrain = TerrainType.Plains;
[Tooltip("Test weather")]
public Weather testWeather = Weather.Clear;
[Tooltip("Test time of day (0-24)")]
[Range(0f, 24f)]
public float testTimeOfDay = 12f;
[Header("Character Stats Settings")]
[Tooltip("Base health for test players")]
[Range(10, 100)]
public int basePlayerHealth = 25;
[Tooltip("Base health for test enemies")]
[Range(5, 50)]
public int baseEnemyHealth = 15;
[Tooltip("Base armor class for test characters")]
[Range(8, 18)]
public int baseArmorClass = 12;
[Header("Available Equipment")]
public WeaponItem[] testWeapons;
[Header("Debug Settings")]
public bool showDebugLogs = true;
// Test character names
private readonly string[] playerNames = { "TestHero", "TestRanger", "TestMage", "TestRogue" };
private readonly string[] enemyNames = { "TestSkeleton", "TestBandit", "TestOrc", "TestGoblin", "TestTroll", "TestSpider" };
void Awake()
{
if (!enableEnhancedTestMode)
{
if (showDebugLogs)
Debug.Log("🧪 EnhancedBattleTestMode: Enhanced test mode is disabled");
return;
}
// Only activate if no existing data
if (!CombatDataTransfer.HasValidSession() &&
BattleSetupData.playerSelections.Count == 0 &&
BattleSetupData.enemySelections.Count == 0)
{
CreateEnhancedTestData();
}
else
{
if (showDebugLogs)
Debug.Log("🧪 EnhancedBattleTestMode: Combat session or battle data already exists, skipping test mode");
}
}
///
/// Create comprehensive test data including combat session and battle setup data
///
void CreateEnhancedTestData()
{
if (showDebugLogs)
Debug.Log("🧪 EnhancedBattleTestMode: Creating enhanced test data...");
// Create test combat session
CreateTestCombatSession();
// Create legacy battle setup data for compatibility
CreateTestBattleSetupData();
if (showDebugLogs)
{
Debug.Log("🧪 EnhancedBattleTestMode: Enhanced test data created successfully");
LogEnhancedTestData();
}
}
///
/// Create a test combat session with realistic character data
///
void CreateTestCombatSession()
{
var sessionData = new CombatDataTransfer.CombatSessionData
{
battleTerrain = testTerrain,
battleFeature = FeatureType.None,
weather = testWeather,
timeOfDay = testTimeOfDay,
playerTeam = new List(),
enemies = new List()
};
// Create test players
for (int i = 0; i < testPlayerCount; i++)
{
var playerData = CreateTestPlayerData(i);
sessionData.playerTeam.Add(playerData);
}
// Create test enemies
for (int i = 0; i < testEnemyCount; i++)
{
var enemyData = CreateTestEnemyData(i);
sessionData.enemies.Add(enemyData);
}
// Set the combat session
CombatDataTransfer.SetCombatSession(sessionData);
if (showDebugLogs)
Debug.Log($"🧪 Created combat session with {sessionData.playerTeam.Count} players and {sessionData.enemies.Count} enemies");
}
///
/// Create test player character data
///
CombatDataTransfer.TeamCharacterCombatData CreateTestPlayerData(int index)
{
string playerName = index < playerNames.Length ? playerNames[index] : $"TestPlayer{index + 1}";
WeaponItem weapon = GetRandomTestWeapon();
var playerData = new CombatDataTransfer.TeamCharacterCombatData
{
characterName = playerName,
maxHealth = basePlayerHealth + Random.Range(-5, 10),
armorClass = baseArmorClass + Random.Range(-1, 3),
equippedWeapon = weapon?.itemName ?? "Sword",
equippedWeaponItem = weapon,
// Add some variety to stats
strength = Random.Range(8, 16),
dexterity = Random.Range(8, 16),
constitution = Random.Range(8, 16),
wisdom = Random.Range(8, 16),
perception = Random.Range(8, 16),
// Add test inventory items
miscItems = CreateTestInventory(index)
};
// Set current health to max health
playerData.currentHealth = playerData.maxHealth;
if (showDebugLogs)
Debug.Log($"🧪 Created test player: {playerName} (HP: {playerData.maxHealth}, AC: {playerData.armorClass}, Weapon: {playerData.equippedWeapon})");
return playerData;
}
///
/// Create test enemy character data
///
CombatDataTransfer.EnemyCombatData CreateTestEnemyData(int index)
{
string enemyName = index < enemyNames.Length ? enemyNames[index] : $"TestEnemy{index + 1}";
WeaponItem weapon = GetRandomTestWeapon();
var enemyData = new CombatDataTransfer.EnemyCombatData
{
enemyName = enemyName,
maxHealth = baseEnemyHealth + Random.Range(-3, 8),
armorClass = baseArmorClass + Random.Range(-2, 2),
preferredWeapon = weapon?.itemName ?? "Fists",
preferredWeaponItem = weapon,
threatLevel = Random.Range(1, 6)
};
// Set current health to max health
enemyData.currentHealth = enemyData.maxHealth;
if (showDebugLogs)
Debug.Log($"🧪 Created test enemy: {enemyName} (HP: {enemyData.maxHealth}, AC: {enemyData.armorClass}, Weapon: {enemyData.preferredWeapon}, Threat: {enemyData.threatLevel})");
return enemyData;
}
///
/// Create legacy battle setup data for backward compatibility
///
void CreateTestBattleSetupData()
{
// Populate legacy data from the combat session
CombatDataTransfer.PopulateLegacyBattleSetupData();
if (showDebugLogs)
Debug.Log($"🧪 Populated legacy battle setup data: {BattleSetupData.playerSelections.Count} players, {BattleSetupData.enemySelections.Count} enemies");
}
///
/// Get a random weapon from available test weapons
///
WeaponItem GetRandomTestWeapon()
{
if (testWeapons == null || testWeapons.Length == 0)
return null;
return testWeapons[Random.Range(0, testWeapons.Length)];
}
///
/// Create a test inventory with varied items for each character
///
List CreateTestInventory(int characterIndex)
{
var inventory = new List();
// Base items all characters get
inventory.Add("Health Potion");
inventory.Add("Bread");
// Varied items based on character index
switch (characterIndex % 4)
{
case 0: // Fighter-type
inventory.Add("Health Potion"); // Extra healing
inventory.Add("Bandage");
inventory.Add("Iron Ration");
break;
case 1: // Rogue-type
inventory.Add("Thieves' Tools");
inventory.Add("Rope");
inventory.Add("Antidote");
break;
case 2: // Mage-type
inventory.Add("Spell Component");
inventory.Add("Scroll of Identify");
inventory.Add("Magic Ink");
break;
case 3: // Cleric-type
inventory.Add("Holy Water");
inventory.Add("Bandage");
inventory.Add("Blessed Bread");
break;
}
// Random bonus items
var bonusItems = new[] { "Torch", "Trail Rations", "Blanket", "Waterskin", "Flint and Steel" };
int bonusCount = Random.Range(1, 3);
for (int i = 0; i < bonusCount; i++)
{
string bonusItem = bonusItems[Random.Range(0, bonusItems.Length)];
if (!inventory.Contains(bonusItem))
inventory.Add(bonusItem);
}
return inventory;
}
///
/// Log all enhanced test data for debugging
///
void LogEnhancedTestData()
{
Debug.Log("🧪 === Enhanced Test Battle Data ===");
var session = CombatDataTransfer.GetCurrentSession();
if (session != null)
{
Debug.Log($"🧪 Battle Context: {session.battleTerrain} terrain, {session.weather} weather, {session.timeOfDay:F1}h");
Debug.Log($"🧪 Players ({session.playerTeam.Count}):");
foreach (var player in session.playerTeam)
{
Debug.Log($"🧪 - {player.characterName}: HP {player.currentHealth}/{player.maxHealth}, AC {player.armorClass}, Weapon: {player.equippedWeapon}");
}
Debug.Log($"🧪 Enemies ({session.enemies.Count}):");
foreach (var enemy in session.enemies)
{
Debug.Log($"🧪 - {enemy.enemyName}: HP {enemy.currentHealth}/{enemy.maxHealth}, AC {enemy.armorClass}, Weapon: {enemy.preferredWeapon}, Threat: {enemy.threatLevel}");
}
}
Debug.Log("🧪 ====================================");
}
///
/// Context menu method to manually create enhanced test data
///
[ContextMenu("Create Enhanced Test Data")]
public void ManualCreateEnhancedTestData()
{
CreateEnhancedTestData();
}
///
/// Context menu method to clear all test data
///
[ContextMenu("Clear All Test Data")]
public void ClearAllTestData()
{
CombatDataTransfer.ClearSession();
BattleSetupData.playerSelections.Clear();
BattleSetupData.enemySelections.Clear();
if (showDebugLogs)
Debug.Log("🧪 EnhancedBattleTestMode: All test data cleared");
}
///
/// Create a balanced test battle
///
[ContextMenu("Create Balanced Test Battle")]
public void CreateBalancedTestBattle()
{
testPlayerCount = 2;
testEnemyCount = 2;
testTerrain = TerrainType.Plains;
testWeather = Weather.Clear;
testTimeOfDay = 14f;
CreateEnhancedTestData();
}
///
/// Create a challenging test battle
///
[ContextMenu("Create Challenging Test Battle")]
public void CreateChallengingTestBattle()
{
testPlayerCount = 2;
testEnemyCount = 4;
baseEnemyHealth = 20; // Tougher enemies
testTerrain = TerrainType.Plains;
testWeather = Weather.Storm;
testTimeOfDay = 22f; // Night battle
CreateEnhancedTestData();
// Reset values
baseEnemyHealth = 15;
}
///
/// Create a simple test battle for quick testing
///
[ContextMenu("Create Simple Test Battle")]
public void CreateSimpleTestBattle()
{
testPlayerCount = 1;
testEnemyCount = 1;
testTerrain = TerrainType.Plains;
testWeather = Weather.Clear;
testTimeOfDay = 12f;
CreateEnhancedTestData();
}
}