# watabou/towngeneratoros architecture

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

- Interactive diagram: https://gitdiagram.com/watabou/towngeneratoros
- Repository: https://github.com/watabou/towngeneratoros

## Overview

The repository is the Medieval Fantasy City Generator, a Haxe/OpenFL application. The apparent user-to-result workflow is city-generation interaction followed by presentation of a town scene, with mapping, building geometry, and ward types as domain layers. The README confirms the product but gives no implementation details; source excerpts were unavailable, so the links below are tentative and shown as dashed rather than asserted calls.

Main entry points: [`Source/com/watabou/towngenerator/TownScene.hx`](https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/towngenerator/TownScene.hx) (Town Scene), [`Source/com/watabou/towngenerator/mapping/CityMap.hx`](https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/towngenerator/mapping/CityMap.hx) (City Map), [`Source/com/watabou/towngenerator/building/Model.hx`](https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/towngenerator/building/Model.hx) (Building Model), [`Source/com/watabou/towngenerator/Main.hx`](https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/towngenerator/Main.hx) (Application Entry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application"]
  node_main["Application Entry<br/>[Main.hx]"]
  node_state["State Manager<br/>[StateManager.hx]"]
  node_scene["Town Scene<br/>[TownScene.hx]"]
end

subgraph group_town["Town Generation"]
  node_map["City Map<br/>[CityMap.hx]"]
  node_brush["Map Brush<br/>[Brush.hx]"]
  node_palette["Map Palette<br/>[Palette.hx]"]
  node_patchview["Patch View<br/>[PatchView.hx]"]
  node_wards["Ward Types"]
  node_building["Building Model<br/>[Model.hx]"]
  node_topology["Building Topology<br/>[Topology.hx]"]
  node_cutter["Shape Cutter<br/>[Cutter.hx]"]
  node_curtain["Curtain Wall<br/>[CurtainWall.hx]"]
  node_patch["Building Patch<br/>[Patch.hx]"]
end

subgraph group_geometry["Geometry"]
  node_graph["Graph Geometry<br/>[Graph.hx]"]
  node_voronoi["Voronoi Geometry<br/>[Voronoi.hx]"]
  node_polygon["Polygon Geometry<br/>[Polygon.hx]"]
  node_spline["Spline Geometry<br/>[Spline.hx]"]
end

subgraph group_display["Display"]
  node_engine["Display Engine<br/>[Game.hx]"]
  node_atlas["Texture Atlas<br/>[Atlas.hx]"]
  node_movieclip["Movie Clip<br/>[MovieClip.hx]"]
  node_text["Bitmap Text<br/>[BitmapText.hx]"]
  node_ninepatch["Nine Patch<br/>[NinePatch.hx]"]
  node_ui["Interface Controls"]
end

node_user(("User"))

node_user -.->|"starts app"| node_main
node_main -.->|"manages state"| node_state
node_state -.->|"selects scene"| node_scene
node_scene -.->|"presents map"| node_map
node_map -.->|"uses wards"| node_wards
node_map -.->|"uses brush"| node_brush
node_map -.->|"uses palette"| node_palette
node_map -.->|"renders patches"| node_patchview
node_wards -.->|"defines buildings"| node_building
node_building -.->|"uses topology"| node_topology
node_building -.->|"uses cutter"| node_cutter
node_building -.->|"uses walls"| node_curtain
node_building -.->|"uses patches"| node_patch
node_map -.->|"uses geometry"| node_graph
node_map -.->|"uses geometry"| node_voronoi
node_building -.->|"uses geometry"| node_polygon
node_building -.->|"uses geometry"| node_spline
node_scene -.->|"renders through"| node_engine
node_scene -.->|"shows controls"| node_ui
node_scene -.->|"uses assets"| node_atlas
node_scene -.->|"displays clips"| node_movieclip
node_scene -.->|"displays labels"| node_text
node_scene -.->|"draws panels"| node_ninepatch

click node_main "https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/towngenerator/Main.hx"
click node_state "https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/towngenerator/StateManager.hx"
click node_scene "https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/towngenerator/TownScene.hx"
click node_map "https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/towngenerator/mapping/CityMap.hx"
click node_brush "https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/towngenerator/mapping/Brush.hx"
click node_palette "https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/towngenerator/mapping/Palette.hx"
click node_patchview "https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/towngenerator/mapping/PatchView.hx"
click node_wards "https://github.com/watabou/towngeneratoros/tree/master/Source/com/watabou/towngenerator/wards"
click node_building "https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/towngenerator/building/Model.hx"
click node_topology "https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/towngenerator/building/Topology.hx"
click node_cutter "https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/towngenerator/building/Cutter.hx"
click node_curtain "https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/towngenerator/building/CurtainWall.hx"
click node_patch "https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/towngenerator/building/Patch.hx"
click node_graph "https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/geom/Graph.hx"
click node_voronoi "https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/geom/Voronoi.hx"
click node_polygon "https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/geom/Polygon.hx"
click node_spline "https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/geom/Spline.hx"
click node_engine "https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/coogee/Game.hx"
click node_atlas "https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/coogee/Atlas.hx"
click node_movieclip "https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/coogee/MovieClip.hx"
click node_text "https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/coogee/BitmapText.hx"
click node_ninepatch "https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/coogee/NinePatch.hx"
click node_ui "https://github.com/watabou/towngeneratoros/tree/master/Source/com/watabou/towngenerator/ui"

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_state,node_scene,node_user toneBlue
class node_map,node_brush,node_palette,node_patchview,node_wards,node_building,node_topology,node_cutter,node_curtain,node_patch toneAmber
class node_graph,node_voronoi,node_polygon,node_spline toneMint
class node_engine,node_atlas,node_movieclip,node_text,node_ninepatch,node_ui toneRose
```

## Components

### Application

- [Application Entry](https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/towngenerator/Main.hx): `Source/com/watabou/towngenerator/Main.hx`
- [State Manager](https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/towngenerator/StateManager.hx): `Source/com/watabou/towngenerator/StateManager.hx`
- [Town Scene](https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/towngenerator/TownScene.hx): `Source/com/watabou/towngenerator/TownScene.hx`

### Town Generation

- [City Map](https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/towngenerator/mapping/CityMap.hx): `Source/com/watabou/towngenerator/mapping/CityMap.hx`
- [Map Brush](https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/towngenerator/mapping/Brush.hx): `Source/com/watabou/towngenerator/mapping/Brush.hx`
- [Map Palette](https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/towngenerator/mapping/Palette.hx): `Source/com/watabou/towngenerator/mapping/Palette.hx`
- [Patch View](https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/towngenerator/mapping/PatchView.hx): `Source/com/watabou/towngenerator/mapping/PatchView.hx`
- [Ward Types](https://github.com/watabou/towngeneratoros/tree/master/Source/com/watabou/towngenerator/wards): `Source/com/watabou/towngenerator/wards`
- [Building Model](https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/towngenerator/building/Model.hx): `Source/com/watabou/towngenerator/building/Model.hx`
- [Building Topology](https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/towngenerator/building/Topology.hx): `Source/com/watabou/towngenerator/building/Topology.hx`
- [Shape Cutter](https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/towngenerator/building/Cutter.hx): `Source/com/watabou/towngenerator/building/Cutter.hx`
- [Curtain Wall](https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/towngenerator/building/CurtainWall.hx): `Source/com/watabou/towngenerator/building/CurtainWall.hx`
- [Building Patch](https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/towngenerator/building/Patch.hx): `Source/com/watabou/towngenerator/building/Patch.hx`

### Geometry

- [Graph Geometry](https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/geom/Graph.hx): `Source/com/watabou/geom/Graph.hx`
- [Voronoi Geometry](https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/geom/Voronoi.hx): `Source/com/watabou/geom/Voronoi.hx`
- [Polygon Geometry](https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/geom/Polygon.hx): `Source/com/watabou/geom/Polygon.hx`
- [Spline Geometry](https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/geom/Spline.hx): `Source/com/watabou/geom/Spline.hx`

### Display

- [Display Engine](https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/coogee/Game.hx): `Source/com/watabou/coogee/Game.hx`
- [Texture Atlas](https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/coogee/Atlas.hx): `Source/com/watabou/coogee/Atlas.hx`
- [Movie Clip](https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/coogee/MovieClip.hx): `Source/com/watabou/coogee/MovieClip.hx`
- [Bitmap Text](https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/coogee/BitmapText.hx): `Source/com/watabou/coogee/BitmapText.hx`
- [Nine Patch](https://github.com/watabou/towngeneratoros/blob/master/Source/com/watabou/coogee/NinePatch.hx): `Source/com/watabou/coogee/NinePatch.hx`
- [Interface Controls](https://github.com/watabou/towngeneratoros/tree/master/Source/com/watabou/towngenerator/ui): `Source/com/watabou/towngenerator/ui`

### Other components

- **User**

## Connections

- User → Application Entry: starts app
- Application Entry → State Manager: manages state
- State Manager → Town Scene: selects scene
- Town Scene → City Map: presents map
- City Map → Ward Types: uses wards
- City Map → Map Brush: uses brush
- City Map → Map Palette: uses palette
- City Map → Patch View: renders patches
- Ward Types → Building Model: defines buildings
- Building Model → Building Topology: uses topology
- Building Model → Shape Cutter: uses cutter
- Building Model → Curtain Wall: uses walls
- Building Model → Building Patch: uses patches
- City Map → Graph Geometry: uses geometry
- City Map → Voronoi Geometry: uses geometry
- Building Model → Polygon Geometry: uses geometry
- Building Model → Spline Geometry: uses geometry
- Town Scene → Display Engine: renders through
- Town Scene → Interface Controls: shows controls
- Town Scene → Texture Atlas: uses assets
- Town Scene → Movie Clip: displays clips
- Town Scene → Bitmap Text: displays labels
- Town Scene → Nine Patch: draws panels
