Files
ShadowrunCharSheet/.plan/issue-97-initiative-combat-tracker.md

68 lines
3.6 KiB
Markdown

# Issue #97: Initiative and Combat Round Tracker
## Summary
Add an initiative and combat round tracking system to the Combat tab. This includes rolling initiative using the character's Reaction + Intuition + configurable initiative dice, tracking combat rounds, initiative passes, displaying the current initiative score, and showing action economy reminders per pass.
## Implementation Plan
### Step 1: Create CombatTracker model class
**File**: `sharedUI/src/commonMain/kotlin/org/shahondin1624/model/charactermodel/CombatTracker.kt`
Create a data class (NOT serialized, as combat state is transient/session-only) holding:
- `initiativeScore: Int` - Current initiative score (after rolling)
- `initiativeDice: Int` - Number of initiative dice (default 1, can be increased by augmentations)
- `currentRound: Int` - Current combat round (starts at 1)
- `currentPass: Int` - Current initiative pass (starts at 1)
- `isInCombat: Boolean` - Whether combat is active
- `actionsUsed: Set<ActionType>` - Actions used this pass
Create an `ActionType` enum: `FreeAction`, `SimpleAction1`, `SimpleAction2`, `ComplexAction`
- In SR5e: each pass you get 1 Free Action + either 2 Simple Actions OR 1 Complex Action
Helper functions:
- `rollInitiative(reactionPlusIntuition: Int, dice: Int): CombatTracker` - rolls initiative dice, sets score
- `nextPass(): CombatTracker` - advances to next pass (reduces initiative by 10), or to next round if score <= 0
- `nextRound(): CombatTracker` - increments round, resets pass to 1 (requires re-rolling initiative)
- `resetCombat(): CombatTracker` - resets everything
- `useAction(action: ActionType): CombatTracker` - marks action as used
- `resetActions(): CombatTracker` - clears used actions for new pass
- `hasMultiplePasses(): Boolean` - initiative > 10 means extra passes
- `passesRemaining(): Int` - how many initiative passes the character gets this round
### Step 2: Add CombatTrackerPanel UI composable
**File**: `sharedUI/src/commonMain/kotlin/org/shahondin1624/lib/components/charactermodel/CombatTrackerPanel.kt`
Create the UI panel with:
- **Initiative section**: "Roll Initiative" button, configurable initiative dice count (1-5), display current initiative score
- **Round tracker**: Display "Round X / Pass Y", increment/reset buttons
- **Action economy**: Show available actions per pass (Free, Simple x2 OR Complex), toggle buttons to mark used
- Use existing Card/Panel pattern from other panels (DamageMonitorPanel, etc.)
### Step 3: Add test tags for combat tracker
**File**: Update `TestTags.kt` with new constants for combat tracker elements.
### Step 4: Add string resources
**File**: Update `strings.xml` with all combat tracker labels.
### Step 5: Integrate CombatTrackerPanel into CombatContent
**File**: Update `CharacterSheetPage.kt` to add the CombatTrackerPanel above the existing DamageMonitorPanel in the Combat tab.
The CombatTracker state will be managed as `remember` state in the CombatContent composable (not persisted) since combat is a session-only activity.
### Step 6: Add unit tests
**File**: `sharedUI/src/commonTest/kotlin/org/shahondin1624/CombatTrackerTest.kt`
Test:
- Initiative rolling produces valid scores
- Round counter increments correctly
- Pass tracking works (initiative - 10 per pass)
- Action economy tracking
- Reset functionality
## Acceptance Criteria Checklist
1. [ ] Roll initiative button that uses character's initiative attributes + dice
2. [ ] Combat round counter with increment/reset
3. [ ] Initiative pass tracking for multiple passes
4. [ ] Current initiative score displayed during combat
5. [ ] Action economy reminder per pass