Commit b6bf89c
Subsystem 2b: rendered live map in a per-server #map channel (ImageSharp base tile + grid + cargo/heli/chinook markers) (#15)
* chore(map): scaffold Features.Map project + ImageSharp packages
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* feat(map): world-to-pixel coordinate mapper
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* feat(map): MapLayerSet + MarkerPlacement value objects
* feat(map): marker glyph registry (colour + letter per kind)
* feat(map): ImageSharp renderer (base tile + grid + marker glyphs -> PNG)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat(connections): GetMapImageAsync seam (base map JPEG bytes)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat(map): base-map cache singleton
* feat(map): composer gathers base map + markers into a PNG
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat(map): Discord map-channel poster (delete+repost shim)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix(map): isolate delete failures from map repost (PR review)
Wrap DeletePriorBotMessagesAsync in its own try/catch to prevent delete failures (e.g. missing Manage Messages permission) from aborting the repost. OperationCanceledException is rethrown for clean shutdown. Add LogDeleteFailed warning logger and document RecentMessageScan constant.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* feat(workspace): per-server #map channel + map channel locator
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat(map): hosted service with per-server refresh throttle + disconnect-clear
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat(map): AddMap DI extension + host wiring + MapOptions validation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* style(map): apply jb ReformatAndReorder + add NOTICE
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix(map): address Copilot review on PR #15
- Periodic refresh loop: repaint every connected server's #map each
MapRefreshInterval so moving cargo/heli/chinook (stable ids → no
MapMarkersChangedEvent) track, and post the first image on connect.
Marker-change + connect + tick all pass through the existing throttle.
- MapComposer reads dimensions from the new IRustServerQuery.GetMapDimensionsAsync
seam instead of from a marker, so the grid renders on low-activity/zero-marker
servers.
- WorldToPixel + MapRenderer grid scale each axis from its own dimension
(Width/Height) — correct-by-construction for non-square maps.
- MapLayerSet doc: Grid draws lines (labels are 2b-ii), not "lines and labels".
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>1 parent 026b585 commit b6bf89c
42 files changed
Lines changed: 1566 additions & 0 deletions
File tree
- src
- RustPlusBot.Abstractions/Connections
- RustPlusBot.Features.Connections
- Listening
- Supervisor
- RustPlusBot.Features.Map
- Assets
- Composing
- Hosting
- Posting
- Rendering
- RustPlusBot.Features.Workspace
- Localization
- Locating
- Specs
- RustPlusBot.Host
- tests
- RustPlusBot.Features.Connections.Tests
- Fakes
- RustPlusBot.Features.Map.Tests
- RustPlusBot.Features.Workspace.Tests/Locating
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
| 16 | + | |
| 17 | + | |
16 | 18 | | |
17 | 19 | | |
18 | 20 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| 9 | + | |
9 | 10 | | |
10 | 11 | | |
11 | 12 | | |
| |||
16 | 17 | | |
17 | 18 | | |
18 | 19 | | |
| 20 | + | |
19 | 21 | | |
20 | 22 | | |
21 | 23 | | |
| |||
Lines changed: 14 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
34 | 48 | | |
Lines changed: 6 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
67 | 67 | | |
68 | 68 | | |
69 | 69 | | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
70 | 76 | | |
71 | 77 | | |
72 | 78 | | |
Lines changed: 27 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
60 | 60 | | |
61 | 61 | | |
62 | 62 | | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
63 | 66 | | |
64 | 67 | | |
65 | 68 | | |
| |||
408 | 411 | | |
409 | 412 | | |
410 | 413 | | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
| 423 | + | |
| 424 | + | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
| 434 | + | |
| 435 | + | |
| 436 | + | |
| 437 | + | |
411 | 438 | | |
412 | 439 | | |
413 | 440 | | |
| |||
Lines changed: 27 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
184 | 184 | | |
185 | 185 | | |
186 | 186 | | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
187 | 214 | | |
188 | 215 | | |
189 | 216 | | |
| |||
Binary file not shown.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
0 commit comments