Skip to content

Commit a5b183e

Browse files
feat: update issue references
1 parent e1a9000 commit a5b183e

1 file changed

Lines changed: 55 additions & 55 deletions

File tree

docs/project/roads-tickets-for-implementation.md

Lines changed: 55 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -6,26 +6,26 @@
66
## Ticket Dependency Graph
77

88
```
9-
T01 T02 T03 T04 T05 T06 T07 T08 T09 T10 T11
9+
#1035 #1036 #1037 #1038 #1039 #1040 #1041 #1042 #1043 #1044 #1045
1010
│ │ │ │ │ │ │ │ │ │ │
1111
└──┬──┘ │ │ └──┬──┘ │ │ │ │ │
1212
│ │ │ │ │ │ │ │ │
1313
▼ ▼ ▼ ▼ │ │ │ │ │
14-
T12 ──► T13 ──► T14 ◄─── T15 │ │ │ │ │
14+
#1046 ──► #1047 ──► #1048 ◄─── #1049 │ │ │ │ │
1515
│ │ │ │ │ │
1616
▼ ▼ │ │ │ │
17-
T16 T17 │ │ │ │
17+
#1050 #1051 │ │ │ │
1818
│ │ │ │ │ │
1919
▼ ▼ ▼ ▼ ▼ ▼
20-
T18 ◄── T19 ── T20 ── T21 ── T22
20+
#1052 ◄── #1053 ── #1054 ── #1055 ── #1056
2121
2222
23-
T23
23+
#1057
2424
```
2525

2626
---
2727

28-
## [T01] Add `Road`, `Pavement`, `Bridge` to `MakaMekTerrains` enum
28+
## [#1035] Add `Road`, `Pavement`, `Bridge` to `MakaMekTerrains` enum
2929

3030
**File:** `src/MakaMek.Map/Models/Terrains/MakaMekTerrains.cs`
3131

@@ -42,7 +42,7 @@ T01 T02 T03 T04 T05 T06 T07 T08 T09 T10 T11
4242

4343
---
4444

45-
## [T02] Create `RoadTerrain`, `PavementTerrain`, `BridgeTerrain` classes
45+
## [#1036] Create `RoadTerrain`, `PavementTerrain`, `BridgeTerrain` classes
4646

4747
**Files:**
4848
- `src/MakaMek.Map/Models/Terrains/RoadTerrain.cs` (new)
@@ -60,11 +60,11 @@ All follow the same pattern as `WaterTerrain`, `ClearTerrain`, etc.
6060

6161
**Testable by:** Unit tests for each class verifying all property values. `BridgeTerrain.ToData()` roundtrip test.
6262

63-
**Dependencies:** T01.
63+
**Dependencies:** #1035.
6464

6565
---
6666

67-
## [T03] Update `MakaMekTerrains` source generator references (if any)
67+
## [#1037] Update `MakaMekTerrains` source generator references (if any)
6868

6969
**Note:** No explicit source generator tracks MakaMekTerrains enum. The `MovementCostTypeResolverGenerator` handles MovementCost subtypes, not terrain. Check if any partial method on Terrain needs update. No changes expected.
7070

@@ -74,7 +74,7 @@ All follow the same pattern as `WaterTerrain`, `ClearTerrain`, etc.
7474

7575
---
7676

77-
## [T04] Add `ConstructionFactor` field to `TerrainData` record
77+
## [#1038] Add `ConstructionFactor` field to `TerrainData` record
7878

7979
**File:** `src/MakaMek.Map/Data/TerrainData.cs`
8080

@@ -92,7 +92,7 @@ All follow the same pattern as `WaterTerrain`, `ClearTerrain`, etc.
9292

9393
---
9494

95-
## [T05] Extend `Terrain.GetTerrainType()` and `FromData()` for new terrain types
95+
## [#1039] Extend `Terrain.GetTerrainType()` and `FromData()` for new terrain types
9696

9797
**File:** `src/MakaMek.Map/Models/Terrains/Terrain.cs`
9898

@@ -111,14 +111,14 @@ All follow the same pattern as `WaterTerrain`, `ClearTerrain`, etc.
111111

112112
**Testable by:** Unit tests: create `TerrainData` for each new type, call `FromData()`, verify type and properties. Bridge roundtrip with Height and CF.
113113

114-
**Dependencies:** T01, T02, T04.
114+
**Dependencies:** #1035, #1036, #1038.
115115

116116
**Open Questions:**
117117
- Q2 (blocking): `GetTerrainType()` currently has signature `(MakaMekTerrains, int? height = null)`. Adding CF parameter is a breaking change to the public API. Option: Add optional param `int? constructionFactor = null`. This is the simplest approach but slightly ugly for non-Bridge terrains. Alternative: refactor to accept `TerrainData` directly.
118118

119119
---
120120

121-
## [T06] Add `SkidCheck` to `PilotingSkillRollType` enum
121+
## [#1040] Add `SkidCheck` to `PilotingSkillRollType` enum
122122

123123
**File:** `src/MakaMek.Core/Data/Game/Mechanics/PilotingSkillRollType.cs`
124124

@@ -133,7 +133,7 @@ All follow the same pattern as `WaterTerrain`, `ClearTerrain`, etc.
133133

134134
---
135135

136-
## [T07] Add `Skid` and `BridgeCollapse` to `SegmentEventType` enum
136+
## [#1041] Add `Skid` and `BridgeCollapse` to `SegmentEventType` enum
137137

138138
**File:** `src/MakaMek.Map/Models/SegmentEventType.cs`
139139

@@ -148,7 +148,7 @@ All follow the same pattern as `WaterTerrain`, `ClearTerrain`, etc.
148148

149149
---
150150

151-
## [T08] Create `SkidCheckRollContext` record
151+
## [#1042] Create `SkidCheckRollContext` record
152152

153153
**File:** `src/MakaMek.Core/Data/Game/Mechanics/PilotingSkillRollContexts/SkidCheckRollContext.cs` (new)
154154

@@ -165,11 +165,11 @@ All follow the same pattern as `WaterTerrain`, `ClearTerrain`, etc.
165165

166166
**Testable by:** Unit tests verifying record creation, RollType, HexesMoved, and Render() output.
167167

168-
**Dependencies:** T06.
168+
**Dependencies:** #1040.
169169

170170
---
171171

172-
## [T09] Add `IsRoadOrPaved()` extension method to `HexExtensions`
172+
## [#1043] Add `IsRoadOrPaved()` extension method to `HexExtensions`
173173

174174
**File:** `src/MakaMek.Map/Models/HexExtensions.cs`
175175

@@ -186,11 +186,11 @@ All follow the same pattern as `WaterTerrain`, `ClearTerrain`, etc.
186186

187187
**Testable by:** Unit tests: hex with Road → true, hex with Pavement → true, hex with Bridge → true, hex with Clear → false, hex with LightWoods → false.
188188

189-
**Dependencies:** T01, T02.
189+
**Dependencies:** #1035, #1036.
190190

191191
---
192192

193-
## [T10] Add `Road` value to `TerrainAssetType` enum
193+
## [#1044] Add `Road` value to `TerrainAssetType` enum
194194

195195
**File:** `src/MakaMek.Assets/Models/Terrains/TerrainAssetType.cs`
196196

@@ -205,7 +205,7 @@ All follow the same pattern as `WaterTerrain`, `ClearTerrain`, etc.
205205

206206
---
207207

208-
## [T11] Add `GetRoadTextureImage` to `ITerrainAssetService` and implement in `TerrainCachingService`
208+
## [#1045] Add `GetRoadTextureImage` to `ITerrainAssetService` and implement in `TerrainCachingService`
209209

210210
**Files:**
211211
- `src/MakaMek.Assets/Services/ITerrainAssetService.cs`
@@ -219,14 +219,14 @@ All follow the same pattern as `WaterTerrain`, `ClearTerrain`, etc.
219219

220220
**Testable by:** Unit tests with mock MMTX stream containing `terrains/road/000001.png`. Verify texture returned for known bitmask. Verify null for missing bitmask.
221221

222-
**Dependencies:** T10.
222+
**Dependencies:** #1044.
223223

224224
**Open Questions:**
225225
- Q3: Should Pavement hexes participate in road bitmask connectivity? The PRD says "Road and Bridge neighbors both count toward road connectivity" but doesn't mention Pavement. If Pavement is a broad area (not a strip), it likely should NOT create road connections. If the intent is otherwise, `ComputeCanonicalBitmask` would need to check multiple terrain types. **Recommendation:** For v1, only Road and Bridge count for bitmask connectivity. Pavement hexes use the isolated texture.
226226

227227
---
228228

229-
## [T12] Implement on-road cost substitution in `BattleMap.ConvertPathToSegments()`
229+
## [#1046] Implement on-road cost substitution in `BattleMap.ConvertPathToSegments()`
230230

231231
**File:** `src/MakaMek.Map/Models/BattleMap.cs`
232232

@@ -245,15 +245,15 @@ All follow the same pattern as `WaterTerrain`, `ClearTerrain`, etc.
245245
- Unit test: fromHex is Clear, toHex is Road → cost = underlying terrain cost (not road bonus).
246246
- Unit test: road+woods hex with elevation change → cost = 1 + |elevationChange|.
247247

248-
**Dependencies:** T02 (terrain classes), T09 (IsRoadOrPaved).
248+
**Dependencies:** #1036 (terrain classes), #1043 (IsRoadOrPaved).
249249

250250
**Open Questions:**
251251
- Q4: When on-road with HeavyWoods underlying, the `TerrainMovementCost.TerrainId` is HeavyWoods but value is 1. Is this semantically OK? The PRD says yes: "Hex.MovementCost property itself is not changed." If the downstream consumers need to display the correct terrain name, this could be confusing. Consider whether `TerrainId` should be `Road` when on-road.
252252
- Q5 (known limitation): Pathfinding (A*) doesn't know about road cost reduction. This means the shortest path may not utilize road benefits. It's acceptable for v1 but should be documented.
253253

254254
---
255255

256-
## [T13] Add road/bridge bitmask rendering to `HexControl`
256+
## [#1047] Add road/bridge bitmask rendering to `HexControl`
257257

258258
**Files:**
259259
- `src/MakaMek.Avalonia/MakaMek.Avalonia.Controls/HexControl.cs`
@@ -286,11 +286,11 @@ All follow the same pattern as `WaterTerrain`, `ClearTerrain`, etc.
286286

287287
**Testable by:** Visual/automated test: hex with Road and LightWoods renders in order: baselight woodsroad. Hex with no road neighbors uses isolated texture. Hex connected to 6 road neighbors uses fully-connected texture.
288288

289-
**Dependencies:** T07 (SegmentEventTypenot really needed here, but for understanding event flow), T09 (IsRoadOrPaved), T11 (GetRoadTextureImage), T12 (ConvertPathToSegmentsnot really needed, but movement cost integration).
289+
**Dependencies:** #1041 (SegmentEventTypenot really needed here, but for understanding event flow), #1043 (IsRoadOrPaved), #1045 (GetRoadTextureImage), #1046 (ConvertPathToSegmentsnot really needed, but movement cost integration).
290290

291291
---
292292

293-
## [T14] Create skid to-hit modifier records
293+
## [#1048] Create skid to-hit modifier records
294294

295295
**Files:**
296296
- `src/MakaMek.Core/Models/Game/Mechanics/Modifiers/Attack/SkiddingTargetModifier.cs` (new)
@@ -310,7 +310,7 @@ All follow the same pattern as `WaterTerrain`, `ClearTerrain`, etc.
310310

311311
---
312312

313-
## [T15] Add skidding transient state to `Unit` / `Mech`
313+
## [#1049] Add skidding transient state to `Unit` / `Mech`
314314

315315
**File:** `src/MakaMek.Core/Models/Units/Unit.cs` (or `Mech.cs`)
316316

@@ -330,7 +330,7 @@ All follow the same pattern as `WaterTerrain`, `ClearTerrain`, etc.
330330

331331
---
332332

333-
## [T16] Implement skid trigger detection in `MovementPhase`
333+
## [#1050] Implement skid trigger detection in `MovementPhase`
334334

335335
**File:** `src/MakaMek.Core/Models/Game/Phases/MovementPhase.cs`
336336

@@ -348,7 +348,7 @@ All follow the same pattern as `WaterTerrain`, `ClearTerrain`, etc.
348348
- Call `FallProcessor.ProcessMovementAttempt()` with the context.
349349
- On PSR failure: emit `SegmentEvent(SegmentEventType.Skid, skidDistance)` where `skidDistance =hexesMoved ÷ 2⌉`.
350350
- Set `unit.IsSkidding = true`.
351-
- The fall processor handles the fall and applies half damage per skid hex (see T17).
351+
- The fall processor handles the fall and applies half damage per skid hex (see #1051).
352352

353353
**Pattern:** Mirrors existing `FindWaterEntrySegments()` → PSR fallback flow.
354354

@@ -358,11 +358,11 @@ All follow the same pattern as `WaterTerrain`, `ClearTerrain`, etc.
358358
- Unit: Run movement + no facing change on roadno PSR.
359359
- Unit: Run + facing change on Clear hexno PSR.
360360

361-
**Dependencies:** T06 (SkidCheck PSR type), T07 (Skid SegmentEvent), T08 (SkidCheckRollContext), T09 (IsRoadOrPaved).
361+
**Dependencies:** #1040 (SkidCheck PSR type), #1041 (Skid SegmentEvent), #1042 (SkidCheckRollContext), #1043 (IsRoadOrPaved).
362362

363363
---
364364

365-
## [T17] Implement skid damage (half falling damage per skid hex)
365+
## [#1051] Implement skid damage (half falling damage per skid hex)
366366

367367
**File:** `src/MakaMek.Core/Models/Game/Mechanics/Mechs/Falling/FallingDamageCalculator.cs` (and possibly `FallProcessor`)
368368

@@ -379,11 +379,11 @@ All follow the same pattern as `WaterTerrain`, `ClearTerrain`, etc.
379379

380380
**Testable by:** Unit test: 20-ton Mech skids 4 hexes → standard falling damage per hex = 2, half = 1, total = 4 damage vs normal fall of 1 level = 2 damage.
381381

382-
**Dependencies:** T16 (skid detection calls this).
382+
**Dependencies:** #1050 (skid detection calls this).
383383

384384
---
385385

386-
## [T18] Implement bridge CF check and collapse in `MovementPhase`
386+
## [#1052] Implement bridge CF check and collapse in `MovementPhase`
387387

388388
**File:** `src/MakaMek.Core/Models/Game/Phases/MovementPhase.cs`
389389

@@ -408,7 +408,7 @@ All follow the same pattern as `WaterTerrain`, `ClearTerrain`, etc.
408408
- Unit: Collapsed hex has BridgeTerrain removed.
409409
- Unit: Units on collapsed hex receive falling damage.
410410

411-
**Dependencies:** T02 (BridgeTerrain), T07 (BridgeCollapse SegmentEvent), T09 (IsRoadOrPaved).
411+
**Dependencies:** #1036 (BridgeTerrain), #1041 (BridgeCollapse SegmentEvent), #1043 (IsRoadOrPaved).
412412

413413
**Open Questions:**
414414
- Q8: How to query units on a hex? The current `IBattleMap` / `IGame` doesn't have a `GetUnitsOnHex()` method. Need to add one or iterate all units.
@@ -417,7 +417,7 @@ All follow the same pattern as `WaterTerrain`, `ClearTerrain`, etc.
417417

418418
---
419419

420-
## [T19] Implement under-bridge clearance calculation and enforcement
420+
## [#1053] Implement under-bridge clearance calculation and enforcement
421421

422422
**File:** `src/MakaMek.Map/Models/BattleMap.cs` (and/or movement validation)
423423

@@ -439,15 +439,15 @@ All follow the same pattern as `WaterTerrain`, `ClearTerrain`, etc.
439439
- Same hex, but a hypothetical unit with height 3cannot pass under.
440440
- Unit moving road-to-road on bridgeclearance check does NOT apply (unit is on top, not underneath).
441441

442-
**Dependencies:** T02 (BridgeTerrain), T09 (IsRoadOrPaved).
442+
**Dependencies:** #1036 (BridgeTerrain), #1043 (IsRoadOrPaved).
443443

444444
**Open Questions:**
445445
- Q11: Where exactly does the clearance check go? Options: (a) in pathfinding's level-change validation, (b) in `ConvertPathToSegments`, (c) in `MovementPhase.ProcessMoveCommand()`. Best fit is probably in `MovementPhase` — when processing each non-road segment into a bridge hex, validate clearance before allowing the move.
446446
- Q12: Does the PRD intend clearance to be checked by the client (path UI) or only server-side? For good UX it should prevent selection of invalid hexes in path UI.
447447

448448
---
449449

450-
## [T20] Add localization strings for new types and modifiers
450+
## [#1054] Add localization strings for new types and modifiers
451451

452452
**File:** `tests/MakaMek.Localization.Tests/FakeLocalizationServiceTests.cs` (and corresponding resource files)
453453

@@ -465,11 +465,11 @@ All follow the same pattern as `WaterTerrain`, `ClearTerrain`, etc.
465465

466466
**Testable by:** Existing FakeLocalizationServiceTests pattern.
467467

468-
**Dependencies:** T06, T08, T14.
468+
**Dependencies:** #1040, #1042, #1048.
469469

470470
---
471471

472-
## [T21] Update `MMTX-Terrain-Format.md` documentation
472+
## [#1055] Update `MMTX-Terrain-Format.md` documentation
473473

474474
**File:** `docs/architecture/MMTX-Terrain-Format.md`
475475

@@ -483,11 +483,11 @@ All follow the same pattern as `WaterTerrain`, `ClearTerrain`, etc.
483483

484484
**Testable by:** Manual review.
485485

486-
**Dependencies:** T01, T02, T04, T10, T11.
486+
**Dependencies:** #1035, #1036, #1038, #1044, #1045.
487487

488488
---
489489

490-
## [T22] Wire skidding modifiers into the to-hit calculation system
490+
## [#1056] Wire skidding modifiers into the to-hit calculation system
491491

492492
**File:** `src/MakaMek.Core/Models/Game/Mechanics/ToHitCalculator.cs` (and/or `Mech.GetAttackModifiers()`)
493493

@@ -503,11 +503,11 @@ All follow the same pattern as `WaterTerrain`, `ClearTerrain`, etc.
503503

504504
**Testable by:** Integration test: attacker skiddingto-hit number includes +1 penalty. Target skiddingto-hit number includes +2 bonus for attacker.
505505

506-
**Dependencies:** T14 (modifier records), T15 (IsSkidding state).
506+
**Dependencies:** #1048 (modifier records), #1049 (IsSkidding state).
507507

508508
---
509509

510-
## [T23] End-to-end integration tests
510+
## [#1057] End-to-end integration tests
511511

512512
**Value:** Validates the complete feature set works together.
513513

@@ -526,18 +526,18 @@ All follow the same pattern as `WaterTerrain`, `ClearTerrain`, etc.
526526

527527
| # | Question | Affected Tickets |
528528
|---|----------|-----------------|
529-
| Q1 | Default for ConstructionFactor? PRD says null for non-structural. OK. | T04 |
530-
| Q2 | **Blocking:** `GetTerrainType()` only takes `int? height`. Bridge also needs `ConstructionFactor`. Solution: add optional param `int? constructionFactor = null` or refactor to accept `TerrainData`. | T05 |
531-
| Q3 | Should Pavement count for road bitmask connectivity? | T11, T13 |
532-
| Q4 | On-road, `TerrainMovementCost.TerrainId` is HeavyWoods but value is 1. Is this confusing for UI? | T12 |
533-
| Q5 | Pathfinding doesn't use road cost reduction. Documented limitation. | T12 |
534-
| Q6 | How should skidding modifiers integrate with to-hit calculationvia `Mech.GetAttackModifiers()` or `ToHitCalculator.GetDetailedOtherModifiers()`? | T15, T22 |
535-
| Q7 | When is `IsSkidding` cleared? After movement? After attacks? | T15 |
536-
| Q8 | No `GetUnitsOnHex()` method exists. Need to add or iterate all units. | T18 |
537-
| Q9 | Bridge collapse is per-hex or entire bridge? PRD: per hex. | T18 |
538-
| Q10 | `SegmentEvent` has no data payload beyond Type. Is this sufficient for BridgeCollapse? | T07, T18 |
539-
| Q11 | Where does under-bridge clearance check live? | T19 |
540-
| Q12 | Should clearance be validated client-side (path UI) or only server-side? | T19 |
529+
| Q1 | Default for ConstructionFactor? PRD says null for non-structural. OK. | #1038 |
530+
| Q2 | **Blocking:** `GetTerrainType()` only takes `int? height`. Bridge also needs `ConstructionFactor`. Solution: add optional param `int? constructionFactor = null` or refactor to accept `TerrainData`. | #1039 |
531+
| Q3 | Should Pavement count for road bitmask connectivity? | #1045, #1047 |
532+
| Q4 | On-road, `TerrainMovementCost.TerrainId` is HeavyWoods but value is 1. Is this confusing for UI? | #1046 |
533+
| Q5 | Pathfinding doesn't use road cost reduction. Documented limitation. | #1046 |
534+
| Q6 | How should skidding modifiers integrate with to-hit calculationvia `Mech.GetAttackModifiers()` or `ToHitCalculator.GetDetailedOtherModifiers()`? | #1049, #1056 |
535+
| Q7 | When is `IsSkidding` cleared? After movement? After attacks? | #1049 |
536+
| Q8 | No `GetUnitsOnHex()` method exists. Need to add or iterate all units. | #1052 |
537+
| Q9 | Bridge collapse is per-hex or entire bridge? PRD: per hex. | #1052 |
538+
| Q10 | `SegmentEvent` has no data payload beyond Type. Is this sufficient for BridgeCollapse? | #1041, #1052 |
539+
| Q11 | Where does under-bridge clearance check live? | #1053 |
540+
| Q12 | Should clearance be validated client-side (path UI) or only server-side? | #1053 |
541541

542542
---
543543

0 commit comments

Comments
 (0)