MatchMaster/assets/Script/module/Tool/HomeButtonVibration.ts

35 lines
1.2 KiB
TypeScript

const handledEvents = new WeakSet<cc.Event>();
/** 返回是否由首页统一处理;旧入口在其他场景仍可保留原有行为。 */
export function vibrateHomeButton(event?: cc.Event): boolean {
if (!event) return false;
const scene = cc.director.getScene();
if (!scene || scene.name !== "HomeScene") return false;
if (handledEvents.has(event)) return true;
handledEvents.add(event);
try {
cc.fx.GameTool.setVibrate("light", 1);
} catch (error) {
console.warn("HomeScene 按钮轻振动调用失败:", error);
}
return true;
}
/** 根节点捕获触摸,自动覆盖后来挂入首页的 Bundle 按钮。 */
export function onHomeButtonTouchEnd(event: cc.Event.EventTouch): void {
// 引擎可能复用事件对象,每次派发重新去重。
handledEvents.delete(event);
let target = event.target as cc.Node;
while (target) {
const button = target.getComponent(cc.Button);
if (button) {
if (button.interactable && button.enabledInHierarchy && (button as any)._pressed) {
vibrateHomeButton(event);
}
return;
}
if (target === event.currentTarget) return;
target = target.parent;
}
}