Tiny World Asset Editing 是 Tiny World Builder 项目中面向资源编辑的技能说明,主要规定选择放置、自由绘制、剪贴板与模板、Stamps 面板、选择属性等编辑流程的实现约定。以下按用途整理。
一、基础编辑契约 编辑以 world[x][z] 表示意图,以 cellMeshes['x,z'] 表示渲染状态。新的资源编辑必须经由 setCell(x, z, opts) 或调用它的辅助函数完成。选择状态通过 window.__tinyworldSelection 暴露,使用 worldCoords()、materialize()、replaceWorldCoords(),新代码不应解析原始 selectedCells 键。
二、预览优先的交互 选择工具拖动已选中的单元格或对象时先预览:把当前渲染对象克隆到独立的 hologram 组,pointermove 期间只更新虚拟偏移,pointerup 时一次性提交真实的剪切/粘贴。重复、粘贴、最新模板放置也先进入待放置状态并显示全息表示,下一次点击画布才提交,Escape 取消。径向换色、选中对象旋转、Generate 生成结果同样先预览,用户点击应用后才调用 applyState() 等提交接口。
三、画笔与绘制 专用 Build Brush 停靠面板位于顶部居中,便于在绘制前找到。Single 模式可沿用实时自由绘制路径,Line、Rectangle、Fill、Scatter 必须先渲染全息足迹,再在抬起指针时通过 applyToolToCell() 提交。Fill 预览有界洪水填充,Scatter 预览拖拽矩形内的确定性有机子集,当前模式保存在 window.__tinyworldBrushModes。自由绘制使用 dragMode === 'draw'、drawVisitedCells、drawLastWorldCoord 和 applyDrawToolToHit(),避免同一单元格重复叠加地形或同类对象;成功绘制后,选区替换为绘制的世界坐标。
四、放置规则 对选区批量放置时,对每个选中世界坐标调用一次 applyTool() 并传入 { skipSelectionBulk: true },以保留工具变体、地形覆盖、幽灵变换、围栏逻辑等。使用已保存资源模板批量放置时,在每个坐标粘贴一次性模板载荷,并保持所有放置的单元格被选中。Shift 拖拽矩形填充后保留填充区域为选中状态。
五、围栏、墙与边界 围栏、墙、边界都属于 kind: 'fence',通过 fenceSide 与 floors 区分;墙从等级 4 开始,边界从等级 5。围栏工具现为单一图标,无变体弹出:放置全息预览根据悬停位置最近的瓦片边缘推断 auto fenceSide,重复点击同一边可逐级升级 1 到 5(木栏、更高、铁丝、石墙、钢边界)。插值自由绘制的围栏单元格应根据每个绘制步骤方向推导 fenceSide,而非复制最终指针边缘。
六、剪贴板与模板 资源剪贴板结构为 { version, origin, size, cells: [{ dx, dz, cell }] },单元格通过 cloneCellIntent() 构建,以保留地形、高度、类型、楼层、建筑类型、围栏边、extras、旋转、偏移、外观和水流。模板保存在 localStorage 的 tinyworld:asset-templates.v1,与模型图章、体素构建图章分开。保存模板不覆盖用户显式复制或剪切剪贴板;粘贴、重复、移动选中单元格同样不覆盖。粘贴优先以悬停单元格为目标,否则回退到选区原点。Stamps 面板的 Templates 分类展示已保存模板,模板卡片提供删除控件,模板名称应概括其复制的单元格内容。Delete/Backspace 清除选择或悬停单元格而不写入剪贴板。
七、选择属性与径向菜单 选择属性按 Edit、Transform、Appearance、Ground 分组展示,在 AI 界面禁用(?ai=0)时仍然可用。属性分组标签、折叠状态分别持久化在 tinyworld:selection-props-active-tab.v1 与 tinyworld:selection-props-collapsed.v1,切换只影响展示,不改变底层行键与 applySelectionProperty() 路由。颜色行走 bodyColor/topColor,含 Default 选项仅清除对应覆盖。变换、缩放、位移、材质缩放各有独立重置路径。场景内变换 gizmo 仅作用于选中对象变换,并作为单次拖拽批次可撤销;重复岛屿是看板级变换。图层面板为只读层级表面,通过 replaceWorldCoords() 选择单元格。子对象编辑通过 window.__tinyworldSubEdit 暴露,是否可编辑集中在 isVoxelSubEditableKind()。径向菜单为引擎文件 engine/world/33-radial-menu.js,动作复用既有编辑辅助函数,破坏性动作以 data-pos-type="danger" 区分,生成/AI 动作用橙色系三级样式。
八、Stamps 面板 Stamps 导航在客户端完成,stampBuilderAllTools() 构建模型、体素与内置图章工具,按分类和搜索文本过滤。地形、景观工具及普通可放置工具(如 tuft)都纳入图章库。搜索按空白分词,每个词都需匹配。支持键盘快速选择:Enter 激活第一个可见图章,ArrowDown 聚焦第一张可选卡片,Escape 清空非空搜索后再关闭面板。缩略图先绘制廉价回退图,取消过期队列,3D 缩略图按 requestAnimationFrame 小批量构建。Recent 分类来自 tinywo…(原文此处截断)
九、适用场景与限制 该技能适用于维护和扩展 Tiny World Builder 的世界编辑交互,包括选择放置、绘制、剪贴板、模板和图章面板。限制方面:需遵循既有编辑契约,不得绕过 setCell 直接写 world;多个预览操作需保持 Escape 取消语义;材料 Body/Top 控制仅限已知材料桶的选中资产类型,混合选择不得写入模型图章。原文在 Recent stamps 处截断,后续细节暂未提供。