|
@@ -1,5 +1,4 @@
|
|
|
import { _decorator, Component, Node, Label, Sprite, Button, resources, SpriteFrame, tween, Vec3, UIOpacity, UITransform, Color } from 'cc';
|
|
|
-import { DataManager } from './DataManager';
|
|
|
const { ccclass, property } = _decorator;
|
|
|
|
|
|
@ccclass('PersonalInfoManager')
|
|
@@ -34,12 +33,6 @@ export class PersonalInfoManager extends Component {
|
|
|
})
|
|
|
nameInfoLabel: Label = null;
|
|
|
|
|
|
- @property({
|
|
|
- type: DataManager,
|
|
|
- tooltip: '数据管理器引用'
|
|
|
- })
|
|
|
- dataManager: DataManager = null;
|
|
|
-
|
|
|
@property({
|
|
|
tooltip: '动画时间(秒)',
|
|
|
range: [0.1, 2.0, 0.1]
|
|
@@ -178,7 +171,16 @@ export class PersonalInfoManager extends Component {
|
|
|
|
|
|
/**
|
|
|
* 显示角色资料
|
|
|
- * @param data 角色资料数据
|
|
|
+ * @param data 包含角色资料的完整数据对象,由GameFlowManager提供
|
|
|
+ * 所需字段:
|
|
|
+ * - characterId: 角色ID
|
|
|
+ * - characterName: 角色名称
|
|
|
+ * - info: 个人资料文本
|
|
|
+ * - avatarPath: 头像路径
|
|
|
+ * - room: 房间号
|
|
|
+ * - identityId: 身份ID
|
|
|
+ * - hasRoommate: 是否有室友
|
|
|
+ * - roommateInfo: 室友信息(可选)
|
|
|
*/
|
|
|
public displayCharacterInfo(data: any) {
|
|
|
if (!data) {
|
|
@@ -186,7 +188,7 @@ export class PersonalInfoManager extends Component {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- console.log(`PersonalInfoManager.displayCharacterInfo: ID=${data.characterId}, 头像路径=${data.avatarPath}`);
|
|
|
+ console.log(`PersonalInfoManager.displayCharacterInfo: ID=${data.characterId}, 名称=${data.characterName}`);
|
|
|
|
|
|
// 保存当前显示的角色ID
|
|
|
this.currentCharacterId = data.characterId;
|
|
@@ -198,135 +200,108 @@ export class PersonalInfoManager extends Component {
|
|
|
|
|
|
// 加载并设置头像
|
|
|
if (this.characterAvatar && data.avatarPath) {
|
|
|
- const characterId = data.characterId;
|
|
|
-
|
|
|
- // 列出所有可能尝试的路径格式
|
|
|
- const pathsToTry = [
|
|
|
- `${data.avatarPath}/spriteFrame`,
|
|
|
- data.avatarPath,
|
|
|
- `avatars/${characterId}/avatar_${characterId}_5/spriteFrame`,
|
|
|
- `avatars/${characterId}/avatar_${characterId}_5`,
|
|
|
- `avatars/${characterId}/spriteFrame`,
|
|
|
- `avatars/${characterId}`
|
|
|
- ];
|
|
|
-
|
|
|
- // 递归尝试加载所有可能的路径
|
|
|
- this.tryLoadSpriteFrameWithPaths(this.characterAvatar, pathsToTry, 0);
|
|
|
+ this.loadAvatar(data.avatarPath);
|
|
|
}
|
|
|
|
|
|
- // 获取更详细的NPC信息并显示
|
|
|
- this.updateDetailedNPCInfo(data.characterId);
|
|
|
+ // 更新详细信息显示
|
|
|
+ this.updateDetailedInfo(data);
|
|
|
|
|
|
// 显示面板
|
|
|
this.showPersonalInfoPanel();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 递归尝试加载所有可能的路径
|
|
|
- * @param sprite 要设置的精灵组件
|
|
|
- * @param paths 尝试的路径数组
|
|
|
- * @param index 当前尝试的路径索引
|
|
|
+ * 更新详细信息显示
|
|
|
+ * @param data 角色详细数据
|
|
|
+ */
|
|
|
+ private updateDetailedInfo(data: any) {
|
|
|
+ if (!this.nameInfoLabel) return;
|
|
|
+
|
|
|
+ // 构建详细信息文本
|
|
|
+ let detailedInfo = '';
|
|
|
+
|
|
|
+ // 添加姓名
|
|
|
+ if (data.characterName) {
|
|
|
+ detailedInfo += `姓名: ${data.characterName}\n`;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 添加房间号
|
|
|
+ if (data.room) {
|
|
|
+ detailedInfo += `房间号: ${data.room}\n`;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 添加ID
|
|
|
+ if (data.identityId) {
|
|
|
+ detailedInfo += `ID: ${data.identityId}\n`;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 添加同住人信息
|
|
|
+ if (data.hasRoommate && data.roommateInfo) {
|
|
|
+ detailedInfo += `同住人: ${data.roommateInfo}\n`;
|
|
|
+ } else if (data.hasRoommate) {
|
|
|
+ detailedInfo += `同住人: 有(未详)\n`;
|
|
|
+ } else {
|
|
|
+ detailedInfo += `同住人: 无\n`;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 设置详细信息文本
|
|
|
+ this.nameInfoLabel.string = detailedInfo;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 加载头像
|
|
|
+ * @param avatarPath 头像路径,PersonalInfo中的avatarPath
|
|
|
*/
|
|
|
- private tryLoadSpriteFrameWithPaths(sprite: Sprite, paths: string[], index: number): void {
|
|
|
- if (index >= paths.length) {
|
|
|
- console.error('所有可能的路径都尝试失败,使用默认图像');
|
|
|
- // 所有路径都失败,创建一个默认的灰色方形作为备用
|
|
|
- this.createDefaultSpriteFrame(sprite);
|
|
|
+ private loadAvatar(avatarPath: string): void {
|
|
|
+ if (!avatarPath) {
|
|
|
+ console.error('头像路径为空');
|
|
|
+ this.loadDefaultAvatar();
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- const currentPath = paths[index];
|
|
|
- console.log(`PersonalInfoManager - 尝试加载路径(${index+1}/${paths.length}): ${currentPath}`);
|
|
|
+ // 移除可能存在的.png后缀
|
|
|
+ const pathWithoutExtension = avatarPath.replace(/\.png$/, '');
|
|
|
+
|
|
|
+ // 构建正确的路径,确保以/spriteFrame结尾
|
|
|
+ const finalPath = pathWithoutExtension.endsWith('/spriteFrame')
|
|
|
+ ? pathWithoutExtension
|
|
|
+ : `${pathWithoutExtension}/spriteFrame`;
|
|
|
+
|
|
|
+ console.log(`加载头像: ${finalPath}`);
|
|
|
|
|
|
- resources.load(currentPath, SpriteFrame, (err, spriteFrame) => {
|
|
|
+ // 加载头像
|
|
|
+ resources.load(finalPath, SpriteFrame, (err, spriteFrame) => {
|
|
|
if (err) {
|
|
|
- console.warn(`路径加载失败: ${currentPath}`, err);
|
|
|
- // 尝试下一个路径
|
|
|
- this.tryLoadSpriteFrameWithPaths(sprite, paths, index + 1);
|
|
|
+ console.error(`加载头像失败: ${finalPath}`, err);
|
|
|
+ this.loadDefaultAvatar();
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- // 成功加载,设置spriteFrame
|
|
|
- sprite.spriteFrame = spriteFrame;
|
|
|
- console.log(`成功加载头像: ${currentPath}`);
|
|
|
+ // 设置精灵帧
|
|
|
+ this.characterAvatar.spriteFrame = spriteFrame;
|
|
|
+ console.log(`成功加载头像: ${finalPath}`);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 创建一个默认的SpriteFrame用于显示
|
|
|
- * @param sprite 要设置的精灵组件
|
|
|
+ * 加载默认头像
|
|
|
*/
|
|
|
- private createDefaultSpriteFrame(sprite: Sprite): void {
|
|
|
- console.log('创建默认图像');
|
|
|
+ private loadDefaultAvatar(): void {
|
|
|
+ console.log('加载默认头像');
|
|
|
|
|
|
// 使用内置资源或默认资源
|
|
|
const defaultIcon = "default_sprite";
|
|
|
resources.load(defaultIcon, SpriteFrame, (err, spriteFrame) => {
|
|
|
if (err) {
|
|
|
- console.warn(`无法加载默认图像 ${defaultIcon}`, err);
|
|
|
+ console.warn(`无法加载默认头像 ${defaultIcon}`, err);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- sprite.spriteFrame = spriteFrame;
|
|
|
- console.log('已设置默认图像');
|
|
|
+ this.characterAvatar.spriteFrame = spriteFrame;
|
|
|
+ console.log('已设置默认头像');
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 更新详细的NPC信息
|
|
|
- * @param characterId 角色ID
|
|
|
- */
|
|
|
- private updateDetailedNPCInfo(characterId: number) {
|
|
|
- if (!this.nameInfoLabel) return;
|
|
|
- if (!this.dataManager) {
|
|
|
- console.error('未设置DataManager引用');
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- // 获取NPC数据
|
|
|
- const npcData = this.dataManager.getNPCById(characterId);
|
|
|
- if (!npcData) {
|
|
|
- console.error(`无法找到ID为${characterId}的NPC数据`);
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- // 获取通行证信息
|
|
|
- const passInfo = npcData.pass;
|
|
|
-
|
|
|
- // 获取个人信息
|
|
|
- const personalInfo = npcData.personal;
|
|
|
-
|
|
|
- // 构建详细信息文本
|
|
|
- let detailedInfo = '';
|
|
|
-
|
|
|
- // 添加姓名
|
|
|
- detailedInfo += `姓名: ${npcData.characterName}\n`;
|
|
|
-
|
|
|
- // 添加房间号
|
|
|
- if (passInfo && passInfo.room) {
|
|
|
- detailedInfo += `房间号: ${passInfo.room}\n`;
|
|
|
- }
|
|
|
-
|
|
|
- // 添加ID
|
|
|
- if (passInfo && passInfo.identityId) {
|
|
|
- detailedInfo += `ID: ${passInfo.identityId}\n`;
|
|
|
- } else if (personalInfo && personalInfo.id) {
|
|
|
- detailedInfo += `ID: ${personalInfo.id}\n`;
|
|
|
- }
|
|
|
-
|
|
|
- // 添加同住人信息
|
|
|
- if (personalInfo && personalInfo.hasRoommate && personalInfo.roommate) {
|
|
|
- detailedInfo += `同住人: ${personalInfo.roommate.id || '未知'}\n`;
|
|
|
- } else if (personalInfo && personalInfo.hasRoommate) {
|
|
|
- detailedInfo += `同住人: 有(未详)\n`;
|
|
|
- } else if (personalInfo) {
|
|
|
- detailedInfo += `同住人: 无\n`;
|
|
|
- }
|
|
|
-
|
|
|
- // 设置详细信息文本
|
|
|
- this.nameInfoLabel.string = detailedInfo;
|
|
|
- }
|
|
|
-
|
|
|
onDestroy() {
|
|
|
if (this.closeButton) {
|
|
|
this.closeButton.node.off('click');
|