using System.Collections.Generic;
using UnityEngine;
///
/// Test mode for battle scene that creates test characters and enemies automatically
/// Attach this to a GameObject in the battle scene to enable test mode
/// Enhanced with post-battle looting and defeat testing capabilities
///
public class BattleTestMode : MonoBehaviour
{
[Header("Test Mode Settings")]
[Tooltip("Enable test mode to automatically create test characters")]
public bool enableTestMode = 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("Test Character Configuration")]
[Tooltip("Available weapon types for testing")]
public string[] availableWeapons = { "Sword", "Bow", "Fists" };
[Tooltip("Player character names - Character 0: Fast (DEX:20→Speed:40), Character 1: Slow (DEX:4→Speed:25)")]
public string[] playerNames = { "FastRogue", "SlowTank", "TestMage", "TestRogue" };
[Tooltip("Enemy character names")]
public string[] enemyNames = { "TestSkeleton", "TestBandit", "TestOrc", "TestGoblin", "TestTroll", "TestSpider" };
[Header("Debug Settings")]
public bool showDebugLogs = false;
[Tooltip("Force clear existing battle data and use test mode anyway")]
public bool forceClearExistingData = false;
void Awake()
{
if (!enableTestMode)
{
if (showDebugLogs)
Debug.Log("🧪 BattleTestMode: Test mode is disabled");
return;
}
if (showDebugLogs)
{
Debug.Log($"🧪 BattleTestMode: Current battle data - Players: {BattleSetupData.playerSelections.Count}, Enemies: {BattleSetupData.enemySelections.Count}");
}
// Force clear existing data if requested
if (forceClearExistingData)
{
if (showDebugLogs)
Debug.Log("🧪 BattleTestMode: Force clearing existing battle data");
BattleSetupData.playerSelections.Clear();
BattleSetupData.enemySelections.Clear();
}
// Only activate test mode if there are no existing selections
if (BattleSetupData.playerSelections.Count == 0 && BattleSetupData.enemySelections.Count == 0)
{
CreateTestBattleData();
}
else
{
if (showDebugLogs)
Debug.Log($"🧪 BattleTestMode: Battle data already exists, skipping test mode. Players: {BattleSetupData.playerSelections.Count}, Enemies: {BattleSetupData.enemySelections.Count}");
}
}
void CreateTestBattleData()
{
if (showDebugLogs)
Debug.Log("🧪 BattleTestMode: Creating test battle data...");
// Clear any existing data
BattleSetupData.playerSelections.Clear();
BattleSetupData.enemySelections.Clear();
// Create test player characters
CreateTestPlayers();
// Create test enemy characters
CreateTestEnemies();
// Create basic inventory data for the test characters
CreateBasicInventoryData();
// Add carry capacity components to test characters
AddCarryCapacityToTestCharacters();
if (showDebugLogs)
{
Debug.Log($"🧪 BattleTestMode: Created {BattleSetupData.playerSelections.Count} test players and {BattleSetupData.enemySelections.Count} test enemies");
LogTestData();
}
}
///
/// Create test player characters with varied weapons
///
void CreateTestPlayers()
{
for (int i = 0; i < testPlayerCount; i++)
{
string playerName = i < playerNames.Length ? playerNames[i] : $"TestPlayer{i + 1}";
string weaponType = availableWeapons[i % availableWeapons.Length];
var playerSelection = new CharacterSelection
{
characterName = playerName,
weaponType = weaponType
};
BattleSetupData.playerSelections.Add(playerSelection);
if (showDebugLogs)
Debug.Log($"🧪 Created test player: {playerName} with {weaponType}");
}
}
///
/// Create test enemy characters with varied weapons
///
void CreateTestEnemies()
{
for (int i = 0; i < testEnemyCount; i++)
{
string enemyName = i < enemyNames.Length ? enemyNames[i] : $"TestEnemy{i + 1}";
string weaponType = availableWeapons[Random.Range(0, availableWeapons.Length)];
var enemySelection = new CharacterSelection
{
characterName = enemyName,
weaponType = weaponType
};
BattleSetupData.enemySelections.Add(enemySelection);
if (showDebugLogs)
Debug.Log($"🧪 Created test enemy: {enemyName} with {weaponType}");
}
}
///
/// Log all test data for debugging
///
void LogTestData()
{
Debug.Log("🧪 === Test Battle Data ===");
Debug.Log($"🧪 Players ({BattleSetupData.playerSelections.Count}):");
foreach (var player in BattleSetupData.playerSelections)
{
Debug.Log($"🧪 - {player.characterName} ({player.weaponType})");
}
Debug.Log($"🧪 Enemies ({BattleSetupData.enemySelections.Count}):");
foreach (var enemy in BattleSetupData.enemySelections)
{
Debug.Log($"🧪 - {enemy.characterName} ({enemy.weaponType})");
}
Debug.Log("🧪 ========================");
}
///
/// Create basic inventory data for test characters using CombatDataTransfer
///
void CreateBasicInventoryData()
{
// Create minimal combat session data to provide inventory
var sessionData = new CombatDataTransfer.CombatSessionData
{
battleTerrain = TerrainType.Plains,
battleFeature = FeatureType.None,
weather = Weather.Clear,
timeOfDay = 12f,
playerTeam = new List(),
enemies = new List()
};
// Create specialized test characters with different movement speeds
CreateSpecializedTestCharacters(sessionData);
// Create basic enemy data (no inventory needed for enemies)
for (int i = 0; i < BattleSetupData.enemySelections.Count; i++)
{
var enemy = BattleSetupData.enemySelections[i];
var enemyData = new CombatDataTransfer.EnemyCombatData
{
enemyName = enemy.characterName,
maxHealth = 15 + Random.Range(-3, 8),
currentHealth = 15 + Random.Range(-3, 8),
armorClass = 11,
preferredWeapon = enemy.weaponType,
threatLevel = Random.Range(1, 4)
};
sessionData.enemies.Add(enemyData);
}
// Set the combat session
CombatDataTransfer.SetCombatSession(sessionData);
if (showDebugLogs)
Debug.Log($"🧪 Created basic inventory data for {sessionData.playerTeam.Count} players");
}
///
/// Create specialized test characters with different movement speeds and attributes
///
void CreateSpecializedTestCharacters(CombatDataTransfer.CombatSessionData sessionData)
{
for (int i = 0; i < BattleSetupData.playerSelections.Count; i++)
{
var player = BattleSetupData.playerSelections[i];
CombatDataTransfer.TeamCharacterCombatData playerData;
// Create different character archetypes
switch (i)
{
case 0: // VERY Fast character - Extreme High Dexterity
playerData = new CombatDataTransfer.TeamCharacterCombatData
{
characterName = player.characterName,
maxHealth = 18,
currentHealth = 18,
armorClass = 13,
equippedWeapon = player.weaponType,
strength = 12,
dexterity = 30, // Extreme High DEX = Very Fast movement (MovementSpeed = 30 + 20 = 50)
constitution = 14,
wisdom = 12,
perception = 16,
miscItems = CreateBasicTestInventory(i)
};
if (showDebugLogs)
Debug.Log($"🧪 Created VERY FAST character: {player.characterName} - DEX:30 (Expected MovementSpeed: 50)");
break;
case 1: // VERY Slow character - Extremely Low Dexterity
playerData = new CombatDataTransfer.TeamCharacterCombatData
{
characterName = player.characterName,
maxHealth = 25,
currentHealth = 25,
armorClass = 11,
equippedWeapon = player.weaponType,
strength = 16,
dexterity = 1, // Very Low DEX = Slow movement (MovementSpeed = 30 + (-5) = 25)
constitution = 16,
wisdom = 14,
perception = 10,
miscItems = CreateBasicTestInventory(i)
};
if (showDebugLogs)
Debug.Log($"🧪 Created VERY SLOW character: {player.characterName} - DEX:1 (Expected MovementSpeed: 25)");
break;
default: // Balanced character for any additional characters
playerData = new CombatDataTransfer.TeamCharacterCombatData
{
characterName = player.characterName,
maxHealth = 22,
currentHealth = 22,
armorClass = 12,
equippedWeapon = player.weaponType,
strength = 14,
dexterity = 14, // Average DEX = Average movement (MovementSpeed = 30 + 4*5 = 50)
constitution = 14,
wisdom = 12,
perception = 12,
miscItems = CreateBasicTestInventory(i)
};
if (showDebugLogs)
Debug.Log($"🧪 Created BALANCED character: {player.characterName} - DEX:14 (Expected MovementSpeed: ~50)");
break;
}
sessionData.playerTeam.Add(playerData);
}
}
///
/// Create a basic test inventory with health potions and other items
///
List CreateBasicTestInventory(int characterIndex)
{
var inventory = new List();
// Everyone gets health potions
inventory.Add("Health Potion");
inventory.Add("Health Potion"); // Give 2 health potions
// Basic survival items
inventory.Add("Bread");
inventory.Add("Bandage");
// Add some variety based on character index
switch (characterIndex % 3)
{
case 0:
inventory.Add("Health Potion"); // Extra healing for first character
inventory.Add("Iron Ration");
break;
case 1:
inventory.Add("Antidote");
inventory.Add("Rope");
break;
case 2:
inventory.Add("Torch");
inventory.Add("Waterskin");
break;
}
return inventory;
}
///
/// Add carry capacity components to test characters for weight management
///
void AddCarryCapacityToTestCharacters()
{
// This will add carry capacity to actual character GameObjects when they're spawned
// For now, just log that this system is available
if (showDebugLogs)
Debug.Log("🧪 Carry capacity system ready for test characters");
// TODO: This method will be called after character spawning when the actual GameObjects exist
// It would add CharacterCarryCapacity components to each spawned character
}
///
/// Context menu method to manually create test data
///
[ContextMenu("Create Test Battle Data")]
public void ManualCreateTestData()
{
CreateTestBattleData();
}
///
/// Context menu method to clear test data
///
[ContextMenu("Clear Test Data")]
public void ClearTestData()
{
BattleSetupData.playerSelections.Clear();
BattleSetupData.enemySelections.Clear();
CombatDataTransfer.ClearSession();
if (showDebugLogs)
Debug.Log("🧪 BattleTestMode: Test data and inventory cleared");
}
///
/// Context menu method to create random test data
///
[ContextMenu("Create Random Test Data")]
public void CreateRandomTestData()
{
// Randomize counts
testPlayerCount = Random.Range(1, 5);
testEnemyCount = Random.Range(1, 7);
CreateTestBattleData();
}
///
/// Create a quick 1v1 battle for testing specific mechanics
///
[ContextMenu("Create 1v1 Test Battle")]
public void Create1v1TestBattle()
{
BattleSetupData.playerSelections.Clear();
BattleSetupData.enemySelections.Clear();
// Single player with sword
BattleSetupData.playerSelections.Add(new CharacterSelection
{
characterName = "TestHero",
weaponType = "Sword"
});
// Single enemy with bow
BattleSetupData.enemySelections.Add(new CharacterSelection
{
characterName = "TestSkeleton",
weaponType = "Bow"
});
// Create inventory data for the 1v1 battle
CreateBasicInventoryData();
if (showDebugLogs)
Debug.Log("🧪 Created 1v1 test battle: TestHero (Sword) vs TestSkeleton (Bow)");
}
///
/// Create a larger battle for stress testing
///
[ContextMenu("Create Large Test Battle")]
public void CreateLargeTestBattle()
{
BattleSetupData.playerSelections.Clear();
BattleSetupData.enemySelections.Clear();
// Create 4 players with different weapons
for (int i = 0; i < 4; i++)
{
BattleSetupData.playerSelections.Add(new CharacterSelection
{
characterName = playerNames[i],
weaponType = availableWeapons[i % availableWeapons.Length]
});
}
// Create 6 enemies with random weapons
for (int i = 0; i < 6; i++)
{
BattleSetupData.enemySelections.Add(new CharacterSelection
{
characterName = enemyNames[i],
weaponType = availableWeapons[Random.Range(0, availableWeapons.Length)]
});
}
// Create inventory data for the large battle
CreateBasicInventoryData();
if (showDebugLogs)
Debug.Log("🧪 Created large test battle: 4 players vs 6 enemies");
}
///
/// Create a test battle designed to test victory looting (weak enemies)
///
[ContextMenu("Create Victory Test Battle")]
public void CreateVictoryTestBattle()
{
BattleSetupData.playerSelections.Clear();
BattleSetupData.enemySelections.Clear();
// Create 2 strong players
for (int i = 0; i < 2; i++)
{
BattleSetupData.playerSelections.Add(new CharacterSelection
{
characterName = playerNames[i],
weaponType = availableWeapons[i % availableWeapons.Length]
});
}
// Create 3 weak enemies
for (int i = 0; i < 3; i++)
{
BattleSetupData.enemySelections.Add(new CharacterSelection
{
characterName = enemyNames[i],
weaponType = "Fists" // Weak weapon
});
}
// Create enhanced session data with stronger players and weaker enemies
var sessionData = new CombatDataTransfer.CombatSessionData
{
battleTerrain = TerrainType.Plains,
battleFeature = FeatureType.None,
weather = Weather.Clear,
timeOfDay = 12f,
playerTeam = new List(),
enemies = new List()
};
// Create strong player data
for (int i = 0; i < BattleSetupData.playerSelections.Count; i++)
{
var player = BattleSetupData.playerSelections[i];
var playerData = new CombatDataTransfer.TeamCharacterCombatData
{
characterName = player.characterName,
maxHealth = 35, // Higher health
currentHealth = 35,
armorClass = 15, // Better armor
equippedWeapon = player.weaponType,
strength = 16, // High strength for carry capacity
dexterity = 14,
constitution = 16,
wisdom = 12,
perception = 14,
miscItems = CreateBasicTestInventory(i)
};
sessionData.playerTeam.Add(playerData);
}
// Create weak enemy data
for (int i = 0; i < BattleSetupData.enemySelections.Count; i++)
{
var enemy = BattleSetupData.enemySelections[i];
var enemyData = new CombatDataTransfer.EnemyCombatData
{
enemyName = enemy.characterName,
maxHealth = 5, // Very low health
currentHealth = 5,
armorClass = 8, // Poor armor
preferredWeapon = enemy.weaponType,
threatLevel = 1 // Low threat
};
sessionData.enemies.Add(enemyData);
}
CombatDataTransfer.SetCombatSession(sessionData);
if (showDebugLogs)
Debug.Log("🧪 Created victory test battle: 2 strong players vs 3 weak enemies (for testing post-battle looting)");
}
///
/// Create a test battle designed to test defeat (weak players)
///
[ContextMenu("Create Defeat Test Battle")]
public void CreateDefeatTestBattle()
{
BattleSetupData.playerSelections.Clear();
BattleSetupData.enemySelections.Clear();
// Create 1 weak player
BattleSetupData.playerSelections.Add(new CharacterSelection
{
characterName = "WeakHero",
weaponType = "Fists"
});
// Create 2 strong enemies
for (int i = 0; i < 2; i++)
{
BattleSetupData.enemySelections.Add(new CharacterSelection
{
characterName = enemyNames[i],
weaponType = "Sword"
});
}
// Create session data with weak player and strong enemies
var sessionData = new CombatDataTransfer.CombatSessionData
{
battleTerrain = TerrainType.Forest,
battleFeature = FeatureType.None,
weather = Weather.Storm,
timeOfDay = 20f, // Night
playerTeam = new List(),
enemies = new List()
};
// Create weak player data
var weakPlayer = new CombatDataTransfer.TeamCharacterCombatData
{
characterName = "WeakHero",
maxHealth = 8, // Very low health
currentHealth = 8,
armorClass = 10, // Poor armor
equippedWeapon = "Fists",
strength = 8,
dexterity = 8,
constitution = 8,
wisdom = 8,
perception = 8,
miscItems = new List { "Health Potion" } // Minimal inventory
};
sessionData.playerTeam.Add(weakPlayer);
// Create strong enemy data
for (int i = 0; i < BattleSetupData.enemySelections.Count; i++)
{
var enemy = BattleSetupData.enemySelections[i];
var enemyData = new CombatDataTransfer.EnemyCombatData
{
enemyName = enemy.characterName,
maxHealth = 25, // High health
currentHealth = 25,
armorClass = 14, // Good armor
preferredWeapon = "Sword",
threatLevel = 5 // High threat
};
sessionData.enemies.Add(enemyData);
}
CombatDataTransfer.SetCombatSession(sessionData);
if (showDebugLogs)
Debug.Log("🧪 Created defeat test battle: 1 weak player vs 2 strong enemies (for testing game over screen)");
}
}