names/module-graph.json:126 模块的 Kind/职责/依赖/导出/锚点,533 条依赖边,入口 13431(出度 46,依赖链深 17 层)。docs/ArchitectureModules.md:依赖图摘要 + 40 个游戏模块逐条 + 依赖分层(由数据生成)。docs/ArchitectureRuntime.md:启动引导/网络层/Redux/UI 系统/资源与渲染/空间与对象模型 6 条链路,64 条关键函数([证据] 77 / [推断] 15)。names/tostate-map.json + docs/StateMap.md:TOState 实为 89 字段(非估计的 60),89/89 由「toString 字段→槽位」与「根 reducer v8 的实参顺序→ntb 形参→w8 字段顺序」两条独立链路交叉验证,唯一未映射的是只读的 launchParams。
473 lines
31 KiB
Markdown
473 lines
31 KiB
Markdown
# 3DTank 架构模块调研
|
||
|
||
> 本文件内容全部由 `3DTank/names/module-graph.json` 的数据生成(一次性内联 node 命令,仓库不保留生成脚本);计数、依赖、分层均非手工绘制。
|
||
|
||
## 1. 总览
|
||
|
||
- 模块总数:**126**(均为 webpack 代码模块;index.json 中其余条目是资源模块,不在本调研范围)
|
||
- 按 Kind:游戏本体 **40** / Kotlin生态库 **22** / 第三方库 **64**
|
||
- 依赖边总数:**533**;孤立模块(无出度且无入度):**3** 个
|
||
- 依赖层次最深(最长依赖链):**Level 17**
|
||
|
||
### 1.1 依赖与结构的抽取方法(覆盖率)
|
||
|
||
- **依赖(DependsOn)**:取模块工厂第 3 个参数作为 webpack require(形如 `(t, n, i) => {` 里的 `i`),再扫描 `i(<id>)` 静态调用,且 id 必须命中已知代码模块 id 集合。**126/126 模块都执行了抽取**,其中 **97 个模块抽到 ≥1 条边(77%)**;**29 个模块 DependsOn 为空**,原因是:24 个模块工厂只有 1~2 个参数(编译产物里根本没有 require 参数),5 个模块有 require 参数但源码无静态 `i(<id>)` 调用(7793、14766、17323、55920、94965;其中 55920 用 `t.require(n)` 动态取模块,无法静态解析)。`index.json` 只含 id/type/path,**不含依赖信息**,故依赖全部来自源码扫描。
|
||
- **Kind**:按 dir.file 职责描述判定。职责点名可识别外部包/产品(React、ReactDOM、Scheduler、Sentry、qrcode、fflate、Emotion、underscore、inline-style-prefixer、prop-types、react-is、react-list、hoist-non-react-statics、@preact/signals-react、WebViewJavascriptBridge、Google Play Billing、Yandex Metrica、Dijkstra 库等)→ 第三方库;Kotlin/JS 编译出的通用基础设施(kotlin-stdlib、kotlinx.serialization、kotlinx.coroutines、atomicfu、ByteBuffer、DOM/CSS 构建器、RBuilder、Kotlin<->React 桥、kotlin-redux 框架核心、通用工具模块)→ Kotlin生态库;其余游戏业务逻辑(客户端、协议编解码、模型注册、UI/HUD、战斗、资源、音频、埋点、游戏引擎、启动入口)→ 游戏本体。规则表已写死为显式 id 列表,126 个模块全部命中、无默认兜底。
|
||
- **Anchors**:优先取字符串字面量(长度 3~90,滤掉 HTML/CSS 噪声词与纯符号/数字串,CSS 函数名如 `image-set(` 保留),按 `跨模块出现次数`(仅 1 个模块出现 +4、≤3 个 +2、>40 个 -4)+ `错误信息关键词`(not found / exception / invalid / failed / unknown 等 +5)+ `camelCase 标识符`(+4)打分取前 5;**字面量不足 3 个时**用该模块内出现次数少的高辨识度标识符(导出名 / 属性名,如 `getPositions`、`createRoot`)补齐,纯转发模块补转发目标 `i(<id>)`。仍有 6 个模块(17323、19074、29545、31584、58309、99295)没有任何可用锚点,其 `Anchors` 为空数组(不编造)。
|
||
- **顶层类/函数**:统计最浅缩进层的 `function NAME(` 声明(Kotlin/JS 产物会把函数声明提升到同一层);名称首字母大写计入 TopLevelClasses(Kotlin 类名 PascalCase,压缩后仍有大写开头,如 71105 中可见 `ResourceBatchLoadException`),其余计入 TopLevelFunctions。这是启发式口径,非精确语义。
|
||
|
||
### 1.2 代码量分布(按字节 Top 20)
|
||
|
||
| # | 模块 | 字节 | KB | Kind |
|
||
|---|---|---|---|---|
|
||
| 1 | `module_82347` | 5498676 | 5370 | 游戏本体 |
|
||
| 2 | `module_87072` | 3775340 | 3687 | 游戏本体 |
|
||
| 3 | `module_10032` | 1536764 | 1501 | 游戏本体 |
|
||
| 4 | `module_85183` | 1176860 | 1149 | 游戏本体 |
|
||
| 5 | `module_92980` | 822309 | 803.0 | 游戏本体 |
|
||
| 6 | `module_47243` | 534291 | 521.8 | 游戏本体 |
|
||
| 7 | `module_71105` | 372886 | 364.1 | 游戏本体 |
|
||
| 8 | `module_21300` | 355930 | 347.6 | 游戏本体 |
|
||
| 9 | `module_37036` | 347491 | 339.3 | Kotlin生态库 |
|
||
| 10 | `module_18334` | 303005 | 295.9 | 游戏本体 |
|
||
| 11 | `module_70130` | 293925 | 287.0 | 游戏本体 |
|
||
| 12 | `module_85196` | 235678 | 230.2 | 游戏本体 |
|
||
| 13 | `module_45555` | 224856 | 219.6 | 第三方库 |
|
||
| 14 | `module_36659` | 182712 | 178.4 | 游戏本体 |
|
||
| 15 | `module_63383` | 177741 | 173.6 | Kotlin生态库 |
|
||
| 16 | `module_55088` | 148469 | 145.0 | 游戏本体 |
|
||
| 17 | `module_52943` | 145059 | 141.7 | Kotlin生态库 |
|
||
| 18 | `module_3569` | 141181 | 137.9 | 游戏本体 |
|
||
| 19 | `module_9539` | 131066 | 128.0 | Kotlin生态库 |
|
||
| 20 | `module_30285` | 123696 | 120.8 | 第三方库 |
|
||
|
||
## 2. 依赖图摘要
|
||
|
||
### 2.1 入度 Top 15(被最多模块依赖)
|
||
|
||
| 模块 | 入度 | Kind | 职责 |
|
||
|---|---|---|---|
|
||
| `module_37036` | 59 | Kotlin生态库 | Kotlin/JS 标准库(kotlin-stdlib-js)的运行时核心模块 |
|
||
| `module_52943` | 39 | Kotlin生态库 | 网页游戏/应用底层工具库,认设备,管键盘,翻译,报错,调用浏览器本地存储,服务管理 |
|
||
| `module_61860` | 24 | 游戏本体 | 网络连接与游戏对象模型的核心模块,Kotlin/JS 编译产物。它把客户端和服务端连接起来,并管理游戏对象的生命周期。 |
|
||
| `module_24635` | 24 | Kotlin生态库 | Kotlin/JS 二进制序列化/反序列化(Protocol Buffer 风格)编解码框架 |
|
||
| `module_32088` | 18 | 游戏本体 | Alternativa3D,3D 数学库,用 Kotlin 编写 |
|
||
| `module_71105` | 15 | 游戏本体 | 游戏资源加载系统(Resource Loader) |
|
||
| `module_89613` | 15 | Kotlin生态库 | Kotlin Coroutines (kotlinx.coroutines) 核心基础设施的 JS 移植版 |
|
||
| `module_31908` | 12 | 游戏本体 | 游戏战斗(Battle)域的协议编解码模块 |
|
||
| `module_92980` | 11 | 游戏本体 | 使用 WebGL 技术开发的3D 游戏引擎或大型 3D 交互应用的渲染核心模块 |
|
||
| `module_7552` | 10 | 第三方库 | 转发实现 |
|
||
| `module_85196` | 8 | 游戏本体 | 游戏车库(Garage)系统的协议编解码模块,属于同一个坦克对战类游戏。它负责定义和注册与“车库/装备/商店”相关的网络协议消息的二进制编解码器。 |
|
||
| `module_3569` | 8 | 游戏本体 | 游戏客户端的输入与坦克预览模块 |
|
||
| `module_85667` | 8 | 游戏本体 | 客户端协议编解码模块 |
|
||
| `module_88693` | 8 | 游戏本体 | 网络协议与数据模型层的实现,主要负责处理客户端与服务器之间关于社交、好友、举报、通知权限等非战斗数据的序列化与反序列化,并管理相关的网络路由和回调。 |
|
||
| `module_10849` | 8 | Kotlin生态库 | Kotlin/JS 编译后的 Redux 状态管理框架核心模块 |
|
||
|
||
### 2.2 出度 Top 15(依赖最多模块)
|
||
|
||
| 模块 | 出度 | Kind | 职责 |
|
||
|---|---|---|---|
|
||
| `module_82347` | 46 | 游戏本体 | 负责注册大厅、车库、商店、部落、战斗结算等几乎所有核心 UI 界面的组件样式与逻辑。 |
|
||
| `module_13431` | 46 | 游戏本体 | Kotlin/JS 编译后的游戏客户端启动入口模块,负责整个游戏的初始化、渲染和启动流程。 |
|
||
| `module_18334` | 28 | 游戏本体 | 游戏客户端的总装配/依赖注入模块 |
|
||
| `module_10032` | 25 | 游戏本体 | 游戏客户端核心 Redux 状态管理模块。Redux 架构 |
|
||
| `module_87072` | 24 | 游戏本体 | 战斗系统,底盘与物理系统,战斗模式,物品池和特效系统,空投与补给系统,地图与场景渲染 |
|
||
| `module_21300` | 19 | 游戏本体 | Kotlin/JS 游戏战斗内 HUD(战斗界面)与用户交互系统 |
|
||
| `module_70130` | 19 | 游戏本体 | 游戏战斗场景(Battle)的模型注册与初始化模块 |
|
||
| `module_71105` | 16 | 游戏本体 | 游戏资源加载系统(Resource Loader) |
|
||
| `module_84441` | 13 | 第三方库 | 负责把文本数据编码成 QR 码的模块矩阵。qrcode 库 |
|
||
| `module_47243` | 11 | 游戏本体 | 游戏客户端"面板(Panel)系统"的协议编解码模块,用 Kotlin 编写。它是整个项目中最大的协议模块之一,定义了面板 UI 相关的所有枚举、数据类、编解码器。 |
|
||
| `module_52943` | 9 | Kotlin生态库 | 网页游戏/应用底层工具库,认设备,管键盘,翻译,报错,调用浏览器本地存储,服务管理 |
|
||
| `module_24923` | 9 | Kotlin生态库 | CSS-in-JS 样式引擎(类似 styled-components / Emotion / Stitches 的实现),用 Kotlin 编写并编译成 JS。它负责在运行时动态生成、管理和注入 CSS,支持 React 组件样式、主题、媒体查询、动画等。 |
|
||
| `module_57128` | 9 | 游戏本体 | UI 交互与触控/鼠标手势处理模块 |
|
||
| `module_85183` | 8 | 游戏本体 | 定义并注册游戏中各种网络协议消息的编解码器(Codec),用于在客户端与服务器之间序列化/反序列化数据。 |
|
||
| `module_3569` | 8 | 游戏本体 | 游戏客户端的输入与坦克预览模块 |
|
||
|
||
### 2.3 叶子模块(无出度,共 29 个)
|
||
|
||
其中属于游戏本体的(1 个):`module_26482`
|
||
|
||
其余叶子模块:`module_905`(第三方库)、`module_7793`(第三方库)、`module_13532`(第三方库)、`module_14766`(第三方库)、`module_15330`(第三方库)、`module_17259`(第三方库)、`module_17323`(第三方库)、`module_19074`(第三方库)、`module_21973`(第三方库)、`module_27736`(第三方库)、`module_29545`(第三方库)、`module_31509`(第三方库)、`module_31584`(Kotlin生态库)、`module_37036`(Kotlin生态库)、`module_38335`(第三方库)、`module_43319`(第三方库)、`module_44794`(第三方库)、`module_55920`(第三方库)、`module_57328`(第三方库)、`module_64280`(第三方库)、`module_66610`(第三方库)、`module_76074`(第三方库)、`module_77672`(第三方库)、`module_78231`(第三方库)、`module_78931`(第三方库)、`module_79763`(第三方库)、`module_94965`(Kotlin生态库)、`module_99295`(第三方库)
|
||
|
||
### 2.4 孤立模块(既不被依赖也不依赖别人,共 3 个)
|
||
|
||
- `module_26482`(0.7 KB,游戏本体)Service Worker 注册模块
|
||
- `module_76074`(1.4 KB,第三方库)Yandex Metrica(俄版 Google Analytics)的集成模块,用于加载分析脚本并暴露事件上报接口。
|
||
- `module_78231`(5.2 KB,第三方库)WebView JavaScript Bridge 的加载与实现模块,用于原生 App(iOS/Android)与网页之间的双向通信。
|
||
|
||
## 3. 游戏本体模块逐条(40 个)
|
||
|
||
### `module_82347`(5370 KB)
|
||
- 职责:负责注册大厅、车库、商店、部落、战斗结算等几乎所有核心 UI 界面的组件样式与逻辑。
|
||
- 依赖的模块:`59411`, `7552`, `40293`, `28485`, `1901`, `14766`, `37036`, `52943`, `59131`, `90875`, `24923`, `61860`, `10032`, `57128`, `18334`, …(共 46 个)
|
||
- 顶层类 / 其它顶层函数:5256 / 5656
|
||
- 锚点:`imageBackgroundMessageError`、`getDerivedStateFromError`、`commonBlockMessageError`
|
||
|
||
### `module_87072`(3687 KB)
|
||
- 职责:战斗系统,底盘与物理系统,战斗模式,物品池和特效系统,空投与补给系统,地图与场景渲染
|
||
- 依赖的模块:`37036`, `52943`, `61860`, `24635`, `85183`, `61378`, `10032`, `10849`, `32088`, `31908`, `72834`, `55088`, `3569`, `92980`, `97556`, …(共 24 个)
|
||
- 顶层类 / 其它顶层函数:3094 / 3327
|
||
- 锚点:`Invalid weapon effect timings`、`Mesh texture not found`、`Invalid supply type `
|
||
|
||
### `module_10032`(1501 KB)
|
||
- 职责:游戏客户端核心 Redux 状态管理模块。Redux 架构
|
||
- 依赖的模块:`37036`, `10849`, `9539`, `52943`, `61430`, `31908`, `89803`, `47243`, `85667`, `88693`, `54199`, `41164`, `99527`, `85196`, `31584`, …(共 25 个)
|
||
- 顶层类 / 其它顶层函数:1100 / 1196
|
||
- 锚点:`FPS seems awful but cannot decrease the settings`、`Not found params for property `、`Unexpected response status `
|
||
|
||
### `module_85183`(1149 KB)
|
||
- 职责:定义并注册游戏中各种网络协议消息的编解码器(Codec),用于在客户端与服务器之间序列化/反序列化数据。
|
||
- 依赖的模块:`37036`, `24635`, `71105`, `61860`, `31908`, `32088`, `85196`, `52943`
|
||
- 顶层类 / 其它顶层函数:1164 / 1241
|
||
- 锚点:`pointCaptureStartNegativeSound`、`pointCaptureStartPositiveSound`、`pointCaptureStopNegativeSound`
|
||
|
||
### `module_92980`(803.0 KB)
|
||
- 职责:使用 WebGL 技术开发的3D 游戏引擎或大型 3D 交互应用的渲染核心模块
|
||
- 依赖的模块:`52943`, `37036`, `32088`, `97556`, `72834`, `9345`
|
||
- 顶层类 / 其它顶层函数:494 / 534
|
||
- 锚点:`Cannot use default vertex array object`、`Cannot create empty LodGroup`、`Cannot remove last layout`
|
||
|
||
### `module_47243`(521.8 KB)
|
||
- 职责:游戏客户端"面板(Panel)系统"的协议编解码模块,用 Kotlin 编写。它是整个项目中最大的协议模块之一,定义了面板 UI 相关的所有枚举、数据类、编解码器。
|
||
- 依赖的模块:`37036`, `24635`, `71105`, `31908`, `52943`, `25377`, `85196`, `85667`, `61860`, `88693`, `99527`
|
||
- 顶层类 / 其它顶层函数:605 / 643
|
||
- 锚点:`disabledNotificationTypes`、`expireActiveTimeRewards`、`expireRewardTimeRewards`
|
||
|
||
### `module_71105`(364.1 KB)
|
||
- 职责:游戏资源加载系统(Resource Loader)
|
||
- 依赖的模块:`37036`, `9539`, `89613`, `52943`, `61860`, `24635`, `9345`, `92980`, `32088`, `72834`, `16100`, `61430`, `36734`, `97556`, `7426`, …(共 16 个)
|
||
- 顶层类 / 其它顶层函数:226 / 250
|
||
- 锚点:`Unexpected 3D file format for `、`Invalid file extension `、`Unknown resource type `
|
||
|
||
### `module_21300`(347.6 KB)
|
||
- 职责:Kotlin/JS 游戏战斗内 HUD(战斗界面)与用户交互系统
|
||
- 依赖的模块:`7552`, `36659`, `82347`, `37036`, `24923`, `3569`, `10032`, `59131`, `52943`, `63383`, `10849`, `7426`, `90875`, `41164`, `31908`, …(共 19 个)
|
||
- 顶层类 / 其它顶层函数:348 / 385
|
||
- 锚点:`containerUserNickNameClanTag`、`commonContainerIconOptions`、`inputContainerSpectators`
|
||
|
||
### `module_18334`(295.9 KB)
|
||
- 职责:游戏客户端的总装配/依赖注入模块
|
||
- 依赖的模块:`37036`, `37504`, `10849`, `52943`, `10032`, `61860`, `47243`, `85667`, `88693`, `10283`, `85196`, `32088`, `3569`, `71105`, `99527`, …(共 28 个)
|
||
- 顶层类 / 其它顶层函数:237 / 266
|
||
- 锚点:`vkInitFailed`、`initError`、`Cannot find SteamAPI for SteamPaymentModel`
|
||
|
||
### `module_70130`(287.0 KB)
|
||
- 职责:游戏战斗场景(Battle)的模型注册与初始化模块
|
||
- 依赖的模块:`37036`, `52943`, `61860`, `87072`, `10032`, `92980`, `61378`, `31908`, `85183`, `10849`, `3569`, `36734`, `97556`, `32088`, `71105`, …(共 19 个)
|
||
- 顶层类 / 其它顶层函数:260 / 280
|
||
- 锚点:`onGrahpicsSettingsChange`、`onBattleSettingsChange`、`lightingEffectService`
|
||
|
||
### `module_85196`(230.2 KB)
|
||
- 职责:游戏车库(Garage)系统的协议编解码模块,属于同一个坦克对战类游戏。它负责定义和注册与“车库/装备/商店”相关的网络协议消息的二进制编解码器。
|
||
- 依赖的模块:`37036`, `24635`, `71105`, `85667`, `32088`, `61860`, `52943`
|
||
- 顶层类 / 其它顶层函数:312 / 342
|
||
- 锚点:`staticCollisionBoxes`、`mainCollisionBox`、`skyboxFrontSide`
|
||
|
||
### `module_36659`(178.4 KB)
|
||
- 职责:游戏客户端的纹理/资源注册与加载系统
|
||
- 依赖的模块:`37036`, `89613`, `52943`, `92980`, `71105`
|
||
- 顶层类 / 其它顶层函数:292 / 319
|
||
- 锚点:`desktopHudNuclearRechargeFlashBackground`、`deviceFasterHorizontalTrackingRailgun`、`deviceFasterHorizontalTrackingVulcan`
|
||
|
||
### `module_55088`(145.0 KB)
|
||
- 职责:物理引擎与碰撞检测系统,同样是 Kotlin/JS 编译产物。
|
||
- 依赖的模块:`32088`, `37036`, `52943`
|
||
- 顶层类 / 其它顶层函数:105 / 112
|
||
- 锚点:`Bound box size is zero`、`Negative mass`、`Level `
|
||
|
||
### `module_3569`(137.9 KB)
|
||
- 职责:游戏客户端的输入与坦克预览模块
|
||
- 依赖的模块:`37036`, `32088`, `52943`, `92980`, `9345`, `55088`, `97556`, `7426`
|
||
- 顶层类 / 其它顶层函数:130 / 133
|
||
- 锚点:`onPointerLockError`、`Cannot get free screen pointer!`、`Cannot find parent`
|
||
|
||
### `module_37504`(104.5 KB)
|
||
- 职责:游戏客户端"氏族(Clan)系统"的协议编解码模块,用 Kotlin 编写
|
||
- 依赖的模块:`37036`, `24635`, `52943`, `61860`
|
||
- 顶层类 / 其它顶层函数:103 / 110
|
||
- 锚点:`Enum item not found for code `、`modelRegistry`、`modelService`
|
||
|
||
### `module_61378`(92.7 KB)
|
||
- 职责:游戏世界(World)与实体-组件系统(ECS)的核心模块
|
||
- 依赖的模块:`37036`, `52943`, `92980`, `3569`, `32088`, `55088`, `89613`, `97556`
|
||
- 顶层类 / 其它顶层函数:66 / 73
|
||
- 锚点:`World.addGameEffect cannot add effect during update.`、`Cannot remove all while dispatching`、`Cannot dispose while dispatching`
|
||
|
||
### `module_10283`(91.4 KB)
|
||
- 职责:Kotlin/JS 编译后的协议模型注册模块
|
||
- 依赖的模块:`37036`, `24635`, `71105`, `52943`, `61860`, `67222`
|
||
- 顶层类 / 其它顶层函数:77 / 82
|
||
- 锚点:`proBattlesLimitSound`、`socialNetworkParams`、`entranceBackgrounds`
|
||
|
||
### `module_97675`(90.0 KB)
|
||
- 职责:WebView JS‑Native 双向通信桥(Bridge)
|
||
- 依赖的模块:`37036`, `52943`, `61430`, `9539`, `89613`
|
||
- 顶层类 / 其它顶层函数:30 / 53
|
||
- 锚点:`Invalid result structure`、`checkUnfinishedPurchases`、`finishVerifiedPurchase`
|
||
|
||
### `module_89803`(85.1 KB)
|
||
- 职责:游戏/应用中用于处理“匹配系统”和“对战大厅”网络通信和数据序列化的核心代码库。
|
||
- 依赖的模块:`37036`, `24635`, `31908`, `61860`, `71105`, `85667`, `52943`
|
||
- 顶层类 / 其它顶层函数:78 / 91
|
||
- 锚点:`matchmakingModeRanks`、`optionsDefaults`、`supportedModes`
|
||
|
||
### `module_85667`(80.6 KB)
|
||
- 职责:客户端协议编解码模块
|
||
- 依赖的模块:`37036`, `24635`, `71105`, `52943`, `61860`
|
||
- 顶层类 / 其它顶层函数:143 / 141
|
||
- 锚点:`browserExtensionsToDetect`、`stateWithCaptcha`、`clientKey`
|
||
|
||
### `module_32088`(79.7 KB)
|
||
- 职责:Alternativa3D,3D 数学库,用 Kotlin 编写
|
||
- 依赖的模块:`37036`, `9539`
|
||
- 顶层类 / 其它顶层函数:26 / 35
|
||
- 锚点:`Failed requirement.`、` +
|
||
this.z1z_1 +
|
||
`、` +
|
||
this.a20_1 +
|
||
`
|
||
|
||
### `module_31908`(77.2 KB)
|
||
- 职责:游戏战斗(Battle)域的协议编解码模块
|
||
- 依赖的模块:`37036`, `24635`, `88693`, `52943`, `61860`
|
||
- 顶层类 / 其它顶层函数:104 / 110
|
||
- 锚点:`experiencePremiumBonusByActions`、`suspiciousByIpUserIds`、`suspiciousUserIds`
|
||
|
||
### `module_61860`(74.9 KB)
|
||
- 职责:网络连接与游戏对象模型的核心模块,Kotlin/JS 编译产物。它把客户端和服务端连接起来,并管理游戏对象的生命周期。
|
||
- 依赖的模块:`24635`, `37036`, `52943`, `32088`, `72834`, `89613`, `61430`, `9539`
|
||
- 顶层类 / 其它顶层函数:69 / 72
|
||
- 锚点:`Constructor codec not found for model `、`Param config-template not found in url`、`Config load exception with status `
|
||
|
||
### `module_9345`(69.5 KB)
|
||
- 职责:A3D 二进制 3D 模型格式 的完整解析器
|
||
- 依赖的模块:`37036`, `72834`, `32088`, `97556`
|
||
- 顶层类 / 其它顶层函数:52 / 68
|
||
- 锚点:`Unknown attribute type id `、`Unknown attribute type `、` not found `
|
||
|
||
### `module_89679`(58.4 KB)
|
||
- 职责:集成 Google Play 计费 API
|
||
- 依赖的模块:`89613`, `10032`, `37036`, `52943`, `97675`, `10849`, `56077`, `47243`
|
||
- 顶层类 / 其它顶层函数:32 / 32
|
||
- 锚点:`Failed to complete payment response with fail`、`API not supported in this browser context`、`Unknown BridgeBillingService shop type`
|
||
|
||
### `module_16100`(57.0 KB)
|
||
- 职责:Kotlin/JS 编译后的战斗地图(BattleMap)协议模型注册模块
|
||
- 依赖的模块:`37036`, `24635`, `52943`
|
||
- 顶层类 / 其它顶层函数:74 / 82
|
||
- 锚点:`collisionGeometryOutsideGamingZone`、`collisionGeometry`、`textureParameter`
|
||
|
||
### `module_25377`(52.7 KB)
|
||
- 职责:游戏客户端与服务器之间的"通知/事件"协议编解码层,用 Kotlin 编写。它基于模块 24635 的二进制编解码框架,定义了所有服务器→客户端的通知消息类型及其序列化格式。
|
||
- 依赖的模块:`37036`, `24635`, `31908`, `52943`, `61860`, `85667`, `99527`
|
||
- 顶层类 / 其它顶层函数:61 / 69
|
||
- 锚点:`Enum item not found for code `、`wsProto`、`modelRegistry`
|
||
|
||
### `module_13431`(46.6 KB)
|
||
- 职责:Kotlin/JS 编译后的游戏客户端启动入口模块,负责整个游戏的初始化、渲染和启动流程。
|
||
- 依赖的模块:`30285`, `81886`, `37036`, `82347`, `21300`, `10032`, `89613`, `41164`, `52943`, `7426`, `3569`, `92980`, `10849`, `97675`, `61860`, …(共 46 个)
|
||
- 顶层类 / 其它顶层函数:44 / 38
|
||
- 锚点:`onVisibilityChanged`、`lockScreenLandscape`、`requestFullscreen`
|
||
|
||
### `module_36734`(40.5 KB)
|
||
- 职责:游戏客户端的音频系统,用 Kotlin 编写。它基于 Web Audio API 实现了完整的音效播放引擎,包括:音频解码、声道管理、优先级调度、3D 空间音效、音量/静音控制、分组增益
|
||
- 依赖的模块:`37036`, `32088`, `52943`, `89613`, `7426`
|
||
- 顶层类 / 其它顶层函数:35 / 26
|
||
- 锚点:`audioContextService`、`onChannelRecycled`、`effectiveGain`
|
||
|
||
### `module_54199`(39.8 KB)
|
||
- 职责:游戏聊天系统的网络协议编解码模块
|
||
- 依赖的模块:`37036`, `24635`, `88693`, `52943`, `61860`
|
||
- 顶层类 / 其它顶层函数:37 / 54
|
||
- 锚点:`linksWhiteList`、`battleIdHex`、`battleLinks`
|
||
|
||
### `module_88693`(34.3 KB)
|
||
- 职责:网络协议与数据模型层的实现,主要负责处理客户端与服务器之间关于社交、好友、举报、通知权限等非战斗数据的序列化与反序列化,并管理相关的网络路由和回调。
|
||
- 依赖的模块:`37036`, `24635`, `52943`, `61860`
|
||
- 顶层类 / 其它顶层函数:27 / 49
|
||
- 锚点:`Enum item not found for code `、`No enum constant projects.tanks.multiplatform.users.model.keys.KeyTypeEnum.`、`modelRegistry`
|
||
|
||
### `module_1510`(30.9 KB)
|
||
- 职责:库Kotlin/JS 编译的支付/交易协议处理器模块
|
||
- 依赖的模块:`37036`, `24635`, `52943`, `61860`
|
||
- 顶层类 / 其它顶层函数:31 / 47
|
||
- 锚点:`questToAchievementMap`、`itemIdMap`、`Enum item not found for code `
|
||
|
||
### `module_57128`(29.9 KB)
|
||
- 职责:UI 交互与触控/鼠标手势处理模块
|
||
- 依赖的模块:`14766`, `32088`, `37036`, `52943`, `31908`, `92980`, `71105`, `7426`, `59131`
|
||
- 顶层类 / 其它顶层函数:26 / 13
|
||
- 锚点:`Not found icon for `、`getBattleModeLocalizedShortName`、`intertialScroll`
|
||
|
||
### `module_45686`(15.0 KB)
|
||
- 职责:游戏客户端的模型注册与空间(Space)加载系统,用 Kotlin 编写。它负责把服务器下发的模型数据注册到客户端的模型注册表中,并管理"空间"(游戏场景/实例)的加载与切换。
|
||
- 依赖的模块:`37036`, `61860`, `29554`, `52943`, `71105`, `24635`
|
||
- 顶层类 / 其它顶层函数:3 / 24
|
||
- 锚点:`onError`、`gameTypeRegistry`、`modelRegister`
|
||
|
||
### `module_41164`(13.2 KB)
|
||
- 职责:游戏客户端的分析(Analytics)与埋点系统,用 Kotlin 编写。它负责向多个分析平台(Google Analytics、Yandex Metrica、自有分析服务)上报用户行为事件,包括登录、注册、战斗开始、购买、教程进度等。
|
||
- 依赖的模块:`37036`, `61430`, `97675`, `52943`
|
||
- 顶层类 / 其它顶层函数:8 / 22
|
||
- 锚点:`currencyCode`、`ecommerce`、`substage`
|
||
|
||
### `module_99527`(10.9 KB)
|
||
- 职责:Protobuf媒体编解码器 + 时间周期配置 + 参数校验
|
||
- 依赖的模块:`37036`, `24635`, `52943`, `61860`
|
||
- 顶层类 / 其它顶层函数:20 / 11
|
||
- 锚点:`FORBIDDEN`、`Enum item not found for code `、`modelRegistry`
|
||
|
||
### `module_29554`(9.7 KB)
|
||
- 职责:游戏客户端的模型/对象数据加载协议编解码模块
|
||
- 依赖的模块:`37036`, `24635`, `61860`, `71105`, `52943`
|
||
- 顶层类 / 其它顶层函数:18 / 0
|
||
- 锚点:`modelsData`、`modelService`、`_loadDependencies_dependenciesCodec`
|
||
|
||
### `module_67222`(8.1 KB)
|
||
- 职责:社交网络登录与账号绑定的网络协议模块
|
||
- 依赖的模块:`37036`, `24635`, `52943`, `61860`
|
||
- 顶层类 / 其它顶层函数:19 / 2
|
||
- 锚点:`failedRedirectUrl`、`codec_failedRedirectUrl`、`Enum item not found for code `
|
||
|
||
### `module_85745`(4.0 KB)
|
||
- 职责:资源图片帧动画相关的网络序列化 / 反序列化
|
||
- 依赖的模块:`37036`, `24635`, `52943`
|
||
- 顶层类 / 其它顶层函数:5 / 2
|
||
- 锚点:`Enum item not found for code `、` +
|
||
this.y1we_1 +
|
||
`、` +
|
||
this.z1we_1 +
|
||
`
|
||
|
||
### `module_26482`(0.7 KB)
|
||
- 职责:Service Worker 注册模块
|
||
- 依赖的模块:无(DependsOn 为空)
|
||
- 顶层类 / 其它顶层函数:0 / 0
|
||
- 锚点:`serviceWorker`、`SW registration failed: `、`manifest`
|
||
|
||
## 4. 依赖层次(由 DependsOn 计算,非手工绘制)
|
||
|
||
Level 定义:无依赖 = Level 0,否则 = 1 + 依赖的最大 Level(存在少量循环依赖,回边被递归守卫截断,取近似最长链)。
|
||
|
||
- **Level 0**(29 个):游戏本体 1 个(`26482`);Kotlin生态库/第三方库 28 个
|
||
- **Level 1**(24 个):游戏本体 0 个;Kotlin生态库/第三方库 24 个
|
||
- **Level 2**(16 个):游戏本体 1 个(`32088`);Kotlin生态库/第三方库 15 个
|
||
- **Level 3**(10 个):游戏本体 0 个;Kotlin生态库/第三方库 10 个
|
||
- **Level 4**(5 个):游戏本体 1 个(`9345`);Kotlin生态库/第三方库 4 个
|
||
- **Level 5**(3 个):游戏本体 0 个;Kotlin生态库/第三方库 3 个
|
||
- **Level 6**(5 个):游戏本体 4 个(`92980`、`55088`、`97675`、`36734`);Kotlin生态库/第三方库 1 个
|
||
- **Level 7**(5 个):游戏本体 5 个(`3569`、`61860`、`16100`、`41164`、`85745`);Kotlin生态库/第三方库 0 个
|
||
- **Level 8**(8 个):游戏本体 7 个(`71105`、`37504`、`61378`、`88693`、`1510`、`99527`、`67222`);Kotlin生态库/第三方库 1 个
|
||
- **Level 9**(6 个):游戏本体 6 个(`36659`、`10283`、`85667`、`31908`、`54199`、`29554`);Kotlin生态库/第三方库 0 个
|
||
- **Level 10**(5 个):游戏本体 5 个(`85196`、`89803`、`25377`、`57128`、`45686`);Kotlin生态库/第三方库 0 个
|
||
- **Level 11**(2 个):游戏本体 2 个(`85183`、`47243`);Kotlin生态库/第三方库 0 个
|
||
- **Level 12**(1 个):游戏本体 1 个(`10032`);Kotlin生态库/第三方库 0 个
|
||
- **Level 13**(2 个):游戏本体 2 个(`87072`、`89679`);Kotlin生态库/第三方库 0 个
|
||
- **Level 14**(1 个):游戏本体 1 个(`18334`);Kotlin生态库/第三方库 0 个
|
||
- **Level 15**(2 个):游戏本体 2 个(`82347`、`70130`);Kotlin生态库/第三方库 0 个
|
||
- **Level 16**(1 个):游戏本体 1 个(`21300`);Kotlin生态库/第三方库 0 个
|
||
- **Level 17**(1 个):游戏本体 1 个(`13431`);Kotlin生态库/第三方库 0 个
|
||
|
||
### 4.1 骨架图(Mermaid,节点 = 入度最高的 12 个游戏本体模块 + 入口 `13431`/装配 `18334`,边取自 DependsOn 且两端都在节点集内)
|
||
|
||
```mermaid
|
||
graph LR
|
||
N61860["61860"]
|
||
N32088["32088"]
|
||
N71105["71105"]
|
||
N31908["31908"]
|
||
N92980["92980"]
|
||
N3569["3569"]
|
||
N85196["85196"]
|
||
N85667["85667"]
|
||
N88693["88693"]
|
||
N10032["10032"]
|
||
N36734["36734"]
|
||
N36659["36659"]
|
||
N13431["13431"]
|
||
N18334["18334"]
|
||
N61860 --> N32088
|
||
N71105 --> N61860
|
||
N71105 --> N92980
|
||
N71105 --> N32088
|
||
N71105 --> N36734
|
||
N31908 --> N88693
|
||
N31908 --> N61860
|
||
N92980 --> N32088
|
||
N3569 --> N32088
|
||
N3569 --> N92980
|
||
N85196 --> N71105
|
||
N85196 --> N85667
|
||
N85196 --> N32088
|
||
N85196 --> N61860
|
||
N85667 --> N71105
|
||
N85667 --> N61860
|
||
N88693 --> N61860
|
||
N10032 --> N31908
|
||
N10032 --> N85667
|
||
N10032 --> N88693
|
||
N10032 --> N85196
|
||
N10032 --> N32088
|
||
N10032 --> N3569
|
||
N10032 --> N36659
|
||
N10032 --> N92980
|
||
N10032 --> N36734
|
||
N10032 --> N61860
|
||
N36734 --> N32088
|
||
N36659 --> N92980
|
||
N36659 --> N71105
|
||
N13431 --> N10032
|
||
N13431 --> N3569
|
||
N13431 --> N92980
|
||
N13431 --> N61860
|
||
N13431 --> N31908
|
||
N13431 --> N85667
|
||
N13431 --> N88693
|
||
N13431 --> N85196
|
||
N13431 --> N36734
|
||
N13431 --> N71105
|
||
N13431 --> N18334
|
||
N13431 --> N36659
|
||
N18334 --> N10032
|
||
N18334 --> N61860
|
||
N18334 --> N85667
|
||
N18334 --> N88693
|
||
N18334 --> N85196
|
||
N18334 --> N32088
|
||
N18334 --> N3569
|
||
N18334 --> N71105
|
||
N18334 --> N92980
|
||
N18334 --> N31908
|
||
N18334 --> N36734
|
||
```
|
||
|
||
### 4.2 节点对照表
|
||
|
||
| 节点 | 入度 | 出度 | 职责 |
|
||
|---|---|---|---|
|
||
| `61860` | 24 | 8 | 网络连接与游戏对象模型的核心模块,Kotlin/JS 编译产物。它把客户端和服务端连接起来,并管理游戏对象的生命周期。 |
|
||
| `32088` | 18 | 2 | Alternativa3D,3D 数学库,用 Kotlin 编写 |
|
||
| `71105` | 15 | 16 | 游戏资源加载系统(Resource Loader) |
|
||
| `31908` | 12 | 5 | 游戏战斗(Battle)域的协议编解码模块 |
|
||
| `92980` | 11 | 6 | 使用 WebGL 技术开发的3D 游戏引擎或大型 3D 交互应用的渲染核心模块 |
|
||
| `3569` | 8 | 8 | 游戏客户端的输入与坦克预览模块 |
|
||
| `85196` | 8 | 7 | 游戏车库(Garage)系统的协议编解码模块,属于同一个坦克对战类游戏。它负责定义和注册与“车库/装备/商店”相关的网络协议消息的二进制编解码器。 |
|
||
| `85667` | 8 | 5 | 客户端协议编解码模块 |
|
||
| `88693` | 8 | 4 | 网络协议与数据模型层的实现,主要负责处理客户端与服务器之间关于社交、好友、举报、通知权限等非战斗数据的序列化与反序列化,并管理相关的网络路由和回调。 |
|
||
| `10032` | 7 | 25 | 游戏客户端核心 Redux 状态管理模块。Redux 架构 |
|
||
| `36734` | 7 | 5 | 游戏客户端的音频系统,用 Kotlin 编写。它基于 Web Audio API 实现了完整的音效播放引擎,包括:音频解码、声道管理、优先级调度、3D 空间音效、音量/静音控制、分组增益 |
|
||
| `36659` | 6 | 5 | 游戏客户端的纹理/资源注册与加载系统 |
|
||
| `13431` | 0 | 46 | Kotlin/JS 编译后的游戏客户端启动入口模块,负责整个游戏的初始化、渲染和启动流程。 |
|
||
| `18334` | 3 | 28 | 游戏客户端的总装配/依赖注入模块 |
|
||
|
||
## 5. 未能确认 / 需注意的点
|
||
|
||
1. **dir.file 中有两处职责与源码内容不符**(JSON 的 Duty 仍按 dir.file 原样抄录,未擅自改写):
|
||
- `module_96480` 标注“Underscore.js 1.13.6”,但源码是 inline-style-prefixer 的 transition 前缀插件(`Webkit`/`Moz` 分支、`-webkit-`/`-moz-` 常量)。
|
||
- `module_94965` 标注“ReactHTML HTML 标签构建器”,但源码是两段 UMD 包裹的 underscore 实现(导出映射含 `VERSION`、`restArguments`,字面量 `1.13.6`),且没有任何 `div`/`span` 等 HTML 标签字面量。
|
||
2. 6 个模块的 `Anchors` 为空数组(源码里没有可用的稳定字面量,且没有高辨识度标识符):17323、19074、29545、31584、58309、99295。
|
||
3. 5 个模块有 require 参数但抽不到依赖:7793、14766、17323、55920、94965。推测是 webpack 模块连接(concatenation)把 require 调用内联消除,或依赖指向资源模块 id(本调研只统计代码模块 id)。
|
||
4. DependsOn 只覆盖静态 `i(<id>)` 调用:动态取模块(55920 的 `t.require(n)`)不计入;对 `static/` 资源模块的引用也不计入。
|
||
5. 顶层类/函数是按缩进 + 首字母大写的启发式统计(`TopLevelClasses` 不等于真实 Kotlin 类数量,压缩后部分类名非 PascalCase);Kind 中有若干边界判定(如 89679 Google Play 计费、52943 通用工具库、94965)按“代码来源 + 职责”人工定案,规则见 1.1。
|
||
6. 分层为最长依赖链的近似值:图中存在循环依赖,回边在递归中被截断,Level 仅供骨架参考。
|