# spartanlabsgaming/mygametools architecture

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

- Interactive diagram: https://gitdiagram.com/spartanlabsgaming/mygametools
- Repository: https://github.com/spartanlabsgaming/mygametools

## Overview

GameTools is a Kotlin engine library for reusable 2D game simulation and multiplayer networking. A game client sends input or typed commands to the UDP server; the server decodes them and invokes application callbacks. The application’s world models entities, movement and combat, advances them through ticks, and maintains spatial state; the server can broadcast drawable snapshots back to clients. Map definitions and loading, event publication, and optional simulation-loop driving are supporting capabilities. The map and several runtime integrations are represented from README/tree evidence where their source was not sampled.

Main entry points: [`gametools-net/src/main/kotlin/com/spartanlabs/gaming/networking/GameServer.kt`](https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-net/src/main/kotlin/com/spartanlabs/gaming/networking/GameServer.kt) (GameServer), [`gametools-core/src/main/kotlin/com/spartanlabs/gaming/gameobjects/World.kt`](https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-core/src/main/kotlin/com/spartanlabs/gaming/gameobjects/World.kt) (World), [`gametools-world/src/main/kotlin/com/spartanlabs/gaming/world/map/TiledMap.kt`](https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-world/src/main/kotlin/com/spartanlabs/gaming/world/map/TiledMap.kt) (Tiled map), [`gametools-core/src/main/kotlin/com/spartanlabs/gaming/spatial/SpatialIndex.kt`](https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-core/src/main/kotlin/com/spartanlabs/gaming/spatial/SpatialIndex.kt) (Spatial index)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_world["World and Maps"]
  node_world["World<br/>[World.kt]"]
  node_maploader["Map loader<br/>[MapLoader.kt]"]
  node_map["Tiled map<br/>[TiledMap.kt]"]
  node_terrain["Terrain and obstacles<br/>[TerrainLayer.kt]"]
  node_spawn["Spawn points<br/>[SpawnPoint.kt]"]
end

subgraph group_entities["Game Objects"]
  node_objects["Game objects<br/>[GameObject.kt]"]
  node_actors["Actors and movement<br/>[Actor.kt]"]
  node_combat["Combat and projectiles<br/>[Alive.kt]"]
  node_stats["Stats and buffs<br/>[ModularStat.kt]"]
  node_snapshots["Drawable snapshots<br/>[VisibleObject.kt]"]
end

subgraph group_simulation["Simulation Services"]
  node_spatial["Spatial index<br/>[SpatialIndex.kt]"]
  node_quadtree["Quadtree index"]
  node_grid["Uniform grid<br/>[UniformGrid.kt]"]
  node_loop["Simulation loop<br/>[SimulationLoop.kt]"]
  node_events["World events<br/>[EventBus.kt]"]
  node_eventtypes["Game events<br/>[GameEvent.kt]"]
end

subgraph group_network["Networking"]
  node_server["GameServer<br/>[GameServer.kt]"]
  node_mouse["Mouse input<br/>[MouseAction.kt]"]
  node_codec["Command codec"]
  node_commands["Client commands<br/>[ClientCommand.kt]"]
  node_applier["Command applier"]
end

node_client(("Game client"))
node_udp["UDP transport"]
node_app(("Game application"))

node_client -->|"sends datagrams"| node_udp
node_udp -->|"delivers datagrams"| node_server
node_server -->|"decodes input"| node_mouse
node_server -->|"decodes commands"| node_codec
node_codec -->|"produces commands"| node_commands
node_server -->|"invokes callbacks"| node_app
node_app -.->|"applies commands"| node_applier
node_applier -->|"mutates world"| node_world
node_app -->|"drives gameplay"| node_world
node_maploader -->|"loads map"| node_map
node_map -->|"uses terrain"| node_terrain
node_map -->|"tracks spawns"| node_spawn
node_world -->|"owns objects"| node_objects
node_objects -->|"extends objects"| node_actors
node_actors -->|"extends actors"| node_combat
node_combat -->|"uses stats"| node_stats
node_world -->|"maintains positions"| node_spatial
node_quadtree -->|"implements index"| node_spatial
node_grid -->|"implements index"| node_spatial
node_loop -->|"ticks world"| node_world
node_world -->|"publishes events"| node_events
node_events -->|"delivers events"| node_eventtypes
node_server -->|"broadcasts snapshots"| node_snapshots
node_server -->|"broadcasts state"| node_client

click node_server "https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-net/src/main/kotlin/com/spartanlabs/gaming/networking/GameServer.kt"
click node_mouse "https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-net/src/main/kotlin/com/spartanlabs/gaming/networking/MouseAction.kt"
click node_codec "https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-net/src/main/kotlin/com/spartanlabs/gaming/networking/command/ClientCommandCodec.kt"
click node_commands "https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-net/src/main/kotlin/com/spartanlabs/gaming/networking/command/ClientCommand.kt"
click node_applier "https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-net/src/main/kotlin/com/spartanlabs/gaming/networking/command/StandardCommandApplier.kt"
click node_world "https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-core/src/main/kotlin/com/spartanlabs/gaming/gameobjects/World.kt"
click node_maploader "https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-world/src/main/kotlin/com/spartanlabs/gaming/world/map/MapLoader.kt"
click node_map "https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-world/src/main/kotlin/com/spartanlabs/gaming/world/map/TiledMap.kt"
click node_terrain "https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-world/src/main/kotlin/com/spartanlabs/gaming/world/map/TerrainLayer.kt"
click node_spawn "https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-world/src/main/kotlin/com/spartanlabs/gaming/world/map/SpawnPoint.kt"
click node_objects "https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-core/src/main/kotlin/com/spartanlabs/gaming/gameobjects/GameObject.kt"
click node_actors "https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-core/src/main/kotlin/com/spartanlabs/gaming/gameobjects/Actor.kt"
click node_combat "https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-core/src/main/kotlin/com/spartanlabs/gaming/gameobjects/Alive.kt"
click node_stats "https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-core/src/main/kotlin/com/spartanlabs/gaming/gameobjects/ModularStat.kt"
click node_snapshots "https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-core/src/main/kotlin/com/spartanlabs/gaming/gameobjects/VisibleObject.kt"
click node_spatial "https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-core/src/main/kotlin/com/spartanlabs/gaming/spatial/SpatialIndex.kt"
click node_quadtree "https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-core/src/main/kotlin/com/spartanlabs/gaming/spatial/QuadtreeSpatialIndex.kt"
click node_grid "https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-core/src/main/kotlin/com/spartanlabs/gaming/spatial/UniformGrid.kt"
click node_loop "https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-core/src/main/kotlin/com/spartanlabs/gaming/simulation/SimulationLoop.kt"
click node_events "https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-core/src/main/kotlin/com/spartanlabs/gaming/event/EventBus.kt"
click node_eventtypes "https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-core/src/main/kotlin/com/spartanlabs/gaming/event/GameEvent.kt"

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_world,node_maploader,node_map,node_terrain,node_spawn,node_client toneBlue
class node_objects,node_actors,node_combat,node_stats,node_snapshots toneAmber
class node_spatial,node_quadtree,node_grid,node_loop,node_events,node_eventtypes toneMint
class node_server,node_mouse,node_codec,node_commands,node_applier toneRose
class node_udp,node_app toneIndigo
```

## Components

### World and Maps

- [World](https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-core/src/main/kotlin/com/spartanlabs/gaming/gameobjects/World.kt): `gametools-core/src/main/kotlin/com/spartanlabs/gaming/gameobjects/World.kt`
- [Map loader](https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-world/src/main/kotlin/com/spartanlabs/gaming/world/map/MapLoader.kt): `gametools-world/src/main/kotlin/com/spartanlabs/gaming/world/map/MapLoader.kt`
- [Tiled map](https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-world/src/main/kotlin/com/spartanlabs/gaming/world/map/TiledMap.kt): `gametools-world/src/main/kotlin/com/spartanlabs/gaming/world/map/TiledMap.kt`
- [Terrain and obstacles](https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-world/src/main/kotlin/com/spartanlabs/gaming/world/map/TerrainLayer.kt): `gametools-world/src/main/kotlin/com/spartanlabs/gaming/world/map/TerrainLayer.kt`
- [Spawn points](https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-world/src/main/kotlin/com/spartanlabs/gaming/world/map/SpawnPoint.kt): `gametools-world/src/main/kotlin/com/spartanlabs/gaming/world/map/SpawnPoint.kt`

### Game Objects

- [Game objects](https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-core/src/main/kotlin/com/spartanlabs/gaming/gameobjects/GameObject.kt): `gametools-core/src/main/kotlin/com/spartanlabs/gaming/gameobjects/GameObject.kt`
- [Actors and movement](https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-core/src/main/kotlin/com/spartanlabs/gaming/gameobjects/Actor.kt): `gametools-core/src/main/kotlin/com/spartanlabs/gaming/gameobjects/Actor.kt`
- [Combat and projectiles](https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-core/src/main/kotlin/com/spartanlabs/gaming/gameobjects/Alive.kt): `gametools-core/src/main/kotlin/com/spartanlabs/gaming/gameobjects/Alive.kt`
- [Stats and buffs](https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-core/src/main/kotlin/com/spartanlabs/gaming/gameobjects/ModularStat.kt): `gametools-core/src/main/kotlin/com/spartanlabs/gaming/gameobjects/ModularStat.kt`
- [Drawable snapshots](https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-core/src/main/kotlin/com/spartanlabs/gaming/gameobjects/VisibleObject.kt): `gametools-core/src/main/kotlin/com/spartanlabs/gaming/gameobjects/VisibleObject.kt`

### Simulation Services

- [Spatial index](https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-core/src/main/kotlin/com/spartanlabs/gaming/spatial/SpatialIndex.kt): `gametools-core/src/main/kotlin/com/spartanlabs/gaming/spatial/SpatialIndex.kt`
- [Quadtree index](https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-core/src/main/kotlin/com/spartanlabs/gaming/spatial/QuadtreeSpatialIndex.kt): `gametools-core/src/main/kotlin/com/spartanlabs/gaming/spatial/QuadtreeSpatialIndex.kt`
- [Uniform grid](https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-core/src/main/kotlin/com/spartanlabs/gaming/spatial/UniformGrid.kt): `gametools-core/src/main/kotlin/com/spartanlabs/gaming/spatial/UniformGrid.kt`
- [Simulation loop](https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-core/src/main/kotlin/com/spartanlabs/gaming/simulation/SimulationLoop.kt): `gametools-core/src/main/kotlin/com/spartanlabs/gaming/simulation/SimulationLoop.kt`
- [World events](https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-core/src/main/kotlin/com/spartanlabs/gaming/event/EventBus.kt): `gametools-core/src/main/kotlin/com/spartanlabs/gaming/event/EventBus.kt`
- [Game events](https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-core/src/main/kotlin/com/spartanlabs/gaming/event/GameEvent.kt): `gametools-core/src/main/kotlin/com/spartanlabs/gaming/event/GameEvent.kt`

### Networking

- [GameServer](https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-net/src/main/kotlin/com/spartanlabs/gaming/networking/GameServer.kt): `gametools-net/src/main/kotlin/com/spartanlabs/gaming/networking/GameServer.kt`
- [Mouse input](https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-net/src/main/kotlin/com/spartanlabs/gaming/networking/MouseAction.kt): `gametools-net/src/main/kotlin/com/spartanlabs/gaming/networking/MouseAction.kt`
- [Command codec](https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-net/src/main/kotlin/com/spartanlabs/gaming/networking/command/ClientCommandCodec.kt): `gametools-net/src/main/kotlin/com/spartanlabs/gaming/networking/command/ClientCommandCodec.kt`
- [Client commands](https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-net/src/main/kotlin/com/spartanlabs/gaming/networking/command/ClientCommand.kt): `gametools-net/src/main/kotlin/com/spartanlabs/gaming/networking/command/ClientCommand.kt`
- [Command applier](https://github.com/spartanlabsgaming/mygametools/blob/master/gametools-net/src/main/kotlin/com/spartanlabs/gaming/networking/command/StandardCommandApplier.kt): `gametools-net/src/main/kotlin/com/spartanlabs/gaming/networking/command/StandardCommandApplier.kt`

### Other components

- **Game client**
- **UDP transport**
- **Game application**

## Connections

- Game client → UDP transport: sends datagrams
- UDP transport → GameServer: delivers datagrams
- GameServer → Mouse input: decodes input
- GameServer → Command codec: decodes commands
- Command codec → Client commands: produces commands
- GameServer → Game application: invokes callbacks
- Game application → Command applier: applies commands
- Command applier → World: mutates world
- Game application → World: drives gameplay
- Map loader → Tiled map: loads map
- Tiled map → Terrain and obstacles: uses terrain
- Tiled map → Spawn points: tracks spawns
- World → Game objects: owns objects
- Game objects → Actors and movement: extends objects
- Actors and movement → Combat and projectiles: extends actors
- Combat and projectiles → Stats and buffs: uses stats
- World → Spatial index: maintains positions
- Quadtree index → Spatial index: implements index
- Uniform grid → Spatial index: implements index
- Simulation loop → World: ticks world
- World → World events: publishes events
- World events → Game events: delivers events
- GameServer → Drawable snapshots: broadcasts snapshots
- GameServer → Game client: broadcasts state
