# Battle Action System Setup Guide

## Overview
This new battle action system provides a radial decision wheel for selecting character actions including:
- **Move** - Move to a target location
- **Attack** - Attack an enemy target  
- **Use Item** - Use consumable items (healing potions, etc.)
- **Cast Spell** - Cast magical spells (placeholder implementation)
- **Defend** - Defensive stance for damage reduction
- **Run Away** - Retreat from combat

## Setup Instructions

### 1. Scene Setup
Add these components to your BattleScene:

1. **BattleActionSystem** - Main system controller
   - Add to an empty GameObject named "BattleActionSystem"

2. **BattleActionWheel** - The radial menu UI
   - Create a Canvas with these settings:
     - Render Mode: Screen Space - Overlay (or Camera)
     - Canvas Scaler: Scale With Screen Size
   - Add BattleActionWheel script to Canvas or child object

3. **BattleActionIntegration** - Connects new and old systems
   - Add to an empty GameObject named "BattleActionIntegration"

### 2. UI Setup

#### Action Wheel Canvas Structure:
```
Canvas (BattleActionWheel)
├── WheelBackground (Image)
└── WheelCenter (Empty GameObject)
    └── ActionButtons (will be created automatically)
```

#### Action Button Prefab:
Create a prefab with this structure:
```
ActionButton (Button + Image)
├── Icon (Image)
└── Label (TextMeshPro)
```

Use the `ActionButtonCreator.CreateActionButton()` method to create buttons programmatically.

### 3. Integration with Existing System

The new system can run alongside your existing click-drag system:

- **Space Key** - Show action wheel for selected character
- **Left Click** - Select character (when using new system)
- **Toggle** - Switch between old and new systems via `BattleActionIntegration.ToggleActionSystem()`

### 4. Required Assets

#### Icons (Optional but recommended):
- Move icon (arrow or footsteps)
- Attack icon (sword or crossed swords)  
- Item icon (potion or bag)
- Spell icon (magic wand or star)
- Defend icon (shield)
- Run Away icon (running figure)

#### Fonts:
- TextMeshPro font for button labels

### 5. Character Setup

No changes needed to existing Character prefabs! The system will:
- Automatically initialize enhanced action data when needed
- Work with existing health/damage systems
- Use existing weapon systems

### 6. Usage Flow

1. **Character Selection**:
   ```csharp
   // Manual selection
   battleActionIntegration.SelectCharacter(character);
   
   // Or click on character in game
   ```

2. **Action Selection**:
   - Action wheel appears automatically
   - Click desired action type
   - Follow targeting prompts if needed

3. **Action Execution**:
   ```csharp
   // Execute single character
   battleActionSystem.ExecuteCharacterAction(character);
   
   // Execute all players (turn-based)
   battleActionIntegration.ExecuteAllPlayerActions();
   ```

## API Reference

### Key Components

#### BattleActionSystem
- `ShowActionWheel(Character)` - Display action wheel
- `ExecuteCharacterAction(Character)` - Execute selected action
- Events: `OnActionStarted`, `OnActionCompleted`

#### BattleActionWheel  
- `ShowWheel(Character, Vector3)` - Show at world position
- `HideWheel()` - Hide the wheel
- Events: `OnActionSelected`, `OnWheelClosed`

#### BattleActionIntegration
- `SelectCharacter(Character)` - Select for action
- `ExecuteAllPlayerActions()` - Execute all player actions
- `ResetAllPlayerActions()` - Clear all actions for new turn
- `AllPlayersHaveActions()` - Check if all players ready

### Action Types

```csharp
public enum BattleActionType
{
    Move,        // Position targeting
    Attack,      // Enemy targeting  
    UseItem,     // Item selection + optional targeting
    CastSpell,   // Spell selection + optional targeting
    Defend,      // No targeting needed
    Wait,        // No targeting needed
    RunAway      // No targeting needed
}
```

### Enhanced Action Data

```csharp
// Access character's action data
var actionData = character.enhancedActionData as EnhancedCharacterActionData;
if (actionData != null && actionData.hasValidAction)
{
    Debug.Log($"Action: {actionData.GetActionDescription()}");
}
```

## Extending the System

### Adding New Actions:
1. Add to `BattleActionType` enum
2. Update `BattleActionWheel.CreateActionButtons()`
3. Add case to `BattleActionSystem.ExecuteActionCoroutine()`
4. Create execution method in `BattleActionSystem`

### Custom Item/Spell Systems:
Replace placeholder implementations in:
- `ItemSelectionUI.GetCharacterItems()`
- `SpellSelectionUI.GetCharacterSpells()`
- `BattleActionSystem.UseItem()` 
- `BattleActionSystem.CastSpell()`

### Visual Customization:
- Modify colors in `BattleActionWheel`
- Replace button creation in `ActionButtonCreator`
- Add animations to action execution methods

## Testing

Use the debug UI (visible when `useNewActionSystem = true`):
- Select characters
- View action status
- Execute actions manually
- Reset system state
- Toggle between old/new systems

The system includes extensive debug logging with emoji prefixes:
- 🎯 Action selection
- ⚔️ Combat actions
- 🧪 Item usage
- ✨ Spell casting
- 🛡️ Defensive actions

## Troubleshooting

### Common Issues:

1. **Action wheel not showing**: Check Canvas setup and camera assignments
2. **Buttons not working**: Verify Button components and event setup
3. **Targeting not working**: Check LayerMasks in BattleActionSystem
4. **Compilation errors**: Ensure all scripts are in correct folders

### Debug Commands:
```csharp
// Force show action wheel
battleActionSystem.ShowActionWheel(character);

// Check action status
Debug.Log(character.enhancedActionData?.GetActionDescription());

// Reset if stuck
battleActionIntegration.ResetAllPlayerActions();
```

This system provides a solid foundation for complex battle actions while maintaining compatibility with your existing combat system!
