Files
18xchat/assets/Scripts/chat18x/data/GirlDetailData.ts
T
2025-09-10 21:30:26 +08:00

262 lines
7.7 KiB
TypeScript

/**
* 技师的详细数据
*/
import { BaseData } from "./BaseData";
import proto from 'db://assets/Scripts/proto/proto.pb.js';
export class GirlDetailData extends BaseData {
// id
private id: number;
// 自我介绍
private detailDesc: string;
// 图片数据
private photoData: proto.cs.IPurchaseCommercialImage[];
// 视频数据
private videoData: proto.cs.IPurchaseCommercialVideo[];
constructor() {
super();
this.id = 0;
this.detailDesc = "";
this.photoData = [];
this.videoData = [];
}
public reset(): void {
this.id = 0;
this.detailDesc = "";
this.photoData = [];
this.videoData = [];
}
public clear(): void {
this.id = 0;
this.detailDesc = "";
this.photoData = [];
this.videoData = [];
}
public destroy(): void {
super.destroy();
this.id = null;
this.detailDesc = null;
this.photoData = null;
this.videoData = null;
}
/** 保存数据 */
public setData(data: proto.cs.IGirlsDetail): void {
if (!data) return;
this.id = data.id;
this.detailDesc = data.detailDesc;
this.photoData = this.parseAllGirlPhoto(data.commercialImages);
this.videoData = this.parseAllGirlVideo(data.commercialVideos);
}
/** 获取 id */
public getId(): number {
return this.id;
}
/** 获取自我介绍 */
public getGirlDesc(): string {
return this.detailDesc;
}
/** --------------------------------------------------------- 图片数据 --------------------------------------------------------- */
// 解析技师图片数据,一个
private parseOneGirlPhoto(data: proto.cs.IPurchaseCommercialImage): proto.cs.IPurchaseCommercialImage | null {
if (!data) return null;
const oneData: proto.cs.IPurchaseCommercialImage = {
id: data.id, // 图片 id
imageType: data.imageType, // 图片类型
unlockCounts: data.unlockCounts, // 聊天触发次数
imagePrice: data.imagePrice, // 图片价格
path: data.path, // 图片资源路径
};
return oneData;
}
// 解析技师图片数据,多个
private parseAllGirlPhoto(data: proto.cs.IPurchaseCommercialImage[]): proto.cs.IPurchaseCommercialImage[] {
if (!data) return [];
let allData = [];
for (const value of data) {
const oneData: proto.cs.IPurchaseCommercialImage = this.parseOneGirlPhoto(value);
if (oneData) {
allData.push(oneData);
}
}
return allData;
}
/** 获取所有技师图片数据的数量 */
public getAllGrilPhotoDataCount(): number {
if (!this.photoData) return 0;
return this.photoData.length;
}
/** 获取所有技师图片数据的id */
public getAllGrilPhotoId(): number[] {
if (!this.photoData) return [];
// 获取所有 id
let allId = [];
for (let one of this.photoData) {
allId.push(one.id);
}
return allId;
}
/** 获取所有技师图片数据的id,展示类型属于在详情页展示 */
public getAllListGrilPhotoId(): number[] {
if (!this.photoData) return [];
// 筛选出类型为 1 的图片
let listPhotos = this.photoData.filter(photo => photo.imageType === 1);
// 按 id 从小到大排序
listPhotos.sort((a, b) => a.id - b.id);
// 返回排序后的 id 数组
return listPhotos.map(photo => photo.id);
}
/** 获取所有技师图片数据的id,展示类型属于在聊天中触发 */
public getAllTriggerGrilPhotoId(): number[] {
if (!this.photoData) return [];
// 筛选出类型为 2 的图片
let triggerPhotos = this.photoData.filter(photo => photo.imageType === 2);
// 按 unlockCounts 从大到小排序
triggerPhotos.sort((a, b) => b.unlockCounts - a.unlockCounts);
// 返回排序后的 id 数组
return triggerPhotos.map(photo => photo.id);
}
/** 获取技师图片数据,通过 id */
private getGrilPhotoData(id: number): proto.cs.IPurchaseCommercialImage | null {
if (!this.photoData) return null;
// 遍历数组找到匹配的资源
for (let oneData of this.photoData) {
if (oneData.id == id) {
return oneData;
}
}
return null;
}
/** 获取技师图片的类型 */
public getGrilPhotoType(id: number): number {
let oneData = this.getGrilPhotoData(id);
if (!oneData) return 0;
return oneData.imageType;
}
/** 图片展示类型:在详情页展示 */
public isGirlPhotoShowInList(id: number): boolean {
let type = this.getGrilPhotoType(id);
return type === 1;
}
/** 图片展示类型:在聊天触发 */
public isGirlPhotoShowInChat(id: number): boolean {
let type = this.getGrilPhotoType(id);
return type === 2;
}
/** 获取技师图片的聊天触发次数 */
public getGrilPhotoUnlockCounts(id: number): number {
let oneData = this.getGrilPhotoData(id);
if (!oneData) return 0;
return oneData.unlockCounts;
}
/** 获取技师图片的价格 */
public getGrilPhotoPrice(id: number): number {
let oneData = this.getGrilPhotoData(id);
if (!oneData) return 0;
return oneData.imagePrice;
}
/** 获取技师图片的资源路径 */
public getGrilPhotoPath(id: number): string {
let oneData = this.getGrilPhotoData(id);
if (!oneData) return "";
return oneData.path;
}
/** --------------------------------------------------------- 视频数据 --------------------------------------------------------- */
// 解析技师视频数据,一个
private parseOneGirlVideo(data: proto.cs.IPurchaseCommercialVideo): proto.cs.IPurchaseCommercialVideo | null {
if (!data) return null;
const oneData: proto.cs.IPurchaseCommercialVideo = {
id: data.id, // 视频 id
path: data.path, // 视频资源路径
emotion: data.emotion, // 关联情绪
videoPrice: data.videoPrice, // 价格
};
return oneData;
}
// 解析技师视频数据,多个
private parseAllGirlVideo(data: proto.cs.IPurchaseCommercialVideo[]): proto.cs.IPurchaseCommercialVideo[] {
if (!data) return [];
let allData = [];
for (const value of data) {
const oneData: proto.cs.IPurchaseCommercialVideo = this.parseOneGirlVideo(value);
if (oneData) {
allData.push(oneData);
}
}
return allData;
}
/** 获取所有技师视频数据的数量 */
public getAllGrilVideoDataCount(): number {
if (!this.videoData) return 0;
return this.videoData.length;
}
/** 获取所有技师视频数据的id */
public getAllGrilVideoId(): number[] {
if (!this.videoData) return [];
// 获取所有 id
let allId = [];
for (let one of this.videoData) {
allId.push(one.id);
}
return allId;
}
/** 获取技师视频数据,通过 id */
private getGrilVideoData(id: number): proto.cs.IPurchaseCommercialVideo | null {
if (!this.videoData) return null;
// 遍历数组找到匹配的资源
for (let oneData of this.videoData) {
if (oneData.id === id) {
return oneData;
}
}
return null;
}
/** 获取技师视频的资源路径 */
public getGrilVideoPath(id: number): string {
let oneData = this.getGrilVideoData(id);
if (!oneData) return "";
return oneData.path;
}
/** 获取技师视频的关联情绪 */
public getGrilVideoEmotion(id: number): number {
let oneData = this.getGrilVideoData(id);
if (!oneData) return 0;
return oneData.emotion;
}
/** 获取技师视频的价格 */
public getGrilVideoPrice(id: number): number {
let oneData = this.getGrilVideoData(id);
if (!oneData) return 0;
return oneData.videoPrice;
}
}