# benjamin5774/offbalance architecture

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

- Interactive diagram: https://gitdiagram.com/benjamin5774/offbalance
- Repository: https://github.com/benjamin5774/offbalance

## Overview

OffBalance is an Unreal Engine game project centered on ball movement, with a separate gyro-steered ball actor, turning and dead-zone actors, and a SerialCOM plugin exposing serial-port I/O to Unreal/Blueprints. The clearest runtime path in the sampled source is controller input to the MsFallBall pawn and its physics movement component. The Content tree also contains game maps, input assets, and Blueprint assets. Binary assets and unsampled code limit what can be said about their wiring; unverified integration is shown as dashed.

Main entry points: [`Source/OffBalance/MsFallBall.cpp`](https://github.com/benjamin5774/offbalance/blob/main/Source/OffBalance/MsFallBall.cpp) (MsFallBall Pawn), [`Source/OffBalance/MsFallBallController.cpp`](https://github.com/benjamin5774/offbalance/blob/main/Source/OffBalance/MsFallBallController.cpp) (Ball Controller), [`Plugins/SerialCOM/Source/SERIALCOM/Private/SerialCom.cpp`](https://github.com/benjamin5774/offbalance/blob/main/Plugins/SerialCOM/Source/SERIALCOM/Private/SerialCom.cpp) (Serial Port API), [`Source/OffBalance/MsFallBallMovementComponent.cpp`](https://github.com/benjamin5774/offbalance/blob/main/Source/OffBalance/MsFallBallMovementComponent.cpp) (Physics Movement)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_gameplay["Ball Gameplay"]
  node_controller["Ball Controller"]
  node_msball["MsFallBall Pawn<br/>[MsFallBall.cpp]"]
  node_movement["Physics Movement"]
  node_sway["Camera and Actor Sway<br/>[MsFallBall.cpp]"]
  node_mrball["Gyro Ball<br/>[MrFallBall.cpp]"]
end

subgraph group_world["World Actors"]
  node_deadzone["Dead Zone<br/>[DeadZone.cpp]"]
  node_turnzone["Turning Zone<br/>[TrunZone.cpp]"]
  node_dummybear["Dummybear Actor<br/>[Dummybear.cpp]"]
  node_myactor["My Actor<br/>[MyActor.cpp]"]
end

subgraph group_serial["Serial I/O"]
  node_serialapi["Serial Port API<br/>[SerialCom.cpp]"]
  node_serialmodule["Serial Module"]
end

subgraph group_content["Game Content"]
  node_gameassets["Maps and Blueprints"]
  node_inputassets["Input Assets"]
  node_thirdperson["Third-Person Assets"]
end

node_player(("Player"))
node_arduino["Serial Device"]

node_player -.->|"provides input"| node_controller
node_controller -->|"calls Move"| node_msball
node_msball -->|"adds movement input"| node_movement
node_msball -->|"sets physics body"| node_movement
node_msball -->|"updates sway"| node_sway
node_arduino -.->|"exchanges serial data"| node_serialapi
node_serialapi -.->|"supplies parsed steering"| node_mrball

click node_controller "https://github.com/benjamin5774/offbalance/blob/main/Source/OffBalance/MsFallBallController.cpp"
click node_msball "https://github.com/benjamin5774/offbalance/blob/main/Source/OffBalance/MsFallBall.cpp"
click node_movement "https://github.com/benjamin5774/offbalance/blob/main/Source/OffBalance/MsFallBallMovementComponent.cpp"
click node_sway "https://github.com/benjamin5774/offbalance/blob/main/Source/OffBalance/MsFallBall.cpp"
click node_mrball "https://github.com/benjamin5774/offbalance/blob/main/Source/OffBalance/MrFallBall.cpp"
click node_deadzone "https://github.com/benjamin5774/offbalance/blob/main/Source/OffBalance/DeadZone.cpp"
click node_turnzone "https://github.com/benjamin5774/offbalance/blob/main/Source/OffBalance/TrunZone.cpp"
click node_dummybear "https://github.com/benjamin5774/offbalance/blob/main/Source/OffBalance/Dummybear.cpp"
click node_myactor "https://github.com/benjamin5774/offbalance/blob/main/Source/OffBalance/MyActor.cpp"
click node_serialapi "https://github.com/benjamin5774/offbalance/blob/main/Plugins/SerialCOM/Source/SERIALCOM/Private/SerialCom.cpp"
click node_serialmodule "https://github.com/benjamin5774/offbalance/blob/main/Plugins/SerialCOM/Source/SERIALCOM/Private/SERIALCOMModule.cpp"
click node_gameassets "https://github.com/benjamin5774/offbalance/tree/main/Content/Benjamin"
click node_inputassets "https://github.com/benjamin5774/offbalance/blob/main/Content/Benjamin/IA_MsBallMove.uasset"
click node_thirdperson "https://github.com/benjamin5774/offbalance/tree/main/Content/ThirdPerson"

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_controller,node_msball,node_movement,node_sway,node_mrball toneBlue
class node_deadzone,node_turnzone,node_dummybear,node_myactor toneAmber
class node_serialapi,node_serialmodule toneMint
class node_gameassets,node_inputassets,node_thirdperson toneRose
class node_player,node_arduino toneIndigo
```

## Components

### Ball Gameplay

- [Ball Controller](https://github.com/benjamin5774/offbalance/blob/main/Source/OffBalance/MsFallBallController.cpp): `Source/OffBalance/MsFallBallController.cpp`
- [MsFallBall Pawn](https://github.com/benjamin5774/offbalance/blob/main/Source/OffBalance/MsFallBall.cpp): `Source/OffBalance/MsFallBall.cpp`
- [Physics Movement](https://github.com/benjamin5774/offbalance/blob/main/Source/OffBalance/MsFallBallMovementComponent.cpp): `Source/OffBalance/MsFallBallMovementComponent.cpp`
- [Camera and Actor Sway](https://github.com/benjamin5774/offbalance/blob/main/Source/OffBalance/MsFallBall.cpp): `Source/OffBalance/MsFallBall.cpp`
- [Gyro Ball](https://github.com/benjamin5774/offbalance/blob/main/Source/OffBalance/MrFallBall.cpp): `Source/OffBalance/MrFallBall.cpp`

### World Actors

- [Dead Zone](https://github.com/benjamin5774/offbalance/blob/main/Source/OffBalance/DeadZone.cpp): `Source/OffBalance/DeadZone.cpp`
- [Turning Zone](https://github.com/benjamin5774/offbalance/blob/main/Source/OffBalance/TrunZone.cpp): `Source/OffBalance/TrunZone.cpp`
- [Dummybear Actor](https://github.com/benjamin5774/offbalance/blob/main/Source/OffBalance/Dummybear.cpp): `Source/OffBalance/Dummybear.cpp`
- [My Actor](https://github.com/benjamin5774/offbalance/blob/main/Source/OffBalance/MyActor.cpp): `Source/OffBalance/MyActor.cpp`

### Serial I/O

- [Serial Port API](https://github.com/benjamin5774/offbalance/blob/main/Plugins/SerialCOM/Source/SERIALCOM/Private/SerialCom.cpp): `Plugins/SerialCOM/Source/SERIALCOM/Private/SerialCom.cpp`
- [Serial Module](https://github.com/benjamin5774/offbalance/blob/main/Plugins/SerialCOM/Source/SERIALCOM/Private/SERIALCOMModule.cpp): `Plugins/SerialCOM/Source/SERIALCOM/Private/SERIALCOMModule.cpp`

### Game Content

- [Maps and Blueprints](https://github.com/benjamin5774/offbalance/tree/main/Content/Benjamin): `Content/Benjamin`
- [Input Assets](https://github.com/benjamin5774/offbalance/blob/main/Content/Benjamin/IA_MsBallMove.uasset): `Content/Benjamin/IA_MsBallMove.uasset`
- [Third-Person Assets](https://github.com/benjamin5774/offbalance/tree/main/Content/ThirdPerson): `Content/ThirdPerson`

### Other components

- **Player**
- **Serial Device**

## Connections

- Player → Ball Controller: provides input
- Ball Controller → MsFallBall Pawn: calls Move (evidence: `Source/OffBalance/MsFallBallController.cpp`)
- MsFallBall Pawn → Physics Movement: adds movement input (evidence: `Source/OffBalance/MsFallBall.cpp`)
- MsFallBall Pawn → Physics Movement: sets physics body (evidence: `Source/OffBalance/MsFallBall.cpp`)
- MsFallBall Pawn → Camera and Actor Sway: updates sway (evidence: `Source/OffBalance/MsFallBall.cpp`)
- Serial Device → Serial Port API: exchanges serial data
- Serial Port API → Gyro Ball: supplies parsed steering
