# guess1m/reportspluslistener architecture

> Architecture diagram of the GitHub repository guess1m/reportspluslistener, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/guess1m/reportspluslistener
- Repository: https://github.com/guess1m/reportspluslistener

## Overview

ReportsPlus is an LSPDFR game plugin that collects player, vehicle, and pedestrian context, supports traffic-stop reporting and citation processing, and provides ALPR scans and an on-screen plate display. The principal runtime starts when the player goes on duty: Main initializes settings and menus, then launches background collection and menu fibers; collected world data feeds stop reports and ALPR results, while citation signals are checked and processed in-game. The README gives no capability detail, so the broader map reflects only capabilities evident in sampled source; unsampled modules and their wiring are not expanded.

Main entry points: [`Main.cs`](https://github.com/guess1m/reportspluslistener/blob/master/Main.cs) (Plugin lifecycle), [`Utils/ALPR/ALPRUtils.cs`](https://github.com/guess1m/reportspluslistener/blob/master/Utils/ALPR/ALPRUtils.cs) (ALPR scanner), [`Utils/Data/DataCollection.cs`](https://github.com/guess1m/reportspluslistener/blob/master/Utils/Data/DataCollection.cs) (Game data collection), [`Utils/Menu/MenuProcessing.cs`](https://github.com/guess1m/reportspluslistener/blob/master/Utils/Menu/MenuProcessing.cs) (In-game menus)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_lifecycle["Plugin lifecycle"]
  node_main["Plugin lifecycle<br/>[Main.cs]"]
  node_menu["In-game menus<br/>[MenuProcessing.cs]"]
end

subgraph group_collection["World collection"]
  node_collection["Game data collection<br/>[DataCollection.cs]"]
  node_worlddata["World data records<br/>[WorldDataUtils.cs]"]
end

subgraph group_reporting["Reports and citations"]
  node_traffic["Traffic-stop reports<br/>[WorldDataUtils.cs]"]
  node_citationfile["Citation signal file<br/>[DataCollection.cs]"]
  node_animation["Citation actions<br/>[AnimationUtils.cs]"]
end

subgraph group_alpr["ALPR and display"]
  node_alpr["ALPR scanner<br/>[ALPRUtils.cs]"]
  node_alprdata["Scanner data<br/>[ALPRData.cs]"]
  node_alprrecords[("World vehicle records<br/>[WorldDataUtils.cs]")]
  node_display["Plate display"]
end

subgraph group_support["Settings and domain data"]
  node_config["Settings<br/>[ConfigUtils.cs]"]
  node_misc[("Ped and address data<br/>[Misc.cs]")]
  node_values["Vehicle data lookups<br/>[GetValueMethods.cs]"]
  node_animationutils["Animation helpers<br/>[AnimationUtils.cs]"]
end

node_player(("Player"))
node_externaldata(("Game and plugin APIs"))

node_player -->|"goes on duty"| node_main
node_main -->|"loads settings"| node_config
node_main -->|"initializes and starts"| node_menu
node_main -->|"starts collection"| node_collection
node_main -->|"initializes display"| node_display
node_player -->|"uses controls"| node_menu
node_menu -->|"reads and updates"| node_config
node_menu -->|"configures display"| node_display
node_collection -->|"records stop context"| node_worlddata
node_worlddata -->|"looks up vehicle data"| node_values
node_values -.->|"queries plugin APIs"| node_externaldata
node_worlddata -->|"caches pedestrian data"| node_misc
node_worlddata -->|"writes report data"| node_traffic
node_collection -->|"reads signal"| node_citationfile
node_collection -->|"starts citation processing"| node_animation
node_animation -->|"finds and cites peds"| node_externaldata
node_animation -->|"clears signal"| node_citationfile
node_collection -->|"runs citation animation"| node_animationutils
node_main -->|"cleans up scanner"| node_alpr
node_menu -->|"controls scanner"| node_alpr
node_alpr -->|"uses scanner configuration"| node_alprdata
node_alpr -->|"scans nearby vehicles"| node_externaldata
node_alpr -->|"reads vehicle records"| node_alprrecords
node_alpr -->|"updates scan display"| node_display
node_display -->|"renders game overlay"| node_externaldata

click node_main "https://github.com/guess1m/reportspluslistener/blob/master/Main.cs"
click node_menu "https://github.com/guess1m/reportspluslistener/blob/master/Utils/Menu/MenuProcessing.cs"
click node_config "https://github.com/guess1m/reportspluslistener/blob/master/Utils/ConfigUtils.cs"
click node_collection "https://github.com/guess1m/reportspluslistener/blob/master/Utils/Data/DataCollection.cs"
click node_worlddata "https://github.com/guess1m/reportspluslistener/blob/master/Utils/Data/WorldDataUtils.cs"
click node_misc "https://github.com/guess1m/reportspluslistener/blob/master/Utils/Misc.cs"
click node_values "https://github.com/guess1m/reportspluslistener/blob/master/Utils/GetValueMethods.cs"
click node_traffic "https://github.com/guess1m/reportspluslistener/blob/master/Utils/Data/WorldDataUtils.cs"
click node_citationfile "https://github.com/guess1m/reportspluslistener/blob/master/Utils/Data/DataCollection.cs"
click node_animation "https://github.com/guess1m/reportspluslistener/blob/master/Utils/Animation/AnimationUtils.cs"
click node_alpr "https://github.com/guess1m/reportspluslistener/blob/master/Utils/ALPR/ALPRUtils.cs"
click node_alprdata "https://github.com/guess1m/reportspluslistener/blob/master/Utils/ALPR/ALPRData.cs"
click node_alprrecords "https://github.com/guess1m/reportspluslistener/blob/master/Utils/Data/WorldDataUtils.cs"
click node_display "https://github.com/guess1m/reportspluslistener/blob/master/Utils/ALPR/LicensePlateDisplay.cs"
click node_animationutils "https://github.com/guess1m/reportspluslistener/blob/master/Utils/Animation/AnimationUtils.cs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_menu toneBlue
class node_collection,node_worlddata toneAmber
class node_traffic,node_citationfile,node_animation,node_externaldata toneMint
class node_alpr,node_alprdata,node_alprrecords,node_display toneRose
class node_config,node_misc,node_values,node_animationutils,node_player toneIndigo
```

## Components

### Plugin lifecycle

- [Plugin lifecycle](https://github.com/guess1m/reportspluslistener/blob/master/Main.cs): `Main.cs`
- [In-game menus](https://github.com/guess1m/reportspluslistener/blob/master/Utils/Menu/MenuProcessing.cs): `Utils/Menu/MenuProcessing.cs`

### World collection

- [Game data collection](https://github.com/guess1m/reportspluslistener/blob/master/Utils/Data/DataCollection.cs): `Utils/Data/DataCollection.cs`
- [World data records](https://github.com/guess1m/reportspluslistener/blob/master/Utils/Data/WorldDataUtils.cs): `Utils/Data/WorldDataUtils.cs`

### Reports and citations

- [Traffic-stop reports](https://github.com/guess1m/reportspluslistener/blob/master/Utils/Data/WorldDataUtils.cs): `Utils/Data/WorldDataUtils.cs`
- [Citation signal file](https://github.com/guess1m/reportspluslistener/blob/master/Utils/Data/DataCollection.cs): `Utils/Data/DataCollection.cs`
- [Citation actions](https://github.com/guess1m/reportspluslistener/blob/master/Utils/Animation/AnimationUtils.cs): `Utils/Animation/AnimationUtils.cs`

### ALPR and display

- [ALPR scanner](https://github.com/guess1m/reportspluslistener/blob/master/Utils/ALPR/ALPRUtils.cs): `Utils/ALPR/ALPRUtils.cs`
- [Scanner data](https://github.com/guess1m/reportspluslistener/blob/master/Utils/ALPR/ALPRData.cs): `Utils/ALPR/ALPRData.cs`
- [World vehicle records](https://github.com/guess1m/reportspluslistener/blob/master/Utils/Data/WorldDataUtils.cs): `Utils/Data/WorldDataUtils.cs`
- [Plate display](https://github.com/guess1m/reportspluslistener/blob/master/Utils/ALPR/LicensePlateDisplay.cs): `Utils/ALPR/LicensePlateDisplay.cs`

### Settings and domain data

- [Settings](https://github.com/guess1m/reportspluslistener/blob/master/Utils/ConfigUtils.cs): `Utils/ConfigUtils.cs`
- [Ped and address data](https://github.com/guess1m/reportspluslistener/blob/master/Utils/Misc.cs): `Utils/Misc.cs`
- [Vehicle data lookups](https://github.com/guess1m/reportspluslistener/blob/master/Utils/GetValueMethods.cs): `Utils/GetValueMethods.cs`
- [Animation helpers](https://github.com/guess1m/reportspluslistener/blob/master/Utils/Animation/AnimationUtils.cs): `Utils/Animation/AnimationUtils.cs`

### Other components

- **Player**
- **Game and plugin APIs**

## Connections

- Player → Plugin lifecycle: goes on duty
- Plugin lifecycle → Settings: loads settings
- Plugin lifecycle → In-game menus: initializes and starts
- Plugin lifecycle → Game data collection: starts collection
- Plugin lifecycle → Plate display: initializes display
- Player → In-game menus: uses controls
- In-game menus → Settings: reads and updates
- In-game menus → Plate display: configures display
- Game data collection → World data records: records stop context
- World data records → Vehicle data lookups: looks up vehicle data
- Vehicle data lookups → Game and plugin APIs: queries plugin APIs
- World data records → Ped and address data: caches pedestrian data
- World data records → Traffic-stop reports: writes report data
- Game data collection → Citation signal file: reads signal
- Game data collection → Citation actions: starts citation processing
- Citation actions → Game and plugin APIs: finds and cites peds
- Citation actions → Citation signal file: clears signal
- Game data collection → Animation helpers: runs citation animation
- Plugin lifecycle → ALPR scanner: cleans up scanner
- In-game menus → ALPR scanner: controls scanner
- ALPR scanner → Scanner data: uses scanner configuration
- ALPR scanner → Game and plugin APIs: scans nearby vehicles
- ALPR scanner → World vehicle records: reads vehicle records
- ALPR scanner → Plate display: updates scan display
- Plate display → Game and plugin APIs: renders game overlay
