Files
TankIC/3DTank/docs/ArchitectureModules.md
T
TermiNexus 61b57a3d11 docs(3dtank): 架构逆向:模块依赖图、6 条运行链路、TOState↔reducer 映射
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。
2026-09-18 09:30:30 +08:00

31 KiB
Raw Blame History

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. 未能确认 / 需注意的点

  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 仅供骨架参考。