Files
pixelheros/assets/script/game/map/CardController.ts
panw 07aec09283 fix: 修复组件销毁时事件解绑和空引用问题并添加任务界面
- 在多个组件的onDestroy方法中添加节点有效性检查,防止无效节点上解绑事件
- 修复MissionComp中任务启动逻辑,改为通过UI打开方式触发MissionStart事件
- 添加新的任务界面(UIID.Mission)及相关配置
- 修复MissionCardComp中Map未初始化导致的空引用问题
- 优化按钮事件绑定和解绑逻辑,增加空值检查
2026-05-08 14:14:38 +08:00

102 lines
3.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* @file CardController.ts
* @description 卡牌控制器组件UI 视图层)
*
* 职责:
* 1. 作为卡牌系统的顶层控制器容器节点对应的脚本。
* 2. 管理 "任务主页" 与 "任务中" 两个子界面的激活切换。
* 3. 在 ECS 实体挂载后隐藏 loading 遮罩,标志地图加载完毕。
*
* 设计说明:
* - 本组件挂载在 CardController 预制体根节点上,
* 子节点 `mission_home` 与 `mission` 分别对应主页和战斗界面。
* - update 中检查全局暂停 / 结束标志,预留帧逻辑扩展点。
*
* 依赖:
* - smc.map.MapView.scene.mapLayer —— 获取地图层以隐藏 loading 节点
* - smc.vmdata —— 读取全局游戏状态game_over / game_pause
*/
import { _decorator,Button,EventHandler,EventTouch,Label,NodeEventType,resources,Sprite,SpriteAtlas,tween,UITransform,v3 } from "cc";
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
import { CCComp } from "../../../../extensions/oops-plugin-framework/assets/module/common/CCComp";
import { smc } from "../common/SingletonModuleComp";
import { mLogger } from "../common/Logger";
const { ccclass, property } = _decorator;
/**
* CardControllerComp —— 卡牌系统控制器视图组件
*
* 负责初始化卡牌界面的顶层布局切换(主页 vs 战斗),
* 并在 ECS 实体加入场景时处理 loading 状态。
*/
@ccclass('CardControllerComp')
@ecs.register('CardController', false)
export class CardControllerComp extends CCComp {
/** 是否启用调试日志 */
@property({ tooltip: "是否启用调试日志" })
private debugMode: boolean = false;
/** 触控计时器(预留,可用于长按等交互逻辑) */
touch_time:number = 0
/** 是否正在触控中(预留) */
in_touch:boolean = false
/** 底部背景引用(预留) */
bbg:any=null
/** 底部背景 Y 坐标(预留) */
bbg_y:number=40
/** 卡牌槽位 X 坐标数组5 个位置,预留) */
bbg_x:any=[-300,-150,0,150,300]
protected onLoad(): void {
}
/**
* start组件启动时打印日志并初始化页面。
* 默认显示任务主页mission_home隐藏战斗界面mission
*/
start() {
mLogger.log(this.debugMode, 'CardController', "CardControllerComp start",this.node)
this.page_init()
}
/**
* onAdded当本组件对应的 ECS 实体被挂载到场景后触发。
* 主要作用:关闭地图层上的 loading 遮罩。
* @param args ECS 实体附加参数
*/
onAdded(args:any){
mLogger.log(this.debugMode, 'CardController', "CardControllerComp onAdded",args)
smc.map.MapView.scene.mapLayer.node.getChildByName("loading").active=false;
}
/**
* update每帧更新。
* 若全局标记 game_over 或 game_pause 时直接跳过(预留扩展位)。
*/
protected update(dt: number): void {
if(smc.vmdata.game_over||smc.vmdata.game_pause){
return
}
}
/**
* 页面初始化:
* - 显示任务主页mission_home
* - 隐藏任务战斗界面mission
*/
page_init(){
this.node.getChildByName("mission_home").active=true;
let missionNode = this.node.getChildByName("mission");
if (missionNode) {
missionNode.active = false;
}
}
/** ECS 组件移除时销毁节点 */
reset() {
this.node.destroy();
}
}