方块放置逻辑流程图
Block Placement Logic Flowchart
开始拖拽方块
setupBlockDragEvents
设置触摸事件监听
onTouchStart
记录初始位置,禁用碰撞
onTouchMove
更新方块位置,显示调试信息
onTouchEnd
调用handleBlockDrop
handleBlockDrop
核心放置逻辑处理
是否在kuang
区域内?
是
BlockTag
hasTag?
有标签
放回kuang区域
移除标签,恢复原位置
无标签
拒绝放置
恢复到原位置
否
tryPlaceBlockToGrid
BlockManager处理
网格是否
初始化?
否
放置失败
网格未初始化
是
查找B1节点
获取方块基准位置
坐标转换
世界坐标→网格本地坐标
是否在网格
边界内?
否
超出边界
放置失败
是
findNearestGridNode
找到最近的网格节点
tryPlaceBlockTo
SpecificGrid
精确网格放置
canPlaceBlockAt
检查?
否
网格被占用
或形状不匹配
是
handleSuccessful
Placement
成功放置后处理
markOccupiedPositions
更新网格占用状态
tryMergeOnOverlap
检查是否可以合并
addLockedVisualHint
添加视觉锁定效果
BlockTag.removeTag
移除方块标签
恢复原位置
放置失败,恢复到拖拽前位置
放置完成
图例
开始/结束
处理过程
判断条件
成功操作
错误/失败
是/成功
否/失败