no message
This commit is contained in:
@@ -16,16 +16,29 @@ function ensureLayer(root: Node, name: 'Ground' | 'Border'): Node {
|
||||
return layer;
|
||||
}
|
||||
|
||||
function ensureTile(layer: Node, layerKind: 'ground' | 'border', x: number, y: number): Node {
|
||||
/** 砖块可能在 Tiles(排序合并后);优先 Tiles 避免在 Ground/Border 重复创建 */
|
||||
function findTileNode(levelRoot: Node, layerKind: 'ground' | 'border', x: number, y: number): Node | null {
|
||||
const nodeName = tileNodeName(layerKind, x, y);
|
||||
let node = layer.getChildByName(nodeName);
|
||||
if (!node) {
|
||||
node = new Node(nodeName);
|
||||
node.parent = layer;
|
||||
node.layer = UI_LAYER;
|
||||
node.addComponent(UITransform);
|
||||
node.addComponent(Sprite);
|
||||
for (const parentName of ['Tiles', 'Ground', 'Border'] as const) {
|
||||
const parent = levelRoot.getChildByName(parentName);
|
||||
const node = parent?.getChildByName(nodeName) ?? null;
|
||||
if (node?.isValid) return node;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function ensureTile(levelRoot: Node, layer: Node, layerKind: 'ground' | 'border', x: number, y: number): Node {
|
||||
const existing = findTileNode(levelRoot, layerKind, x, y);
|
||||
if (existing) {
|
||||
existing.active = true;
|
||||
return existing;
|
||||
}
|
||||
const nodeName = tileNodeName(layerKind, x, y);
|
||||
const node = new Node(nodeName);
|
||||
node.parent = layer;
|
||||
node.layer = UI_LAYER;
|
||||
node.addComponent(UITransform);
|
||||
node.addComponent(Sprite);
|
||||
node.active = true;
|
||||
return node;
|
||||
}
|
||||
@@ -41,13 +54,13 @@ export function syncTileNodesFromConfig(levelRoot: Node, config: LevelConfig): n
|
||||
for (const key of wantGround) {
|
||||
const p = parseCellKey(key);
|
||||
if (!p) continue;
|
||||
ensureTile(ground, 'ground', p.x, p.y);
|
||||
ensureTile(levelRoot, ground, 'ground', p.x, p.y);
|
||||
n++;
|
||||
}
|
||||
for (const key of wantBorder) {
|
||||
const p = parseCellKey(key);
|
||||
if (!p) continue;
|
||||
ensureTile(border, 'border', p.x, p.y);
|
||||
ensureTile(levelRoot, border, 'border', p.x, p.y);
|
||||
n++;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user