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。
31 KiB
31 KiB
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 且两端都在节点集内)
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. 未能确认 / 需注意的点
- 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 标签字面量。
- 6 个模块的
Anchors为空数组(源码里没有可用的稳定字面量,且没有高辨识度标识符):17323、19074、29545、31584、58309、99295。 - 5 个模块有 require 参数但抽不到依赖:7793、14766、17323、55920、94965。推测是 webpack 模块连接(concatenation)把 require 调用内联消除,或依赖指向资源模块 id(本调研只统计代码模块 id)。
- DependsOn 只覆盖静态
i(<id>)调用:动态取模块(55920 的t.require(n))不计入;对static/资源模块的引用也不计入。 - 顶层类/函数是按缩进 + 首字母大写的启发式统计(
TopLevelClasses不等于真实 Kotlin 类数量,压缩后部分类名非 PascalCase);Kind 中有若干边界判定(如 89679 Google Play 计费、52943 通用工具库、94965)按“代码来源 + 职责”人工定案,规则见 1.1。 - 分层为最长依赖链的近似值:图中存在循环依赖,回边在递归中被截断,Level 仅供骨架参考。