War3 Texture Preview
在代码文件中悬停预览贴图(PNG/TGA/BLP)和模型(MDX/MDL),支持魔兽争霸3自带的贴图资源。
功能特点
- 支持 PNG / TGA / BLP:Hover 内联预览;也支持直接打开贴图文件进入“贴图预览编辑器”(拖拽平移、缩放、高 DPI、重置视图)。
- 支持 Warcraft III 自带 MPQ 资源解析(可配置),本地优先、MPQ 兜底。
- 支持 MDX / MDL 模型预览(Webview/编辑器),提供旋转/动画/速度控制与时间轴拖动。
- 模型路径支持
Ctrl+左键 直接打开预览;Hover 可一键生成模型缩略图。
- 支持贴图/模型格式转换:PNG/TGA/BLP 互转、MDX/MDL 互转(资源管理器右键/编辑器标题栏)。
- 预览主题支持
system/light/dark(模型预览/贴图预览共用)。
- 模型预览提供 1x 尺寸换算:W/D/H/R/2R 与缩放 scale 双向联动,便于按游戏内范围精确匹配特效大小。
- 默认仅匹配字符串字面量:
"..."、'...'、[[...]];可选:Lua 文件可从 Lua LSP Hover 提取常量路径(war3TexturePreview.enableLuaLspHoverPathResolve,默认关闭)。
- 支持常量格式化字符串解析(
string.format / :format,可配置白名单)。
- 路径支持绝对路径与相对路径;相对路径按多根目录顺序搜索。
- 配置基于 VS Code Settings(workspace/user),修改后自动热加载。
- 预览尺寸可配置(默认 256),显示原始尺寸。
- 支持落盘缓存:MPQ 解压缓存(
mpq-cache/)与预览 PNG 缓存(preview-cache/)。
- 默认支持文件格式:
lua、ini、lni、j、jass、zinc、txt。
配置
扩展使用 VS Code 自带 Settings(不会再生成专用配置文件)。
- 全局配置:VS Code 设置面板(User Settings)中的
war3TexturePreview.*。
- 工作区配置:
.vscode/settings.json 中的 war3TexturePreview.*(优先级更高,适合团队共享)。
打开设置:
- VS Code 设置里搜索:
war3TexturePreview
- 或运行命令:
War3 贴图预览:打开设置
启用/禁用(工作区开关)
扩展默认全局激活;你可以通过 war3TexturePreview.enabled 在某个工作区关闭/开启:
// .vscode/settings.json
{
"war3TexturePreview.enabled": true
}
常用配置示例(工作区覆盖)
// .vscode/settings.json
{
// 允许解析自定义格式化函数
"war3TexturePreview.formatFunctionNames": ["string.format", "formatHandler"],
// 额外资源根目录(相对路径按工作区根目录拼接)
"war3TexturePreview.searchPaths": ["image", "war3mapImported"],
// 预览最大边长
"war3TexturePreview.maxPreviewSize": 256
}
Warcraft III 安装目录自动探测
war3TexturePreview.war3InstallPath 默认是空字符串 ""。
- 当它为
"" 且启用 MPQ(enableWar3Mpq=true)时:扩展会从注册表探测安装目录;若探测成功,会把结果写入【全局】设置作为默认值。
- 如果你在 Settings 中手动填写了路径,则优先使用手动值(workspace > global)。
预览主题(模型/贴图预览共用)
- 配置:
war3TexturePreview.modelPreviewTheme(system/light/dark)。
system:跟随 VS Code 当前主题;模型/贴图预览页右上角可一键切换主题并写回设置。
命令
- 打开设置:
War3 贴图预览:打开设置。
- 迁移旧版配置:
War3 贴图预览:迁移旧版配置到 Settings。
- 打开模型预览:
War3 贴图预览:打开模型预览(也可在模型路径上 Ctrl+左键 直接打开)。
- 生成模型缩略图:
War3 贴图预览:生成模型缩略图(Hover 中会给出生成入口)。
- 转换贴图:
War3 贴图预览:转换为 PNG/TGA/BLP(支持多选;资源管理器右键或编辑器标题栏中使用)。
- 转换模型:
War3 贴图预览:转换为 MDX/MDL(支持多选;资源管理器右键或编辑器标题栏中使用)。
- 清理缓存:
War3 贴图预览:清理缓存(清空 mpq-cache/ 与 preview-cache/,相当于全量清理)。
- 清理工作区缓存:
War3 贴图预览:清理工作区缓存(仅清理当前工作区的 preview-cache/workspace/... 相关缓存)。
- 打开悬浮资源所在目录(仅本地资源):默认快捷键
Ctrl+Alt+E(可在 VS Code “键盘快捷方式”里重绑)。
- 选择资源并插入路径:
War3 贴图预览:选择资源并插入路径。
- 默认快捷键:
Ctrl+Alt+R
- 需要开启设置:
war3TexturePreview.enableResourcePicker=true
- 仅扫描工作区内:
tga / blp / mdx / mdl(不包含 png)
- 选择器内支持:目录层级/全部切换、类型过滤、模型分类筛选(默认关闭;开启后才遍历解析)
- 确认选择后:把“最短且不会被更高优先级目录误解析”的路径插入到当前光标处;并自动关闭本次打开的预览页。
路径解析规则
路径分隔符会自动规范化:\ → /(用于匹配/解析)。
贴图(PNG/TGA/BLP)
- 绝对路径:直接读取本地文件。
- 相对路径:按以下根目录顺序尝试拼接:
- 工作区根目录
searchPaths(相对项按工作区根目录拼接)
- 本地未命中且启用 MPQ(
enableWar3Mpq=true):回退到 MPQ 解析(解压到 mpq-cache/ 后返回磁盘路径)。
模型(MDX/MDL)与依赖资源
模型尺寸换算(W/D/H/R/2R)
模型预览右侧面板会显示并可编辑一组“尺寸 / 缩放”数据,用于把模型在 1x 缩放下的占用范围换算成游戏里可直接使用的缩放值。
数据来源
- 优先读取模型文件(MDX/MDL)内置的
Extent(min/max) 作为 静态包围范围。
- 这是模型作者写入的范围数据,通常用于裁剪/预览等;少数模型可能偏大/偏小。
- 该范围是“静态”的:不随动画帧实时变化。
字段定义
以下均以 模型 1x 为基准:
W(宽):X 轴跨度,W = maxX - minX
D(深):Y 轴跨度,D = maxY - minY
H(高):Z 轴跨度,H = maxZ - minZ
2R(水平直径):2R = max(W, D)
R(水平半径):R = 2R / 2 = max(W, D) / 2
其中 R/2R 是为了更贴近魔兽 3 常见的“范围半径”口径(例如技能 AoE 半径、距离阈值等)。
换算规则(与游戏缩放接口一致)
模型统一缩放时(scale 同时作用于 X/Y/Z),各方向尺寸按比例变化:
W' = W * scale
D' = D * scale
H' = H * scale
R' = R * scale
2R' = 2R * scale
因此你可以反推缩放:
- 目标水平半径
R_target:scale = R_target / R_1x
- 目标水平直径
2R_target:scale = 2R_target / (2R_1x)
- 目标宽/深/高:
scale = W_target / W_1x(或 D_target / D_1x、H_target / H_1x)
在游戏中如何使用(示例)
把预览页反推得到的 scale 填到对应的“模型缩放”接口即可:
set e = AddSpecialEffect("path\\to\\model.mdx", x, y)
call EXEffectMatScale(e, scale)
call SetUnitScale(u, scale, scale, scale)
作者
交流讨论
- QQ交流群: 1070966060
- 欢迎进群交流扩展插件使用反馈
特别鸣谢