# okmanbro2/taro2-pvz architecture

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

- Interactive diagram: https://gitdiagram.com/okmanbro2/taro2-pvz
- Repository: https://github.com/okmanbro2/taro2-pvz
- Video tour (about a minute): https://gitdiagram.com/okmanbro2/taro2-pvz/video

## Overview

This repository is a customized Taro-based HTML5 multiplayer game runtime, configured around a game.json, with browser gameplay and a Node server. A player joins a game, receives networked game state, interacts with entities and game systems, and sees the world through a renderer. The client excerpt confirms component setup, map loading, physics setup and network connection; sampled server code confirms auth, skin and leaderboard endpoints. The tree and README document editor, badge and account capabilities, but their full runtime wiring was not sampled.

Main entry points: [`server/server.js`](https://github.com/okmanbro2/taro2-pvz/blob/master/server/server.js) (Web server), [`src/client.js`](https://github.com/okmanbro2/taro2-pvz/blob/master/src/client.js) (Client startup), [`src/gameClasses/Unit.js`](https://github.com/okmanbro2/taro2-pvz/blob/master/src/gameClasses/Unit.js) (Game entities), [`engine/components/network/net.io/TaroNetIoComponent.js`](https://github.com/okmanbro2/taro2-pvz/blob/master/engine/components/network/net.io/TaroNetIoComponent.js) (Network transport)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Runtime and game data"]
  node_game_config["Game configuration"]
  node_server_entry["Server entry<br/>[taro.js]"]
  node_web_server["Web server<br/>[server.js]"]
  node_client_entry["Client startup<br/>[client.js]"]
  node_engine["Taro engine<br/>[TaroEngine.js]"]
end

subgraph group_gameplay["Gameplay systems"]
  node_game_logic["Game component<br/>[GameComponent.js]"]
  node_map_regions["Map and regions<br/>[MapComponent.js]"]
  node_region_manager["Region manager<br/>[RegionManager.js]"]
  node_entities["Game entities<br/>[Unit.js]"]
  node_inventory_shop["Inventory and shop"]
  node_quests_scripts["Quests and scripts<br/>[QuestComponent.js]"]
  node_physics["Physics<br/>[Box2dComponent.js]"]
end

subgraph group_presentation["Client presentation"]
  node_renderer["Client renderer<br/>[PhaserRenderer.ts]"]
  node_three_renderer["Three renderer<br/>[Renderer.ts]"]
  node_editor["In-game editor<br/>[DevModeTools.ts]"]
end

subgraph group_multiplayer["Multiplayer services"]
  node_network["Network transport"]
  node_server_events["Server game events"]
  node_client_events["Client game events"]
end

subgraph group_accounts["Accounts and progression"]
  node_auth["Firebase auth<br/>[firebaseAdmin.js]"]
  node_player_data["Player data<br/>[playerData.js]"]
  node_badges["Badges<br/>[badges.js]"]
  node_skins["Skin service<br/>[skins.js]"]
end

node_player(("Player"))

node_player -->|"opens game"| node_web_server
node_game_config -->|"loads game"| node_web_server
node_web_server -->|"serves client"| node_client_entry
node_server_entry -->|"starts"| node_web_server
node_client_entry -->|"configures"| node_engine
node_client_entry -->|"adds component"| node_game_logic
node_client_entry -->|"loads map"| node_map_regions
node_client_entry -->|"adds component"| node_region_manager
node_client_entry -->|"configures"| node_physics
node_client_entry -->|"connects"| node_network
node_game_logic -->|"manages gameplay"| node_entities
node_map_regions -->|"creates regions"| node_region_manager
node_entities -->|"uses physics"| node_physics
node_entities -->|"renders entities"| node_renderer
node_entities -.->|"renders entities"| node_three_renderer
node_player -->|"interacts"| node_client_events
node_client_events -->|"dispatches actions"| node_inventory_shop
node_client_events -->|"receives messages"| node_network
node_network -->|"delivers events"| node_server_events
node_server_events -->|"sends updates"| node_network
node_web_server -->|"verifies tokens"| node_auth
node_web_server -->|"loads leaderboard"| node_player_data
node_web_server -->|"equips skins"| node_skins
node_web_server -.->|"serves badges"| node_badges
node_editor -->|"edits map"| node_map_regions
node_player -.->|"edits game"| node_editor
node_quests_scripts -->|"extends gameplay"| node_game_logic

click node_server_entry "https://github.com/okmanbro2/taro2-pvz/blob/master/server/taro.js"
click node_web_server "https://github.com/okmanbro2/taro2-pvz/blob/master/server/server.js"
click node_client_entry "https://github.com/okmanbro2/taro2-pvz/blob/master/src/client.js"
click node_engine "https://github.com/okmanbro2/taro2-pvz/blob/master/engine/core/TaroEngine.js"
click node_game_logic "https://github.com/okmanbro2/taro2-pvz/blob/master/src/gameClasses/components/GameComponent.js"
click node_map_regions "https://github.com/okmanbro2/taro2-pvz/blob/master/src/gameClasses/components/MapComponent.js"
click node_region_manager "https://github.com/okmanbro2/taro2-pvz/blob/master/src/gameClasses/components/RegionManager.js"
click node_entities "https://github.com/okmanbro2/taro2-pvz/blob/master/src/gameClasses/Unit.js"
click node_inventory_shop "https://github.com/okmanbro2/taro2-pvz/blob/master/src/gameClasses/components/InventoryComponent.js"
click node_quests_scripts "https://github.com/okmanbro2/taro2-pvz/blob/master/src/gameClasses/components/quest/QuestComponent.js"
click node_physics "https://github.com/okmanbro2/taro2-pvz/blob/master/engine/components/physics/box2d/Box2dComponent.js"
click node_renderer "https://github.com/okmanbro2/taro2-pvz/blob/master/ts/src/renderer/phaser/PhaserRenderer.ts"
click node_three_renderer "https://github.com/okmanbro2/taro2-pvz/blob/master/ts/src/renderer/three/Renderer.ts"
click node_editor "https://github.com/okmanbro2/taro2-pvz/blob/master/ts/src/renderer/phaser/classes/devmode/DevModeTools.ts"
click node_network "https://github.com/okmanbro2/taro2-pvz/blob/master/engine/components/network/net.io/TaroNetIoComponent.js"
click node_server_events "https://github.com/okmanbro2/taro2-pvz/blob/master/server/ServerNetworkEvents.js"
click node_client_events "https://github.com/okmanbro2/taro2-pvz/blob/master/src/gameClasses/ClientNetworkEvents.js"
click node_auth "https://github.com/okmanbro2/taro2-pvz/blob/master/server/firebaseAdmin.js"
click node_player_data "https://github.com/okmanbro2/taro2-pvz/blob/master/server/playerData.js"
click node_badges "https://github.com/okmanbro2/taro2-pvz/blob/master/server/badges.js"
click node_skins "https://github.com/okmanbro2/taro2-pvz/blob/master/server/skins.js"

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_game_config,node_server_entry,node_web_server,node_client_entry,node_engine toneBlue
class node_game_logic,node_map_regions,node_region_manager,node_entities,node_inventory_shop,node_quests_scripts,node_physics toneAmber
class node_renderer,node_three_renderer,node_editor toneMint
class node_network,node_server_events,node_client_events toneRose
class node_auth,node_player_data,node_badges,node_skins,node_player toneIndigo
```

## Components

### Runtime and game data

- **Game configuration**
- [Server entry](https://github.com/okmanbro2/taro2-pvz/blob/master/server/taro.js): `server/taro.js`
- [Web server](https://github.com/okmanbro2/taro2-pvz/blob/master/server/server.js): `server/server.js`
- [Client startup](https://github.com/okmanbro2/taro2-pvz/blob/master/src/client.js): `src/client.js`
- [Taro engine](https://github.com/okmanbro2/taro2-pvz/blob/master/engine/core/TaroEngine.js): `engine/core/TaroEngine.js`

### Gameplay systems

- [Game component](https://github.com/okmanbro2/taro2-pvz/blob/master/src/gameClasses/components/GameComponent.js): `src/gameClasses/components/GameComponent.js`
- [Map and regions](https://github.com/okmanbro2/taro2-pvz/blob/master/src/gameClasses/components/MapComponent.js): `src/gameClasses/components/MapComponent.js`
- [Region manager](https://github.com/okmanbro2/taro2-pvz/blob/master/src/gameClasses/components/RegionManager.js): `src/gameClasses/components/RegionManager.js`
- [Game entities](https://github.com/okmanbro2/taro2-pvz/blob/master/src/gameClasses/Unit.js): `src/gameClasses/Unit.js`
- [Inventory and shop](https://github.com/okmanbro2/taro2-pvz/blob/master/src/gameClasses/components/InventoryComponent.js): `src/gameClasses/components/InventoryComponent.js`
- [Quests and scripts](https://github.com/okmanbro2/taro2-pvz/blob/master/src/gameClasses/components/quest/QuestComponent.js): `src/gameClasses/components/quest/QuestComponent.js`
- [Physics](https://github.com/okmanbro2/taro2-pvz/blob/master/engine/components/physics/box2d/Box2dComponent.js): `engine/components/physics/box2d/Box2dComponent.js`

### Client presentation

- [Client renderer](https://github.com/okmanbro2/taro2-pvz/blob/master/ts/src/renderer/phaser/PhaserRenderer.ts): `ts/src/renderer/phaser/PhaserRenderer.ts`
- [Three renderer](https://github.com/okmanbro2/taro2-pvz/blob/master/ts/src/renderer/three/Renderer.ts): `ts/src/renderer/three/Renderer.ts`
- [In-game editor](https://github.com/okmanbro2/taro2-pvz/blob/master/ts/src/renderer/phaser/classes/devmode/DevModeTools.ts): `ts/src/renderer/phaser/classes/devmode/DevModeTools.ts`

### Multiplayer services

- [Network transport](https://github.com/okmanbro2/taro2-pvz/blob/master/engine/components/network/net.io/TaroNetIoComponent.js): `engine/components/network/net.io/TaroNetIoComponent.js`
- [Server game events](https://github.com/okmanbro2/taro2-pvz/blob/master/server/ServerNetworkEvents.js): `server/ServerNetworkEvents.js`
- [Client game events](https://github.com/okmanbro2/taro2-pvz/blob/master/src/gameClasses/ClientNetworkEvents.js): `src/gameClasses/ClientNetworkEvents.js`

### Accounts and progression

- [Firebase auth](https://github.com/okmanbro2/taro2-pvz/blob/master/server/firebaseAdmin.js): `server/firebaseAdmin.js`
- [Player data](https://github.com/okmanbro2/taro2-pvz/blob/master/server/playerData.js): `server/playerData.js`
- [Badges](https://github.com/okmanbro2/taro2-pvz/blob/master/server/badges.js): `server/badges.js`
- [Skin service](https://github.com/okmanbro2/taro2-pvz/blob/master/server/skins.js): `server/skins.js`

### Other components

- **Player**

## Connections

- Player → Web server: opens game
- Game configuration → Web server: loads game
- Web server → Client startup: serves client
- Server entry → Web server: starts
- Client startup → Taro engine: configures
- Client startup → Game component: adds component
- Client startup → Map and regions: loads map
- Client startup → Region manager: adds component
- Client startup → Physics: configures
- Client startup → Network transport: connects
- Game component → Game entities: manages gameplay
- Map and regions → Region manager: creates regions
- Game entities → Physics: uses physics
- Game entities → Client renderer: renders entities
- Game entities → Three renderer: renders entities
- Player → Client game events: interacts
- Client game events → Inventory and shop: dispatches actions
- Client game events → Network transport: receives messages
- Network transport → Server game events: delivers events
- Server game events → Network transport: sends updates
- Web server → Firebase auth: verifies tokens
- Web server → Player data: loads leaderboard
- Web server → Skin service: equips skins
- Web server → Badges: serves badges
- In-game editor → Map and regions: edits map
- Player → In-game editor: edits game
- Quests and scripts → Game component: extends gameplay
