update 历史聊天妹子页
This commit is contained in:
@@ -0,0 +1,181 @@
|
||||
import { _decorator, Component, Label, Node, Sprite, UITransform } from "cc";
|
||||
import { ViewManager } from "db://assets/Scripts/Main/Manager/ViewManager";
|
||||
import ResManager from "db://assets/Scripts/Main/Manager/ResManager";
|
||||
import Utils from "db://assets/Scripts/Main/Common/Utils";
|
||||
import { NavigationManager, PanelType } from "../manager/NavigationManager";
|
||||
import LanguageUtils from "../../Main/Common/LanguageUtils";
|
||||
import { InnerMsgCode } from "../../Main/Config/InnerMsgCode";
|
||||
import { DataManager, DataId } from "../data/DataManager";
|
||||
import { GirlData } from "../data/GirlData";
|
||||
import { EnvData } from "../data/EnvData";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass("PastGirlListItem")
|
||||
export class PastGirlListItem extends Component {
|
||||
@property(Sprite)
|
||||
avatar: Sprite;
|
||||
@property(Label)
|
||||
girlName: Label;
|
||||
@property(Label)
|
||||
tags: Label;
|
||||
@property(Label)
|
||||
lastChatTime: Label; // 新增:最近聊天时间
|
||||
|
||||
@property(Node)
|
||||
starParent: Node;
|
||||
@property(Node)
|
||||
loading: Node;
|
||||
stars: Sprite[];
|
||||
|
||||
id: number = -1;
|
||||
nameKey: string;
|
||||
tagKey: string;
|
||||
category: number;
|
||||
baseNode: Node;
|
||||
|
||||
private onLanguageChangeCallback = () => {
|
||||
if (!this.girlName || !this.tags) return;
|
||||
|
||||
this.girlName.string = LanguageUtils.getText(this.nameKey);
|
||||
let desc = "";
|
||||
const tags = LanguageUtils.getText(this.tagKey).split("|");
|
||||
for (let i = 0; i < tags.length; i++) {
|
||||
if (i != 0) desc += "\n";
|
||||
desc += tags[i];
|
||||
}
|
||||
this.tags.string = desc;
|
||||
};
|
||||
|
||||
protected onLoad(): void {
|
||||
Utils.addInnerEL(
|
||||
InnerMsgCode.LanguageChange,
|
||||
this,
|
||||
this.onLanguageChangeCallback
|
||||
);
|
||||
}
|
||||
|
||||
protected onDestroy(): void {
|
||||
Utils.removeInnerEL(
|
||||
InnerMsgCode.LanguageChange,
|
||||
this,
|
||||
this.onLanguageChangeCallback
|
||||
);
|
||||
}
|
||||
|
||||
refreshData( girlId: number, baseNode: Node) {
|
||||
if (!this.stars) {
|
||||
this.stars = this.starParent.getComponentsInChildren(Sprite);
|
||||
}
|
||||
|
||||
this.baseNode = baseNode;
|
||||
this.id = girlId;
|
||||
|
||||
// 数据
|
||||
const girlData = DataManager.I.getDataById<GirlData>(DataId.Girl);
|
||||
this.category = girlData.getGrilCategoryById(girlId);
|
||||
this.nameKey = girlData.getGrilName(this.category.toString(), this.id);
|
||||
this.girlName.string = LanguageUtils.getText(this.nameKey);
|
||||
this.tagKey = girlData.getGrilTagKey(this.category.toString(), this.id);
|
||||
|
||||
// 标签显示
|
||||
let desc = "";
|
||||
const tags = LanguageUtils.getText(this.tagKey).split("|");
|
||||
for (let i = 0; i < tags.length; i++) {
|
||||
if (i != 0) desc += "|";
|
||||
desc += tags[i];
|
||||
}
|
||||
this.tags.string = desc;
|
||||
|
||||
// 由于都是已解锁的,直接显示聊天图标
|
||||
this.starParent.active = true;
|
||||
|
||||
// 加载头像
|
||||
let avatarPath = girlData.getGrilAvatar(this.category.toString(), this.id);
|
||||
this.loading.active = true;
|
||||
|
||||
const envData = DataManager.I.getDataById<EnvData>(DataId.Env);
|
||||
let newPath = envData.cdn + "/" + "Girls/" + avatarPath + ".png";
|
||||
ResManager.I.changeRemoteSpriteFrame(this.avatar, newPath, () => {
|
||||
let sizeTran = this.avatar.node.parent.getComponent(UITransform);
|
||||
Utils.adjustBgPixelRatioToSize(sizeTran.contentSize, this.avatar.node, 2);
|
||||
this.loading.active = false;
|
||||
});
|
||||
|
||||
// 显示星级(好感度)
|
||||
const star = girlData.getStar(this.category.toString(), this.id);
|
||||
for (let i = 0; i < this.stars.length; i++) {
|
||||
const element = this.stars[i];
|
||||
if (star > i) {
|
||||
ResManager.I.changeResourceSpriteFrame(element, "ui/common/heart");
|
||||
} else {
|
||||
ResManager.I.changeResourceSpriteFrame(
|
||||
element,
|
||||
"ui/common/heart_empty"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// 显示最近聊天时间
|
||||
this.updateLastChatTime();
|
||||
}
|
||||
|
||||
// TODO: 实现获取最近聊天时间的逻辑
|
||||
// 需要从聊天记录中获取最后一条消息的时间戳
|
||||
private getLastChatTime(category: number, id: number): number | null {
|
||||
// TODO: 实现获取最近聊天时间的逻辑
|
||||
// 需要实现的逻辑:
|
||||
// 1. 获取该女孩的聊天记录
|
||||
// 2. 找到最后一条消息的时间戳
|
||||
// 3. 返回时间戳或null(如果没有聊天记录)
|
||||
console.log("TODO: 实现获取最近聊天时间逻辑");
|
||||
return null;
|
||||
}
|
||||
|
||||
// 更新最近聊天时间显示
|
||||
private updateLastChatTime() {
|
||||
const lastTime = this.getLastChatTime(this.category, this.id);
|
||||
this.lastChatTime.string = Utils.formatChatTime(lastTime);
|
||||
}
|
||||
|
||||
reset() {
|
||||
this.id = -1;
|
||||
this.category = 0;
|
||||
this.nameKey = "";
|
||||
this.tagKey = "";
|
||||
this.baseNode = null;
|
||||
|
||||
// 重置UI状态
|
||||
this.node.active = false;
|
||||
this.loading.active = false;
|
||||
|
||||
// 清理文本内容
|
||||
if (this.girlName) this.girlName.string = "";
|
||||
if (this.tags) this.tags.string = "";
|
||||
if (this.lastChatTime) this.lastChatTime.string = "";
|
||||
|
||||
// 重置可见性状态
|
||||
if (this.starParent) this.starParent.active = false;
|
||||
|
||||
// 清理头像
|
||||
if (this.avatar) {
|
||||
this.avatar.spriteFrame = null;
|
||||
}
|
||||
|
||||
// 清理星级显示
|
||||
if (this.stars) {
|
||||
for (let star of this.stars) {
|
||||
star.spriteFrame = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onClickDetail() {
|
||||
// 由于都是已解锁的女孩,直接跳转到角色详情
|
||||
// 先设置选中的角色ID
|
||||
NavigationManager.Instance.setSelectedGirlId(this.id);
|
||||
|
||||
// 通过switchToPanel切换到角色详情面板,保持动画和状态同步
|
||||
NavigationManager.Instance.switchToPanel(PanelType.GIRL_DETAIL);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user