import { _decorator, Component, Label } from 'cc'; const { ccclass, property } = _decorator; /** * PlayerInfoView: 自包含响应式视图组件(不依赖 framework/store-binder)。 * * 设计:PlayerInfoView.ts 与 SceneStart.ts 配合工作。 * - PlayerInfoView 节点挂此脚本,声明 nicknameLabel/beanLabel/avatarSprite * 三个 @property * - SceneStart 构建 mock playerState,直接调用 view.applyPlayer() 触发 * 响应式更新(无需 binder 中间层) * * 此组件也接受 bindTo(session) API 形式(与之前兼容),内部创建极简 * signal 形式,避免依赖 framework/store-binder。 */ @ccclass('PlayerInfoView') export class PlayerInfoView extends Component { @property(Label) nicknameLabel: Label = null!; @property(Label) beanLabel: Label = null!; /** avatar 暂不挂(简化版不展示头像) */ /** 公共方法:直接接受 player 数据,更新 Label */ applyPlayer(p: { nickname: string; bean: number }): void { if (this.nicknameLabel) this.nicknameLabel.string = p.nickname ?? ''; if (this.beanLabel) this.beanLabel.string = String(p.bean ?? 0); } }