多语言模块
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,9 +0,0 @@
|
||||
[
|
||||
{"key":"/apple", "en":"apple", "zh":"苹果"},
|
||||
{"key":"/abc", "en":"apple", "zh":"苹果"},
|
||||
{"key":"/def", "en":"apple", "zh":"苹果"},
|
||||
{"key":"key_name", "en":"apple", "zh":"苹果"},
|
||||
{"key":"test/a", "en":"apple", "zh":"苹果"},
|
||||
{"key":"name", "en":"apple", "zh":"苹果"},
|
||||
{"key":"/banana", "en":"banana", "zh":"香蕉"}
|
||||
]
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[
|
||||
{ "key": "/apple", "en": "apple", "zh": "苹果" },
|
||||
{ "key": "/abc", "en": "apple", "zh": "苹果" }
|
||||
]
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+3
-1
@@ -6,6 +6,8 @@ dotnet %LUBAN_DLL% ^
|
||||
-t all ^
|
||||
-d json ^
|
||||
--conf %CONF_ROOT%\luban.conf ^
|
||||
-x outputDataDir=output
|
||||
-x outputDataDir=output
|
||||
|
||||
|
||||
|
||||
pause
|
||||
@@ -1,14 +0,0 @@
|
||||
[
|
||||
{
|
||||
"id": 1001,
|
||||
"name": "道具1",
|
||||
"desc": "描述1",
|
||||
"count": 10
|
||||
},
|
||||
{
|
||||
"id": 1002,
|
||||
"name": "道具2",
|
||||
"desc": "描述2",
|
||||
"count": 100
|
||||
}
|
||||
]
|
||||
@@ -1,14 +0,0 @@
|
||||
[
|
||||
{
|
||||
"id": 1001,
|
||||
"name": "道具1",
|
||||
"desc": "碎片",
|
||||
"count": 10
|
||||
},
|
||||
{
|
||||
"id": 1002,
|
||||
"name": "道具2",
|
||||
"desc": "金币",
|
||||
"count": 100
|
||||
}
|
||||
]
|
||||
@@ -1,36 +1,30 @@
|
||||
[
|
||||
{
|
||||
"id": 10001,
|
||||
"name": "Anaya Kapoor",
|
||||
"nameKey": "girl_10001_name",
|
||||
"age": "29",
|
||||
"category": 0,
|
||||
"tag": [
|
||||
"Hot,Horny"
|
||||
],
|
||||
"tagKey": "girl_10001_tag",
|
||||
"priceType": 0,
|
||||
"avatarPath": "Image/Girls/10001/Avatar/10001_avatar",
|
||||
"starCount": 5
|
||||
},
|
||||
{
|
||||
"id": 10002,
|
||||
"name": "Meher Joshi",
|
||||
"nameKey": "girl_10002_name",
|
||||
"age": "26",
|
||||
"category": 0,
|
||||
"tag": [
|
||||
"Earth-tone linens,handcrafted jewelry"
|
||||
],
|
||||
"tagKey": "girl_10002_tag",
|
||||
"priceType": 1,
|
||||
"avatarPath": "Image/Girls/10002/Avatar/10002_avatar",
|
||||
"starCount": 4
|
||||
},
|
||||
{
|
||||
"id": 10003,
|
||||
"name": "Sana Reddy",
|
||||
"nameKey": "girl_10003_name",
|
||||
"age": "25",
|
||||
"category": 0,
|
||||
"tag": [
|
||||
"Singer-Songwriter,Dancer"
|
||||
],
|
||||
"tagKey": "girl_10003_tag",
|
||||
"priceType": 2,
|
||||
"avatarPath": "Image/Girls/10003/Avatar/10003_avatar",
|
||||
"starCount": 3
|
||||
|
||||
@@ -0,0 +1,162 @@
|
||||
[
|
||||
{
|
||||
"key": "themepanel.title",
|
||||
"language_en": "Girls Online",
|
||||
"language_cn": "在线选妃",
|
||||
"language_hi": "ऑनलाइन लड़कियाँ",
|
||||
"language_fr": "Filles en ligne",
|
||||
"language_de": "Mädchen Online"
|
||||
},
|
||||
{
|
||||
"key": "themepanel.recomandtext",
|
||||
"language_en": "Daily Recomand",
|
||||
"language_cn": "每日推荐",
|
||||
"language_hi": "दैनिक सिफारिश",
|
||||
"language_fr": "Recommandation quotidienne",
|
||||
"language_de": "Tägliche Empfehlung"
|
||||
},
|
||||
{
|
||||
"key": "girllistpanel.title",
|
||||
"language_en": "Girl List",
|
||||
"language_cn": "技师列表",
|
||||
"language_hi": "लड़कियों की सूची",
|
||||
"language_fr": "Liste des filles",
|
||||
"language_de": "Mädchenliste"
|
||||
},
|
||||
{
|
||||
"key": "girldetailpanel.chatbtn",
|
||||
"language_en": "Send Msgs!",
|
||||
"language_cn": "发送消息",
|
||||
"language_hi": "संदेश भेजें",
|
||||
"language_fr": "Envoyer un message",
|
||||
"language_de": "Nachricht senden"
|
||||
},
|
||||
{
|
||||
"key": "girldetailpanel.name",
|
||||
"language_en": "Name:",
|
||||
"language_cn": "名字:",
|
||||
"language_hi": "नाम:",
|
||||
"language_fr": "Nom :",
|
||||
"language_de": "Name:"
|
||||
},
|
||||
{
|
||||
"key": "girldetailpanel.age",
|
||||
"language_en": "Age:",
|
||||
"language_cn": "年龄:",
|
||||
"language_hi": "उम्र:",
|
||||
"language_fr": "Âge :",
|
||||
"language_de": "Alter:"
|
||||
},
|
||||
{
|
||||
"key": "girldetailpanel.desc",
|
||||
"language_en": "Description:",
|
||||
"language_cn": "自我介绍:",
|
||||
"language_hi": "विवरण:",
|
||||
"language_fr": "Description :",
|
||||
"language_de": "Beschreibung:"
|
||||
},
|
||||
{
|
||||
"key": "chatpanel.inputplaceholder",
|
||||
"language_en": "Messages!",
|
||||
"language_cn": "请输入:",
|
||||
"language_hi": "संदेश लिखें",
|
||||
"language_fr": "Écrivez ici...",
|
||||
"language_de": "Nachricht eingeben"
|
||||
},
|
||||
{
|
||||
"key": "category_1001",
|
||||
"language_en": "mature_lady",
|
||||
"language_cn": "熟女",
|
||||
"language_hi": "परिपक्व महिला",
|
||||
"language_fr": "Femme mature",
|
||||
"language_de": "Reife Dame"
|
||||
},
|
||||
{
|
||||
"key": "category_1002",
|
||||
"language_en": "eighteen",
|
||||
"language_cn": "18岁",
|
||||
"language_hi": "अठारह वर्ष",
|
||||
"language_fr": "Dix-huit ans",
|
||||
"language_de": "Achtzehn"
|
||||
},
|
||||
{
|
||||
"key": "category_1003",
|
||||
"language_en": "hot_mommy",
|
||||
"language_cn": "辣妈",
|
||||
"language_hi": "सेक्सी माँ",
|
||||
"language_fr": "Maman sexy",
|
||||
"language_de": "Heiße Mama"
|
||||
},
|
||||
{
|
||||
"key": "category_1004",
|
||||
"language_en": "binding",
|
||||
"language_cn": "捆绑",
|
||||
"language_hi": "बंधन",
|
||||
"language_fr": "Bondage",
|
||||
"language_de": "Fesseln"
|
||||
},
|
||||
{
|
||||
"key": "category_1005",
|
||||
"language_en": "public_fight",
|
||||
"language_cn": "公众野战",
|
||||
"language_hi": "सार्वजनिक संभोग",
|
||||
"language_fr": "Sexe public",
|
||||
"language_de": "Öffentlicher Sex"
|
||||
},
|
||||
{
|
||||
"key": "category_1006",
|
||||
"language_en": "cartoon",
|
||||
"language_cn": "卡通",
|
||||
"language_hi": "कार्टून",
|
||||
"language_fr": "Dessin animé",
|
||||
"language_de": "Zeichentrick"
|
||||
},
|
||||
{
|
||||
"key": "girl_10001_name",
|
||||
"language_en": "Anaya Kapoor",
|
||||
"language_cn": "阿纳雅",
|
||||
"language_hi": "आन्या कपूर",
|
||||
"language_fr": "Anaya Kapoor",
|
||||
"language_de": "Anaya Kapoor"
|
||||
},
|
||||
{
|
||||
"key": "girl_10002_name",
|
||||
"language_en": "Meher Joshi",
|
||||
"language_cn": "梅尔",
|
||||
"language_hi": "मेहर जोशी",
|
||||
"language_fr": "Meher Joshi",
|
||||
"language_de": "Meher Joshi"
|
||||
},
|
||||
{
|
||||
"key": "girl_10003_name",
|
||||
"language_en": "Sana Reddy",
|
||||
"language_cn": "萨娜",
|
||||
"language_hi": "साना रेड्डी",
|
||||
"language_fr": "Sana Reddy",
|
||||
"language_de": "Sana Reddy"
|
||||
},
|
||||
{
|
||||
"key": "girl_10001_tag",
|
||||
"language_en": "Hot|Horny",
|
||||
"language_cn": "火辣|饥渴",
|
||||
"language_hi": "सेक्सी|कामुक",
|
||||
"language_fr": "Chaude|Excitée",
|
||||
"language_de": "Heiß|Geil"
|
||||
},
|
||||
{
|
||||
"key": "girl_10002_tag",
|
||||
"language_en": "Earth-tone linens,handcrafted jewelry",
|
||||
"language_cn": "土色亚麻制品|手工珠宝",
|
||||
"language_hi": "भूरे रंग के लिनन|हस्तनिर्मित गहने",
|
||||
"language_fr": "Linge terreux,Bijoux artisanaux",
|
||||
"language_de": "Erdfarbene Leinen,Handgemachter Schmuck"
|
||||
},
|
||||
{
|
||||
"key": "girl_10003_tag",
|
||||
"language_en": "Singer-Songwriter,Dancer",
|
||||
"language_cn": "舞者|歌手",
|
||||
"language_hi": "गायक-गीतकार|नर्तकी",
|
||||
"language_fr": "Chanteuse-compositrice,Danseuse",
|
||||
"language_de": "Sängerin-Songwriterin,Tänzerin"
|
||||
}
|
||||
]
|
||||
@@ -1,6 +1,7 @@
|
||||
[
|
||||
{
|
||||
"id": 1001,
|
||||
"key": "category_1001",
|
||||
"name": "mature_lady",
|
||||
"category": 0,
|
||||
"isRelease": true,
|
||||
@@ -8,6 +9,7 @@
|
||||
},
|
||||
{
|
||||
"id": 1002,
|
||||
"key": "category_1002",
|
||||
"name": "eighteen",
|
||||
"category": 1,
|
||||
"isRelease": false,
|
||||
@@ -15,6 +17,7 @@
|
||||
},
|
||||
{
|
||||
"id": 1003,
|
||||
"key": "category_1003",
|
||||
"name": "hot_mommy",
|
||||
"category": 2,
|
||||
"isRelease": false,
|
||||
@@ -22,6 +25,7 @@
|
||||
},
|
||||
{
|
||||
"id": 1004,
|
||||
"key": "category_1004",
|
||||
"name": "binding",
|
||||
"category": 3,
|
||||
"isRelease": false,
|
||||
@@ -29,6 +33,7 @@
|
||||
},
|
||||
{
|
||||
"id": 1005,
|
||||
"key": "category_1005",
|
||||
"name": "public_fight",
|
||||
"category": 4,
|
||||
"isRelease": false,
|
||||
@@ -36,6 +41,7 @@
|
||||
},
|
||||
{
|
||||
"id": 1006,
|
||||
"key": "category_1006",
|
||||
"name": "cartoon",
|
||||
"category": 5,
|
||||
"isRelease": false,
|
||||
|
||||
@@ -0,0 +1,134 @@
|
||||
import { _decorator, Component, Label, Node } from "cc";
|
||||
import LanguageUtils, { LanguageType } from "./LanguageUtils";
|
||||
|
||||
const { ccclass, property, requireComponent } = _decorator;
|
||||
|
||||
@ccclass("LanguageLabel")
|
||||
@requireComponent(Label)
|
||||
export class LanguageLabel extends Component {
|
||||
@property({
|
||||
displayName: "Language Key",
|
||||
tooltip: "多语言配置表中的key值",
|
||||
})
|
||||
private languageKey: string = "";
|
||||
|
||||
@property({
|
||||
displayName: "Default Text",
|
||||
tooltip: "如果找不到对应的翻译时显示的默认文本",
|
||||
})
|
||||
private defaultText: string = "";
|
||||
|
||||
@property({
|
||||
displayName: "Auto Update",
|
||||
tooltip: "是否自动监听语言变化并更新",
|
||||
})
|
||||
private autoUpdate: boolean = true;
|
||||
|
||||
private label: Label = null;
|
||||
private params: { [key: string]: any } = null;
|
||||
|
||||
onLoad() {
|
||||
this.label = this.getComponent(Label);
|
||||
if (!this.label) {
|
||||
console.error("LanguageLabel: Label component not found!");
|
||||
return;
|
||||
}
|
||||
|
||||
this.updateText();
|
||||
|
||||
if (this.autoUpdate) {
|
||||
LanguageUtils.onLanguageChanged(this.onLanguageChanged, this);
|
||||
}
|
||||
}
|
||||
|
||||
onDestroy() {
|
||||
if (this.autoUpdate) {
|
||||
LanguageUtils.offLanguageChanged(this.onLanguageChanged, this);
|
||||
}
|
||||
}
|
||||
|
||||
onEnable() {
|
||||
this.updateText();
|
||||
}
|
||||
|
||||
private onLanguageChanged(language: LanguageType) {
|
||||
this.updateText();
|
||||
}
|
||||
|
||||
private updateText() {
|
||||
if (!this.label || !this.languageKey) {
|
||||
return;
|
||||
}
|
||||
|
||||
let text: string;
|
||||
if (this.params && Object.keys(this.params).length > 0) {
|
||||
text = LanguageUtils.getTextWithParams(
|
||||
this.languageKey,
|
||||
this.params,
|
||||
this.defaultText
|
||||
);
|
||||
} else {
|
||||
text = LanguageUtils.getText(this.languageKey, this.defaultText);
|
||||
}
|
||||
|
||||
this.label.string = text;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置语言key
|
||||
*/
|
||||
public setLanguageKey(key: string) {
|
||||
this.languageKey = key;
|
||||
this.updateText();
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置文本参数(用于替换文本中的占位符)
|
||||
* @param params 参数对象,如 {name: "玩家", score: 100}
|
||||
*/
|
||||
public setParams(params: { [key: string]: any }) {
|
||||
this.params = params;
|
||||
this.updateText();
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加或更新单个参数
|
||||
*/
|
||||
public setParam(key: string, value: any) {
|
||||
if (!this.params) {
|
||||
this.params = {};
|
||||
}
|
||||
this.params[key] = value;
|
||||
this.updateText();
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除所有参数
|
||||
*/
|
||||
public clearParams() {
|
||||
this.params = null;
|
||||
this.updateText();
|
||||
}
|
||||
|
||||
/**
|
||||
* 手动刷新文本
|
||||
*/
|
||||
public refresh() {
|
||||
this.updateText();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前的语言key
|
||||
*/
|
||||
public getLanguageKey(): string {
|
||||
return this.languageKey;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置默认文本
|
||||
*/
|
||||
public setDefaultText(text: string) {
|
||||
this.defaultText = text;
|
||||
this.updateText();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "d7e4f3a2-8b9c-4d2e-a1f6-3c5e9d7b8a4f",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
@@ -0,0 +1,201 @@
|
||||
import { _decorator, sys } from "cc";
|
||||
import { Language } from "../../schema/schema";
|
||||
import ConfigManager from "../../chat18x/manager/ConfigManager";
|
||||
import { CommonConfig } from "../Config/CommonConfig";
|
||||
import li_EventManager from "./li_EventManager";
|
||||
import Utils from "./Utils";
|
||||
import { InnerMsgCode } from "../Config/InnerMsgCode";
|
||||
|
||||
const { ccclass } = _decorator;
|
||||
|
||||
export enum LanguageType {
|
||||
EN = "en", // 英文
|
||||
CN = "cn", // 中文
|
||||
HI = "hi", // 印地语
|
||||
FR = "fr", // 法语
|
||||
DE = "de", //德语
|
||||
}
|
||||
|
||||
export enum LanguageEvent {
|
||||
LANGUAGE_CHANGED = "LANGUAGE_CHANGED",
|
||||
}
|
||||
|
||||
@ccclass("LanguageUtils")
|
||||
export default class LanguageUtils {
|
||||
private static currentLanguage: LanguageType = LanguageType.EN;
|
||||
private static languageCache: Map<string, string> = new Map();
|
||||
private static isInitialized: boolean = false;
|
||||
|
||||
public static get CurrentLanguage(): LanguageType {
|
||||
if (!this.isInitialized) {
|
||||
this.init();
|
||||
}
|
||||
return this.currentLanguage;
|
||||
}
|
||||
|
||||
private static init() {
|
||||
if (this.isInitialized) return;
|
||||
this.isInitialized = true;
|
||||
this.loadLanguageSetting();
|
||||
}
|
||||
|
||||
private static loadLanguageSetting() {
|
||||
const savedLanguage = sys.localStorage.getItem(
|
||||
CommonConfig.StorageConfig.LANGUAGE_SETTING
|
||||
);
|
||||
if (
|
||||
savedLanguage &&
|
||||
Object.values(LanguageType).includes(savedLanguage as LanguageType)
|
||||
) {
|
||||
this.currentLanguage = savedLanguage as LanguageType;
|
||||
} else {
|
||||
this.detectSystemLanguage();
|
||||
}
|
||||
console.log(
|
||||
"LanguageUtils initialized with language:",
|
||||
this.currentLanguage
|
||||
);
|
||||
}
|
||||
|
||||
private static detectSystemLanguage() {
|
||||
const systemLanguage = sys.language;
|
||||
if (systemLanguage.startsWith("zh")) {
|
||||
this.currentLanguage = LanguageType.CN;
|
||||
} else if (systemLanguage.startsWith("hi")) {
|
||||
this.currentLanguage = LanguageType.HI;
|
||||
} else if (systemLanguage.startsWith("fr")) {
|
||||
this.currentLanguage = LanguageType.FR;
|
||||
} else if (systemLanguage.startsWith("de")) {
|
||||
this.currentLanguage = LanguageType.DE;
|
||||
} else {
|
||||
this.currentLanguage = LanguageType.EN;
|
||||
}
|
||||
}
|
||||
|
||||
public static setLanguage(language: LanguageType): void {
|
||||
if (!this.isInitialized) {
|
||||
this.init();
|
||||
}
|
||||
|
||||
if (this.currentLanguage === language) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.currentLanguage = language;
|
||||
this.languageCache.clear();
|
||||
sys.localStorage.setItem(
|
||||
CommonConfig.StorageConfig.LANGUAGE_SETTING,
|
||||
language
|
||||
);
|
||||
|
||||
Utils.sendInnerMsg(InnerMsgCode.LanguageChange, language);
|
||||
console.log("Language changed to:", language);
|
||||
}
|
||||
|
||||
public static getText(key: string, defaultText: string = ""): string {
|
||||
if (!this.isInitialized) {
|
||||
this.init();
|
||||
}
|
||||
|
||||
if (!key) {
|
||||
return defaultText;
|
||||
}
|
||||
|
||||
if (this.languageCache.has(key)) {
|
||||
return this.languageCache.get(key);
|
||||
}
|
||||
|
||||
if (!ConfigManager.tables || !ConfigManager.tables.TbLanguage) {
|
||||
console.warn("Language table not loaded yet");
|
||||
return defaultText || key;
|
||||
}
|
||||
|
||||
const languageData = ConfigManager.tables.TbLanguage.get(key);
|
||||
if (!languageData) {
|
||||
console.warn(`Language key not found: ${key}`);
|
||||
return defaultText || key;
|
||||
}
|
||||
|
||||
let text: string = "";
|
||||
switch (this.currentLanguage) {
|
||||
case LanguageType.EN:
|
||||
text = languageData.languageEn;
|
||||
break;
|
||||
case LanguageType.CN:
|
||||
text = languageData.languageCn;
|
||||
break;
|
||||
case LanguageType.HI:
|
||||
text = languageData.languageHi;
|
||||
break;
|
||||
case LanguageType.FR:
|
||||
text = languageData.languageFr;
|
||||
break;
|
||||
case LanguageType.DE:
|
||||
text = languageData.languageDe;
|
||||
break;
|
||||
default:
|
||||
text = languageData.languageEn;
|
||||
}
|
||||
|
||||
if (!text || text.length === 0) {
|
||||
text = languageData.languageEn || defaultText || key;
|
||||
}
|
||||
|
||||
this.languageCache.set(key, text);
|
||||
return text;
|
||||
}
|
||||
|
||||
public static getTextWithParams(
|
||||
key: string,
|
||||
params: { [key: string]: any },
|
||||
defaultText: string = ""
|
||||
): string {
|
||||
let text = this.getText(key, defaultText);
|
||||
|
||||
for (let paramKey in params) {
|
||||
const regex = new RegExp(`{${paramKey}}`, "g");
|
||||
text = text.replace(regex, params[paramKey].toString());
|
||||
}
|
||||
|
||||
return text;
|
||||
}
|
||||
|
||||
public static getAvailableLanguages(): LanguageType[] {
|
||||
return Object.values(LanguageType);
|
||||
}
|
||||
|
||||
public static getLanguageDisplayName(language: LanguageType): string {
|
||||
switch (language) {
|
||||
case LanguageType.EN:
|
||||
return "English";
|
||||
case LanguageType.CN:
|
||||
return "中文";
|
||||
case LanguageType.HI:
|
||||
return "हिंदी";
|
||||
case LanguageType.FR:
|
||||
return "Français";
|
||||
case LanguageType.DE:
|
||||
return "Deutsch";
|
||||
default:
|
||||
return language;
|
||||
}
|
||||
}
|
||||
|
||||
public static clearCache(): void {
|
||||
this.languageCache.clear();
|
||||
}
|
||||
|
||||
public static onLanguageChanged(
|
||||
callback: (language: LanguageType) => void,
|
||||
target: any
|
||||
): void {
|
||||
Utils.addInnerEL(InnerMsgCode.LanguageChange, target, callback);
|
||||
}
|
||||
|
||||
public static offLanguageChanged(
|
||||
callback: (language: LanguageType) => void,
|
||||
target: any
|
||||
): void {
|
||||
Utils.removeInnerEL(InnerMsgCode.LanguageChange, target, callback);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "c8b5e7a2-4f3d-4e8b-9c2a-1d6f5e8a7b9c",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
@@ -30,6 +30,7 @@ export namespace CommonConfig {
|
||||
DD_LEVELOPER = StorageConfigUtil.BaseData + 16, //进入关卡且首次进度>0时(或第一次操作)
|
||||
GUIDE_MAIN = StorageConfigUtil.BaseData + 17, //主界面引导是否完成
|
||||
GUIDE_TALK = StorageConfigUtil.BaseData + 18, //聊天界面引导是否完成
|
||||
LANGUAGE_SETTING = StorageConfigUtil.BaseData + 19, //语言设置
|
||||
|
||||
DOUYIN_SIDEBAR = StorageConfigUtil.Channel + 1, //抖音渠道侧边栏奖励是否领取
|
||||
}
|
||||
|
||||
@@ -26,4 +26,5 @@ export enum InnerMsgCode {
|
||||
|
||||
Chat_DialogRefresh,
|
||||
SimplePlayVide,
|
||||
LanguageChange,
|
||||
}
|
||||
+222
-195
@@ -1,213 +1,240 @@
|
||||
import { _decorator, AssetManager, AudioClip, Button, Component, ImageAsset, JsonAsset, Label, Material, Node, Prefab, ProgressBar, Sprite, SpriteFrame } from 'cc';
|
||||
import { GButton } from '../../Main/Common/GButton';
|
||||
import ResManager from '../../Main/Manager/ResManager';
|
||||
import Resource from '../../Main/Config/Resource';
|
||||
import { SDKManager } from '../../Main/Channel/SDKManager';
|
||||
import HttpUnit from '../../Main/Common/HttpUnit';
|
||||
import GlobalValue from '../../Main/Common/GlobalValue';
|
||||
import Utils from '../../Main/Common/Utils';
|
||||
import { InnerMsgCode } from '../../Main/Config/InnerMsgCode';
|
||||
import { promptItem } from '../Item/promptItem';
|
||||
import {
|
||||
_decorator,
|
||||
AssetManager,
|
||||
AudioClip,
|
||||
Button,
|
||||
Component,
|
||||
ImageAsset,
|
||||
JsonAsset,
|
||||
Label,
|
||||
Material,
|
||||
Node,
|
||||
Prefab,
|
||||
ProgressBar,
|
||||
Sprite,
|
||||
SpriteFrame,
|
||||
} from "cc";
|
||||
import { GButton } from "../../Main/Common/GButton";
|
||||
import ResManager from "../../Main/Manager/ResManager";
|
||||
import Resource from "../../Main/Config/Resource";
|
||||
import { SDKManager } from "../../Main/Channel/SDKManager";
|
||||
import HttpUnit from "../../Main/Common/HttpUnit";
|
||||
import GlobalValue from "../../Main/Common/GlobalValue";
|
||||
import Utils from "../../Main/Common/Utils";
|
||||
import { InnerMsgCode } from "../../Main/Config/InnerMsgCode";
|
||||
import { promptItem } from "../Item/promptItem";
|
||||
import LanguageUtils, { LanguageType } from "../../Main/Common/LanguageUtils";
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass('PreloadUI')
|
||||
@ccclass("PreloadUI")
|
||||
export class PreloadUI extends Component {
|
||||
private checkFinish = true; //检查完成
|
||||
private preloadFinish = false; //资源加载完成
|
||||
private loginFinish = false; //登录完成
|
||||
|
||||
private checkFinish = true; //检查完成
|
||||
private preloadFinish = false; //资源加载完成
|
||||
private loginFinish = false; //登录完成
|
||||
private jinduBar: Node = null;
|
||||
private jinduFilled: Sprite = null;
|
||||
private LabProgress: Label = null;
|
||||
//private btnLogin: Sprite = null; //登录按钮
|
||||
|
||||
private jinduBar: Node = null;
|
||||
private jinduFilled: Sprite = null;
|
||||
private LabProgress: Label = null;
|
||||
//private btnLogin: Sprite = null; //登录按钮
|
||||
start() {
|
||||
//Utils.addInnerEL(InnerMsgCode.UI_ShowPrompt, this, this.resiveShowPrompt)
|
||||
|
||||
start() {
|
||||
//Utils.addInnerEL(InnerMsgCode.UI_ShowPrompt, this, this.resiveShowPrompt)
|
||||
|
||||
this.jinduBar = this.node.getChildByName("jinduBar");
|
||||
this.jinduFilled = this.jinduBar.getChildByName("jinduFilled").getComponent(Sprite);
|
||||
this.LabProgress = this.node.getChildByName("LabProgress").getComponent(Label);
|
||||
//this.btnLogin = this.node.getChildByName("btnLogin").getComponent(Sprite);
|
||||
|
||||
//适配背景图
|
||||
let BG = this.node.getChildByName("BG");
|
||||
Utils.adjustBgPixelRatio(BG, 1)
|
||||
this.jinduBar = this.node.getChildByName("jinduBar");
|
||||
this.jinduFilled = this.jinduBar
|
||||
.getChildByName("jinduFilled")
|
||||
.getComponent(Sprite);
|
||||
this.LabProgress = this.node
|
||||
.getChildByName("LabProgress")
|
||||
.getComponent(Label);
|
||||
//this.btnLogin = this.node.getChildByName("btnLogin").getComponent(Sprite);
|
||||
|
||||
this.jinduFilled.fillRange = 0;
|
||||
//this.btnLogin.node.active = false;
|
||||
//适配背景图
|
||||
let BG = this.node.getChildByName("BG");
|
||||
Utils.adjustBgPixelRatio(BG, 1);
|
||||
|
||||
this.preloadFiles()
|
||||
this.jinduFilled.fillRange = 0;
|
||||
//this.btnLogin.node.active = false;
|
||||
|
||||
this.preloadFiles();
|
||||
|
||||
LanguageUtils.setLanguage(LanguageType.CN);
|
||||
}
|
||||
|
||||
protected onDestroy(): void {
|
||||
Utils.removeInnerEL(
|
||||
InnerMsgCode.UI_ShowPrompt,
|
||||
this,
|
||||
this.resiveShowPrompt
|
||||
);
|
||||
}
|
||||
|
||||
update(deltaTime: number) {
|
||||
if (this.checkFinish) {
|
||||
if (this.preloadFinish && this.loginFinish) {
|
||||
this.checkFinish = false;
|
||||
this.enterGame();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected onDestroy(): void {
|
||||
Utils.removeInnerEL(InnerMsgCode.UI_ShowPrompt, this, this.resiveShowPrompt)
|
||||
}
|
||||
/**收到飘字消息 */
|
||||
resiveShowPrompt(data: any) {
|
||||
let msg = data.text;
|
||||
let self = this;
|
||||
ResManager.I.loadSubpackagePrefab("item/promptItem", (n_node: Node) => {
|
||||
self.node.addChild(n_node);
|
||||
let pItem = n_node.getComponent(promptItem);
|
||||
pItem.setLabel(msg);
|
||||
});
|
||||
}
|
||||
|
||||
update(deltaTime: number) {
|
||||
if (this.checkFinish) {
|
||||
if (this.preloadFinish && this.loginFinish) {
|
||||
this.checkFinish = false
|
||||
this.enterGame()
|
||||
}
|
||||
//预加载文件
|
||||
preloadFiles() {
|
||||
let preloadTab = [
|
||||
{ path: "ChatPanel", bundleName: "Chat18x", ftype: Prefab },
|
||||
{ path: "GirlDetailPanel", bundleName: "Chat18x", ftype: Prefab },
|
||||
{ path: "GirlListPanel", bundleName: "Chat18x", ftype: Prefab },
|
||||
// {path:"Music/music_interface", bundleName: "Audio", ftype: AudioClip},
|
||||
// {path:"bg/mengli_stage_bg", bundleName: "Raw", ftype: ImageAsset},
|
||||
// {path:"cg0/mengli_0_cg", bundleName: "Raw", ftype: ImageAsset},
|
||||
// {path:"cg1/mengli_1_cg", bundleName: "Raw", ftype: ImageAsset},
|
||||
// {path:"cg2/mengli_2_cg", bundleName: "Raw", ftype: ImageAsset},
|
||||
// {path:"cg3/mengli_3_cg", bundleName: "Raw", ftype: ImageAsset},
|
||||
// {path:"emo_1/mengli_shy", bundleName: "Raw", ftype: ImageAsset},
|
||||
// {path:"emo_2/mengli_laugh", bundleName: "Raw", ftype: ImageAsset},
|
||||
// {path:"emo_3/mengli_disgust", bundleName: "Raw", ftype: ImageAsset},
|
||||
// {path:"role/mengli_default", bundleName: "Raw", ftype: ImageAsset},
|
||||
// {path:"Zjm/raw1", bundleName: "Raw", ftype: ImageAsset},
|
||||
// {path:"touming", bundleName: "common", ftype: ImageAsset},
|
||||
// // {path:"chanpin_1_0", bundleName: "daoju", ftype: ImageAsset}, //有合图加载失败
|
||||
// {path:"zjm_1", bundleName: "Zhujiemian", ftype: ImageAsset},
|
||||
// {path:"zjm_19", bundleName: "Zhujiemian", ftype: ImageAsset},
|
||||
// {path:"zjm_30", bundleName: "Zhujiemian", ftype: ImageAsset},
|
||||
// {path:"mohu", bundleName: "Materials", ftype: Material},
|
||||
// {path:"UI/Cross/Cross_UI", bundleName: "PB", ftype: Prefab},
|
||||
// {path:"UI/StartUI/Start_UI", bundleName: "PB", ftype: Prefab},
|
||||
// {path:"commonGlobal", bundleName: "DataTable", ftype: JsonAsset},
|
||||
];
|
||||
let num_prefab = 0; //已加载数量
|
||||
let num_succeed = 0; //加载成功数量
|
||||
let preloadFunc = () => {
|
||||
if (num_prefab < preloadTab.length) {
|
||||
let cfg = preloadTab[num_prefab];
|
||||
ResManager.I.preLoadSubpackageFile(
|
||||
cfg.path,
|
||||
cfg.bundleName,
|
||||
cfg.ftype,
|
||||
(ret) => {
|
||||
num_prefab++;
|
||||
num_succeed++;
|
||||
let percent = 0.45 * (num_prefab / preloadTab.length);
|
||||
this.showLoadProgress(0.55 + percent);
|
||||
console.log("加载成功:", cfg.path);
|
||||
preloadFunc();
|
||||
},
|
||||
(err) => {
|
||||
num_prefab++;
|
||||
console.log("加载失败:", err);
|
||||
}
|
||||
);
|
||||
} else {
|
||||
if (num_succeed >= num_prefab) {
|
||||
this.loadDataTable();
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
preloadFunc();
|
||||
}
|
||||
|
||||
/**收到飘字消息 */
|
||||
resiveShowPrompt(data: any) {
|
||||
let msg = data.text
|
||||
let self = this
|
||||
ResManager.I.loadSubpackagePrefab("item/promptItem", (n_node: Node)=>{
|
||||
self.node.addChild(n_node)
|
||||
let pItem = n_node.getComponent(promptItem)
|
||||
pItem.setLabel(msg)
|
||||
})
|
||||
}
|
||||
//加载配置表
|
||||
loadDataTable() {
|
||||
let dataArr = [
|
||||
//"commonGlobal",
|
||||
// "levelHole",
|
||||
//"Music",
|
||||
//"Sound",
|
||||
];
|
||||
|
||||
//配置表使用方法: let cfgs = Resource.getConfig("Sound")
|
||||
let num_prefab = 0;
|
||||
let preloadFunc = () => {
|
||||
if (num_prefab < dataArr.length) {
|
||||
let cfgname = dataArr[num_prefab];
|
||||
ResManager.I.loadSubpackageDataTable(cfgname, (ret: JsonAsset) => {
|
||||
num_prefab++;
|
||||
Resource.addSubJsonConfig(cfgname, ret.json);
|
||||
preloadFunc();
|
||||
});
|
||||
} else {
|
||||
this.preloadFinish = true;
|
||||
this.onLogin();
|
||||
}
|
||||
};
|
||||
preloadFunc();
|
||||
}
|
||||
|
||||
//预加载文件
|
||||
preloadFiles() {
|
||||
let preloadTab = [
|
||||
{path:"ChatPanel", bundleName: "Chat18x", ftype: Prefab},
|
||||
{path:"GirlDetailPanel", bundleName: "Chat18x", ftype: Prefab},
|
||||
{path:"GirlListPanel", bundleName: "Chat18x", ftype: Prefab},
|
||||
// {path:"Music/music_interface", bundleName: "Audio", ftype: AudioClip},
|
||||
// {path:"bg/mengli_stage_bg", bundleName: "Raw", ftype: ImageAsset},
|
||||
// {path:"cg0/mengli_0_cg", bundleName: "Raw", ftype: ImageAsset},
|
||||
// {path:"cg1/mengli_1_cg", bundleName: "Raw", ftype: ImageAsset},
|
||||
// {path:"cg2/mengli_2_cg", bundleName: "Raw", ftype: ImageAsset},
|
||||
// {path:"cg3/mengli_3_cg", bundleName: "Raw", ftype: ImageAsset},
|
||||
// {path:"emo_1/mengli_shy", bundleName: "Raw", ftype: ImageAsset},
|
||||
// {path:"emo_2/mengli_laugh", bundleName: "Raw", ftype: ImageAsset},
|
||||
// {path:"emo_3/mengli_disgust", bundleName: "Raw", ftype: ImageAsset},
|
||||
// {path:"role/mengli_default", bundleName: "Raw", ftype: ImageAsset},
|
||||
// {path:"Zjm/raw1", bundleName: "Raw", ftype: ImageAsset},
|
||||
// {path:"touming", bundleName: "common", ftype: ImageAsset},
|
||||
// // {path:"chanpin_1_0", bundleName: "daoju", ftype: ImageAsset}, //有合图加载失败
|
||||
// {path:"zjm_1", bundleName: "Zhujiemian", ftype: ImageAsset},
|
||||
// {path:"zjm_19", bundleName: "Zhujiemian", ftype: ImageAsset},
|
||||
// {path:"zjm_30", bundleName: "Zhujiemian", ftype: ImageAsset},
|
||||
// {path:"mohu", bundleName: "Materials", ftype: Material},
|
||||
// {path:"UI/Cross/Cross_UI", bundleName: "PB", ftype: Prefab},
|
||||
// {path:"UI/StartUI/Start_UI", bundleName: "PB", ftype: Prefab},
|
||||
// {path:"commonGlobal", bundleName: "DataTable", ftype: JsonAsset},
|
||||
];
|
||||
let num_prefab = 0; //已加载数量
|
||||
let num_succeed = 0;//加载成功数量
|
||||
let preloadFunc = () => {
|
||||
if (num_prefab < preloadTab.length) {
|
||||
let cfg = preloadTab[num_prefab]
|
||||
ResManager.I.preLoadSubpackageFile(cfg.path, cfg.bundleName, cfg.ftype, (ret) => {
|
||||
num_prefab++;
|
||||
num_succeed++;
|
||||
let percent = 0.45 * (num_prefab / preloadTab.length)
|
||||
this.showLoadProgress(0.55 + percent);
|
||||
console.log("加载成功:", cfg.path);
|
||||
preloadFunc();
|
||||
}, (err)=>{
|
||||
num_prefab++;
|
||||
console.log("加载失败:", err);
|
||||
});
|
||||
} else {
|
||||
if (num_succeed >= num_prefab) {
|
||||
this.loadDataTable();
|
||||
}
|
||||
}
|
||||
}
|
||||
preloadFunc();
|
||||
}
|
||||
//显示加载进度
|
||||
showLoadProgress(percent) {
|
||||
this.jinduFilled.fillRange = percent;
|
||||
}
|
||||
|
||||
//加载配置表
|
||||
loadDataTable(){
|
||||
let dataArr = [
|
||||
//"commonGlobal",
|
||||
// "levelHole",
|
||||
//"Music",
|
||||
//"Sound",
|
||||
]
|
||||
//登录
|
||||
onLogin() {
|
||||
//初始化SDK信息
|
||||
// SDKManager.init(() => {
|
||||
// //检测是否有授权,有授权直接登录,没有授权就先进主界面,到主界面获取权限
|
||||
// SDKManager.checkAutoSetting("userInfo", (ishave) => {
|
||||
// if (ishave) {
|
||||
// console.log("有授权,直接登录")
|
||||
// HttpUnit.ins.login((loginData) => {
|
||||
// if (loginData == null) {
|
||||
// //登录失败,这里处理重复登录的逻辑
|
||||
// } else {
|
||||
// this.loginFinish = true
|
||||
// }
|
||||
// })
|
||||
// } else {
|
||||
// console.log("没有授权,等待授权后登录")
|
||||
// // this.loginFinish = true
|
||||
// this.jinduBar.active = false
|
||||
// this.LabProgress.node.active = false
|
||||
// //登录按钮
|
||||
// this.btnLogin.node.active = true
|
||||
// let loginPath = ""
|
||||
// if (SDKManager.isWenxin()) {
|
||||
// loginPath = "login1"
|
||||
// } else if (SDKManager.isByteDance()) {
|
||||
// loginPath = "login2"
|
||||
// } else if (SDKManager.isKuaishou()) {
|
||||
// loginPath = "login3"
|
||||
// }
|
||||
// ResManager.I.changeResourceSpriteFrame(this.btnLogin, loginPath)
|
||||
//
|
||||
// HttpUnit.ins.login((loginData) => {
|
||||
// if (loginData == null) {
|
||||
// //登录失败,这里处理重复登录的逻辑
|
||||
// } else {
|
||||
// this.loginFinish = true
|
||||
// }
|
||||
// })
|
||||
// }
|
||||
// })
|
||||
// })
|
||||
this.loginFinish = true;
|
||||
}
|
||||
|
||||
//配置表使用方法: let cfgs = Resource.getConfig("Sound")
|
||||
let num_prefab = 0;
|
||||
let preloadFunc = () => {
|
||||
if (num_prefab < dataArr.length) {
|
||||
let cfgname = dataArr[num_prefab]
|
||||
ResManager.I.loadSubpackageDataTable(cfgname, (ret: JsonAsset) => {
|
||||
num_prefab++;
|
||||
Resource.addSubJsonConfig(cfgname, ret.json)
|
||||
preloadFunc();
|
||||
});
|
||||
} else {
|
||||
this.preloadFinish = true;
|
||||
this.onLogin();
|
||||
}
|
||||
}
|
||||
preloadFunc();
|
||||
}
|
||||
|
||||
//显示加载进度
|
||||
showLoadProgress(percent) {
|
||||
this.jinduFilled.fillRange = percent;
|
||||
}
|
||||
|
||||
//登录
|
||||
onLogin() {
|
||||
//初始化SDK信息
|
||||
// SDKManager.init(() => {
|
||||
// //检测是否有授权,有授权直接登录,没有授权就先进主界面,到主界面获取权限
|
||||
// SDKManager.checkAutoSetting("userInfo", (ishave) => {
|
||||
// if (ishave) {
|
||||
// console.log("有授权,直接登录")
|
||||
// HttpUnit.ins.login((loginData) => {
|
||||
// if (loginData == null) {
|
||||
// //登录失败,这里处理重复登录的逻辑
|
||||
// } else {
|
||||
// this.loginFinish = true
|
||||
// }
|
||||
// })
|
||||
// } else {
|
||||
// console.log("没有授权,等待授权后登录")
|
||||
// // this.loginFinish = true
|
||||
// this.jinduBar.active = false
|
||||
// this.LabProgress.node.active = false
|
||||
// //登录按钮
|
||||
// this.btnLogin.node.active = true
|
||||
// let loginPath = ""
|
||||
// if (SDKManager.isWenxin()) {
|
||||
// loginPath = "login1"
|
||||
// } else if (SDKManager.isByteDance()) {
|
||||
// loginPath = "login2"
|
||||
// } else if (SDKManager.isKuaishou()) {
|
||||
// loginPath = "login3"
|
||||
// }
|
||||
// ResManager.I.changeResourceSpriteFrame(this.btnLogin, loginPath)
|
||||
//
|
||||
// HttpUnit.ins.login((loginData) => {
|
||||
// if (loginData == null) {
|
||||
// //登录失败,这里处理重复登录的逻辑
|
||||
// } else {
|
||||
// this.loginFinish = true
|
||||
// }
|
||||
// })
|
||||
// }
|
||||
// })
|
||||
// })
|
||||
this.loginFinish = true;
|
||||
}
|
||||
|
||||
enterGame() {
|
||||
//let islogin = HttpUnit.IsLogin();
|
||||
//console.log("进入游戏,登录状态:", islogin);
|
||||
this.jinduBar.active = false
|
||||
this.LabProgress.node.active = false
|
||||
//this.btnLogin.node.active = false
|
||||
// if (islogin) {
|
||||
// } else {
|
||||
// //没登录成功,先进主界面,在主界面里进行登录
|
||||
// }
|
||||
ResManager.I.goMainScene(); //进入下一个场景
|
||||
// ResManager.I.goCustomScene("Test2DScene"); //进入自定义场景
|
||||
}
|
||||
|
||||
enterGame() {
|
||||
//let islogin = HttpUnit.IsLogin();
|
||||
//console.log("进入游戏,登录状态:", islogin);
|
||||
this.jinduBar.active = false;
|
||||
this.LabProgress.node.active = false;
|
||||
//this.btnLogin.node.active = false
|
||||
// if (islogin) {
|
||||
// } else {
|
||||
// //没登录成功,先进主界面,在主界面里进行登录
|
||||
// }
|
||||
ResManager.I.goMainScene(); //进入下一个场景
|
||||
// ResManager.I.goCustomScene("Test2DScene"); //进入自定义场景
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ import { ImagePopup } from "../components/ImagePopup";
|
||||
import ResManager from "db://assets/Scripts/Main/Manager/ResManager";
|
||||
import { VideoRoleType } from "db://assets/Scripts/Main/Common/GlobalValue";
|
||||
import ConfigManager from "../../manager/ConfigManager";
|
||||
import LanguageUtils from "../../../Main/Common/LanguageUtils";
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass("ChatPanel")
|
||||
@@ -46,6 +47,7 @@ export class ChatPanel extends li_BaseView {
|
||||
id: number;
|
||||
private _nodeTab: any = {};
|
||||
|
||||
nameKey: string;
|
||||
openUIDataCT(data) {
|
||||
this.id = data;
|
||||
// 设置当前聊天的角色ID
|
||||
@@ -64,13 +66,23 @@ export class ChatPanel extends li_BaseView {
|
||||
this,
|
||||
this.onDialogUpdate
|
||||
);
|
||||
|
||||
Utils.addInnerEL(InnerMsgCode.LanguageChange, this, () => {
|
||||
this.girlName.string = LanguageUtils.getText(this.nameKey);
|
||||
});
|
||||
}
|
||||
onDestroy(): void {
|
||||
Utils.removeInnerEL(InnerMsgCode.LanguageChange, this, () => {
|
||||
this.girlName.string = LanguageUtils.getText(this.nameKey);
|
||||
});
|
||||
}
|
||||
refresh(id: number) {
|
||||
this.id = id;
|
||||
const data = ConfigManager.tables.TbGirls.get(this.id);
|
||||
const dataDetail = ConfigManager.tables.TbGirlsDetail.get(this.id);
|
||||
if (!data) return;
|
||||
this.girlName.string = data.name;
|
||||
this.nameKey = data.nameKey;
|
||||
this.girlName.string = LanguageUtils.getText(data.nameKey);
|
||||
ResManager.I.changeBundleSpriteFrame(
|
||||
this.girlImg,
|
||||
data.avatarPath,
|
||||
|
||||
@@ -4,6 +4,9 @@ import ResManager from "db://assets/Scripts/Main/Manager/ResManager";
|
||||
import { DetailImageItem } from "./DetailImageItem";
|
||||
import { NavigationManager } from "../../manager/NavigationManager";
|
||||
import ConfigManager from "../../manager/ConfigManager";
|
||||
import LanguageUtils from "../../../Main/Common/LanguageUtils";
|
||||
import Utils from "../../../Main/Common/Utils";
|
||||
import { InnerMsgCode } from "../../../Main/Config/InnerMsgCode";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@@ -47,6 +50,19 @@ export class GirlDetailPanel extends li_BaseView {
|
||||
super.onLoadCT();
|
||||
this.imgItemInst.node.active = false;
|
||||
this.refresh(this.id);
|
||||
|
||||
Utils.addInnerEL(InnerMsgCode.LanguageChange, this, () => {
|
||||
this.girlName.string = this.descName.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;
|
||||
});
|
||||
}
|
||||
|
||||
setVideEnable(enable: boolean) {
|
||||
@@ -55,12 +71,16 @@ export class GirlDetailPanel extends li_BaseView {
|
||||
this.avatarVideo.play();
|
||||
}
|
||||
}
|
||||
|
||||
nameKey: string;
|
||||
tagKey: string;
|
||||
refresh(index: number) {
|
||||
console.log(index);
|
||||
const dataDetail = ConfigManager.tables.TbGirlsDetail.get(this.id);
|
||||
const data = ConfigManager.tables.TbGirls.get(this.id);
|
||||
this.girlName.string = this.descName.string = data.name;
|
||||
this.nameKey = data.nameKey;
|
||||
this.girlName.string = this.descName.string = LanguageUtils.getText(
|
||||
data.nameKey
|
||||
);
|
||||
|
||||
if (dataDetail.pics[0].endsWith("video")) {
|
||||
ResManager.I.changeBundleVideo(
|
||||
@@ -86,9 +106,11 @@ export class GirlDetailPanel extends li_BaseView {
|
||||
|
||||
this.desc.string = dataDetail.detailDesc;
|
||||
let desc = "";
|
||||
for (let i = 0; i < data.tag.length; i++) {
|
||||
this.tagKey = data.tagKey;
|
||||
const tags = LanguageUtils.getText(data.tagKey).split("|");
|
||||
for (let i = 0; i < tags.length; i++) {
|
||||
if (i != 0) desc += "\n";
|
||||
desc += data.tag[i];
|
||||
desc += tags[i];
|
||||
}
|
||||
this.tags.string = desc;
|
||||
for (let i = 0; i < 5; i++) {
|
||||
|
||||
@@ -5,6 +5,8 @@ import ResManager from "db://assets/Scripts/Main/Manager/ResManager";
|
||||
import Utils from "db://assets/Scripts/Main/Common/Utils";
|
||||
import { NavigationManager } from "../../manager/NavigationManager";
|
||||
import { Girl, PriceType } from "../../../schema/schema";
|
||||
import LanguageUtils from "../../../Main/Common/LanguageUtils";
|
||||
import { InnerMsgCode } from "../../../Main/Config/InnerMsgCode";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@@ -29,15 +31,49 @@ export class GirlListItem extends Component {
|
||||
|
||||
id: number = -1;
|
||||
|
||||
nameKey: string;
|
||||
tagKey: string;
|
||||
protected onLoad(): void {
|
||||
Utils.addInnerEL(InnerMsgCode.LanguageChange, this, () => {
|
||||
this.girlName.string = 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 onDestroy(): void {
|
||||
Utils.removeInnerEL(InnerMsgCode.LanguageChange, this, () => {
|
||||
this.girlName.string = 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;
|
||||
});
|
||||
}
|
||||
|
||||
baseNode: Node;
|
||||
refreshData(data: Girl, baseNode: Node) {
|
||||
this.baseNode = baseNode;
|
||||
this.id = data.id;
|
||||
this.girlName.string = data.name;
|
||||
this.nameKey = data.nameKey;
|
||||
this.girlName.string = LanguageUtils.getText(data.nameKey);
|
||||
this.tagKey = data.tagKey;
|
||||
let desc = "";
|
||||
for (let i = 0; i < data.tag.length; i++) {
|
||||
if (i != 0) desc += "&";
|
||||
desc += data.tag[i];
|
||||
const tags = LanguageUtils.getText(data.tagKey).split("|");
|
||||
for (let i = 0; i < tags.length; i++) {
|
||||
if (i != 0) desc += "|";
|
||||
desc += tags[i];
|
||||
}
|
||||
this.tags.string = desc;
|
||||
this.price.node.active = data.priceType == PriceType.pay;
|
||||
|
||||
@@ -4,6 +4,8 @@ import ResManager from "db://assets/Scripts/Main/Manager/ResManager";
|
||||
import Utils from "db://assets/Scripts/Main/Common/Utils";
|
||||
import { NavigationManager } from "../../manager/NavigationManager";
|
||||
import { TbThemes, Theme } from "../../../schema/schema";
|
||||
import LanguageUtils from "../../../Main/Common/LanguageUtils";
|
||||
import { InnerMsgCode } from "../../../Main/Config/InnerMsgCode";
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass("ThemeItem")
|
||||
@@ -19,11 +21,24 @@ export class ThemeItem extends Component {
|
||||
private category: number;
|
||||
|
||||
private isLocked: boolean;
|
||||
start() {}
|
||||
|
||||
key: string;
|
||||
protected onLoad(): void {
|
||||
Utils.addInnerEL(InnerMsgCode.LanguageChange, this, () => {
|
||||
this.titleName.string = LanguageUtils.getText(this.key);
|
||||
});
|
||||
}
|
||||
protected onDestroy(): void {
|
||||
Utils.removeInnerEL(InnerMsgCode.LanguageChange, this, () => {
|
||||
this.titleName.string = LanguageUtils.getText(this.key);
|
||||
});
|
||||
}
|
||||
|
||||
refresh(themeData: Theme) {
|
||||
this.lockImg.node.active = !themeData.isRelease;
|
||||
this.isLocked = !themeData.isRelease;
|
||||
this.titleName.string = themeData.name;
|
||||
this.key = themeData.key;
|
||||
this.titleName.string = LanguageUtils.getText(themeData.key);
|
||||
this.category = themeData.category;
|
||||
ResManager.I.changeBundleSpriteFrame(
|
||||
this.img,
|
||||
|
||||
@@ -15,6 +15,7 @@ import { ThemeItem } from "./ThemeItem";
|
||||
import { NavigationManager } from "../../manager/NavigationManager";
|
||||
import { GirlListItem } from "./GirlListItem";
|
||||
import ConfigManager from "../../manager/ConfigManager";
|
||||
import LanguageUtils from "../../../Main/Common/LanguageUtils";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@@ -43,6 +44,7 @@ export class ThemePanel extends li_BaseView {
|
||||
this.itemInst = this._nodeTab.ThemeItem.getComponent(ThemeItem);
|
||||
this.itemInst.node.active = false;
|
||||
this.content = this._nodeTab.AllThemesLayout;
|
||||
|
||||
this.Show();
|
||||
}
|
||||
|
||||
@@ -50,7 +52,6 @@ export class ThemePanel extends li_BaseView {
|
||||
//some temp data
|
||||
this.coinNum.string = (50.0).toString();
|
||||
this.recId = 1;
|
||||
|
||||
if (this.cache) {
|
||||
for (let i = this.cache.length - 1; i >= 0; i--) {
|
||||
this.cache[i].node.destroy();
|
||||
|
||||
+73
-137
@@ -60,91 +60,15 @@ export enum PriceType {
|
||||
|
||||
|
||||
|
||||
export namespace demo {
|
||||
export class item {
|
||||
|
||||
constructor(_buf_: ByteBuf) {
|
||||
this.id = _buf_.readInt()
|
||||
this.name = _buf_.readString()
|
||||
this.desc = _buf_.readString()
|
||||
this.count = _buf_.readInt()
|
||||
}
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
readonly id: number
|
||||
/**
|
||||
* 名称
|
||||
*/
|
||||
readonly name: string
|
||||
/**
|
||||
* 描述
|
||||
*/
|
||||
readonly desc: string
|
||||
/**
|
||||
* 个数
|
||||
*/
|
||||
readonly count: number
|
||||
|
||||
resolve(tables:Tables) {
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
export namespace demo {
|
||||
export class Reward {
|
||||
|
||||
constructor(_buf_: ByteBuf) {
|
||||
this.id = _buf_.readInt()
|
||||
this.name = _buf_.readString()
|
||||
this.desc = _buf_.readString()
|
||||
this.count = _buf_.readInt()
|
||||
}
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
readonly id: number
|
||||
/**
|
||||
* 名称
|
||||
*/
|
||||
readonly name: string
|
||||
/**
|
||||
* 描述
|
||||
*/
|
||||
readonly desc: string
|
||||
/**
|
||||
* 个数
|
||||
*/
|
||||
readonly count: number
|
||||
|
||||
resolve(tables:Tables) {
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
export class Girl {
|
||||
|
||||
constructor(_buf_: ByteBuf) {
|
||||
this.id = _buf_.readInt()
|
||||
this.name = _buf_.readString()
|
||||
this.nameKey = _buf_.readString()
|
||||
this.age = _buf_.readString()
|
||||
this.category = _buf_.readInt()
|
||||
{ let n = Math.min(_buf_.readSize(), _buf_.size); this.tag = []; for(let i = 0 ; i < n ; i++) { let _e0 ;_e0 = _buf_.readString(); this.tag.push(_e0);}}
|
||||
this.tagKey = _buf_.readString()
|
||||
this.priceType = _buf_.readInt()
|
||||
this.avatarPath = _buf_.readString()
|
||||
this.starCount = _buf_.readInt()
|
||||
@@ -155,9 +79,9 @@ export class Girl {
|
||||
*/
|
||||
readonly id: number
|
||||
/**
|
||||
* 名称
|
||||
* 名字键
|
||||
*/
|
||||
readonly name: string
|
||||
readonly nameKey: string
|
||||
/**
|
||||
* 年龄
|
||||
*/
|
||||
@@ -167,9 +91,9 @@ export class Girl {
|
||||
*/
|
||||
readonly category: Category
|
||||
/**
|
||||
* 标签
|
||||
* 标签键
|
||||
*/
|
||||
readonly tag: string[]
|
||||
readonly tagKey: string
|
||||
/**
|
||||
* 付费类型
|
||||
*/
|
||||
@@ -231,10 +155,55 @@ export class GirlDetail {
|
||||
|
||||
|
||||
|
||||
export class Language {
|
||||
|
||||
constructor(_buf_: ByteBuf) {
|
||||
this.key = _buf_.readString()
|
||||
this.languageEn = _buf_.readString()
|
||||
this.languageCn = _buf_.readString()
|
||||
this.languageHi = _buf_.readString()
|
||||
this.languageFr = _buf_.readString()
|
||||
this.languageDe = _buf_.readString()
|
||||
}
|
||||
|
||||
/**
|
||||
* key
|
||||
*/
|
||||
readonly key: string
|
||||
readonly languageEn: string
|
||||
readonly languageCn: string
|
||||
/**
|
||||
* 印地语翻译
|
||||
*/
|
||||
readonly languageHi: string
|
||||
/**
|
||||
* 法语翻译
|
||||
*/
|
||||
readonly languageFr: string
|
||||
/**
|
||||
* 德语翻译
|
||||
*/
|
||||
readonly languageDe: string
|
||||
|
||||
resolve(tables:Tables) {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
export class Theme {
|
||||
|
||||
constructor(_buf_: ByteBuf) {
|
||||
this.id = _buf_.readInt()
|
||||
this.key = _buf_.readString()
|
||||
this.name = _buf_.readString()
|
||||
this.category = _buf_.readInt()
|
||||
this.isRelease = _buf_.readBool()
|
||||
@@ -245,6 +214,10 @@ export class Theme {
|
||||
* id
|
||||
*/
|
||||
readonly id: number
|
||||
/**
|
||||
* 多语言键
|
||||
*/
|
||||
readonly key: string
|
||||
/**
|
||||
* 主题名称
|
||||
*/
|
||||
@@ -268,6 +241,7 @@ export class Theme {
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -344,25 +318,25 @@ export class vector4 {
|
||||
|
||||
|
||||
|
||||
export namespace demo {
|
||||
export class TbReward {
|
||||
private _dataMap: Map<number, demo.Reward>
|
||||
private _dataList: demo.Reward[]
|
||||
|
||||
export class TbLanguage {
|
||||
private _dataMap: Map<string, Language>
|
||||
private _dataList: Language[]
|
||||
constructor(_buf_: ByteBuf) {
|
||||
this._dataMap = new Map<number, demo.Reward>()
|
||||
this._dataMap = new Map<string, Language>()
|
||||
this._dataList = []
|
||||
for(let n = _buf_.readInt(); n > 0; n--) {
|
||||
let _v: demo.Reward
|
||||
_v = new demo.Reward(_buf_)
|
||||
let _v: Language
|
||||
_v = new Language(_buf_)
|
||||
this._dataList.push(_v)
|
||||
this._dataMap.set(_v.id, _v)
|
||||
this._dataMap.set(_v.key, _v)
|
||||
}
|
||||
}
|
||||
|
||||
getDataMap(): Map<number, demo.Reward> { return this._dataMap; }
|
||||
getDataList(): demo.Reward[] { return this._dataList; }
|
||||
getDataMap(): Map<string, Language> { return this._dataMap; }
|
||||
getDataList(): Language[] { return this._dataList; }
|
||||
|
||||
get(key: number): demo.Reward | undefined {
|
||||
get(key: string): Language | undefined {
|
||||
return this._dataMap.get(key);
|
||||
}
|
||||
|
||||
@@ -374,7 +348,7 @@ export class TbReward {
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -476,76 +450,38 @@ export class TbThemes {
|
||||
|
||||
|
||||
|
||||
export namespace demo {
|
||||
export class Tbitem {
|
||||
private _dataMap: Map<number, demo.item>
|
||||
private _dataList: demo.item[]
|
||||
constructor(_buf_: ByteBuf) {
|
||||
this._dataMap = new Map<number, demo.item>()
|
||||
this._dataList = []
|
||||
for(let n = _buf_.readInt(); n > 0; n--) {
|
||||
let _v: demo.item
|
||||
_v = new demo.item(_buf_)
|
||||
this._dataList.push(_v)
|
||||
this._dataMap.set(_v.id, _v)
|
||||
}
|
||||
}
|
||||
|
||||
getDataMap(): Map<number, demo.item> { return this._dataMap; }
|
||||
getDataList(): demo.item[] { return this._dataList; }
|
||||
|
||||
get(key: number): demo.item | undefined {
|
||||
return this._dataMap.get(key);
|
||||
}
|
||||
|
||||
resolve(tables:Tables) {
|
||||
for(let data of this._dataList)
|
||||
{
|
||||
data.resolve(tables)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
type ByteBufLoader = (file: string) => ByteBuf
|
||||
|
||||
export class Tables {
|
||||
private _TbReward: demo.TbReward
|
||||
get TbReward(): demo.TbReward { return this._TbReward;}
|
||||
private _TbLanguage: TbLanguage
|
||||
get TbLanguage(): TbLanguage { return this._TbLanguage;}
|
||||
private _TbGirls: TbGirls
|
||||
get TbGirls(): TbGirls { return this._TbGirls;}
|
||||
private _TbGirlsDetail: TbGirlsDetail
|
||||
get TbGirlsDetail(): TbGirlsDetail { return this._TbGirlsDetail;}
|
||||
private _TbThemes: TbThemes
|
||||
get TbThemes(): TbThemes { return this._TbThemes;}
|
||||
private _Tbitem: demo.Tbitem
|
||||
get Tbitem(): demo.Tbitem { return this._Tbitem;}
|
||||
|
||||
static getTableNames(): string[] {
|
||||
let names: string[] = [];
|
||||
names.push('demo_tbreward');
|
||||
names.push('tblanguage');
|
||||
names.push('tbgirls');
|
||||
names.push('tbgirlsdetail');
|
||||
names.push('tbthemes');
|
||||
names.push('demo_tbitem');
|
||||
return names;
|
||||
}
|
||||
|
||||
constructor(loader: ByteBufLoader) {
|
||||
this._TbReward = new demo.TbReward(loader('demo_tbreward'))
|
||||
this._TbLanguage = new TbLanguage(loader('tblanguage'))
|
||||
this._TbGirls = new TbGirls(loader('tbgirls'))
|
||||
this._TbGirlsDetail = new TbGirlsDetail(loader('tbgirlsdetail'))
|
||||
this._TbThemes = new TbThemes(loader('tbthemes'))
|
||||
this._Tbitem = new demo.Tbitem(loader('demo_tbitem'))
|
||||
|
||||
this._TbReward.resolve(this)
|
||||
this._TbLanguage.resolve(this)
|
||||
this._TbGirls.resolve(this)
|
||||
this._TbGirlsDetail.resolve(this)
|
||||
this._TbThemes.resolve(this)
|
||||
this._Tbitem.resolve(this)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -28,23 +28,23 @@
|
||||
"__id__": 112
|
||||
},
|
||||
{
|
||||
"__id__": 211
|
||||
"__id__": 213
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 241
|
||||
},
|
||||
{
|
||||
"__id__": 243
|
||||
},
|
||||
{
|
||||
"__id__": 245
|
||||
},
|
||||
{
|
||||
"__id__": 247
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 247
|
||||
"__id__": 249
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -103,23 +103,23 @@
|
||||
"__id__": 150
|
||||
},
|
||||
{
|
||||
"__id__": 196
|
||||
"__id__": 198
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 204
|
||||
},
|
||||
{
|
||||
"__id__": 206
|
||||
},
|
||||
{
|
||||
"__id__": 208
|
||||
},
|
||||
{
|
||||
"__id__": 210
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 210
|
||||
"__id__": 212
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -3410,23 +3410,23 @@
|
||||
"__id__": 151
|
||||
},
|
||||
{
|
||||
"__id__": 174
|
||||
"__id__": 176
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 189
|
||||
},
|
||||
{
|
||||
"__id__": 191
|
||||
},
|
||||
{
|
||||
"__id__": 193
|
||||
},
|
||||
{
|
||||
"__id__": 195
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 195
|
||||
"__id__": 197
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -3475,9 +3475,6 @@
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 164
|
||||
},
|
||||
{
|
||||
"__id__": 166
|
||||
},
|
||||
@@ -3485,11 +3482,14 @@
|
||||
"__id__": 168
|
||||
},
|
||||
{
|
||||
"__id__": 171
|
||||
"__id__": 170
|
||||
},
|
||||
{
|
||||
"__id__": 173
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 173
|
||||
"__id__": 175
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -3695,10 +3695,13 @@
|
||||
},
|
||||
{
|
||||
"__id__": 161
|
||||
},
|
||||
{
|
||||
"__id__": 163
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 163
|
||||
"__id__": 165
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -3825,6 +3828,27 @@
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "c7ZJkEwKRCTajinGWIDefs"
|
||||
},
|
||||
{
|
||||
"__type__": "d7e4fOii5xNLqH2PF6de4pP",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 158
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 164
|
||||
},
|
||||
"languageKey": "chatpanel.inputplaceholder",
|
||||
"defaultText": "",
|
||||
"autoUpdate": true,
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "47FCHFhs9Hur4PavpxytHf"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
||||
@@ -3848,7 +3872,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 165
|
||||
"__id__": 167
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
@@ -3876,7 +3900,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 167
|
||||
"__id__": 169
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
@@ -3921,14 +3945,14 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 169
|
||||
"__id__": 171
|
||||
},
|
||||
"editingDidBegan": [],
|
||||
"textChanged": [],
|
||||
"editingDidEnded": [],
|
||||
"editingReturn": [
|
||||
{
|
||||
"__id__": 170
|
||||
"__id__": 172
|
||||
}
|
||||
],
|
||||
"_textLabel": {
|
||||
@@ -3973,7 +3997,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 172
|
||||
"__id__": 174
|
||||
},
|
||||
"_alignFlags": 44,
|
||||
"_target": null,
|
||||
@@ -4022,23 +4046,23 @@
|
||||
},
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 175
|
||||
"__id__": 177
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 181
|
||||
},
|
||||
{
|
||||
"__id__": 183
|
||||
},
|
||||
{
|
||||
"__id__": 185
|
||||
},
|
||||
{
|
||||
"__id__": 187
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 188
|
||||
"__id__": 190
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -4075,20 +4099,20 @@
|
||||
"_objFlags": 512,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 174
|
||||
"__id__": 176
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 176
|
||||
"__id__": 178
|
||||
},
|
||||
{
|
||||
"__id__": 178
|
||||
"__id__": 180
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 180
|
||||
"__id__": 182
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -4125,11 +4149,11 @@
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 175
|
||||
"__id__": 177
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 177
|
||||
"__id__": 179
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
@@ -4153,11 +4177,11 @@
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 175
|
||||
"__id__": 177
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 179
|
||||
"__id__": 181
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
@@ -4234,11 +4258,11 @@
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 174
|
||||
"__id__": 176
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 182
|
||||
"__id__": 184
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
@@ -4262,11 +4286,11 @@
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 174
|
||||
"__id__": 176
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 184
|
||||
"__id__": 186
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
@@ -4307,15 +4331,15 @@
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 174
|
||||
"__id__": 176
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 186
|
||||
"__id__": 188
|
||||
},
|
||||
"clickEvents": [
|
||||
{
|
||||
"__id__": 187
|
||||
"__id__": 189
|
||||
}
|
||||
],
|
||||
"_interactable": true,
|
||||
@@ -4367,7 +4391,7 @@
|
||||
"_duration": 0.1,
|
||||
"_zoomScale": 1.2,
|
||||
"_target": {
|
||||
"__id__": 174
|
||||
"__id__": 176
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
@@ -4408,7 +4432,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 190
|
||||
"__id__": 192
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
@@ -4436,7 +4460,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 192
|
||||
"__id__": 194
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
@@ -4481,7 +4505,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 194
|
||||
"__id__": 196
|
||||
},
|
||||
"_alignFlags": 44,
|
||||
"_target": null,
|
||||
@@ -4531,18 +4555,18 @@
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 197
|
||||
},
|
||||
{
|
||||
"__id__": 199
|
||||
},
|
||||
{
|
||||
"__id__": 201
|
||||
},
|
||||
{
|
||||
"__id__": 203
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 203
|
||||
"__id__": 205
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -4579,11 +4603,11 @@
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 196
|
||||
"__id__": 198
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 198
|
||||
"__id__": 200
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
@@ -4607,11 +4631,11 @@
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 196
|
||||
"__id__": 198
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 200
|
||||
"__id__": 202
|
||||
},
|
||||
"_alignFlags": 45,
|
||||
"_target": null,
|
||||
@@ -4643,11 +4667,11 @@
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 196
|
||||
"__id__": 198
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 202
|
||||
"__id__": 204
|
||||
},
|
||||
"_resourceType": 1,
|
||||
"_remoteURL": "",
|
||||
@@ -4690,7 +4714,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 205
|
||||
"__id__": 207
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
@@ -4718,7 +4742,7 @@
|
||||
},
|
||||
"_enabled": false,
|
||||
"__prefab": {
|
||||
"__id__": 207
|
||||
"__id__": 209
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
@@ -4763,7 +4787,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 209
|
||||
"__id__": 211
|
||||
},
|
||||
"_alignFlags": 45,
|
||||
"_target": null,
|
||||
@@ -4812,20 +4836,20 @@
|
||||
},
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 212
|
||||
"__id__": 214
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 236
|
||||
"__id__": 238
|
||||
},
|
||||
{
|
||||
"__id__": 238
|
||||
"__id__": 240
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 240
|
||||
"__id__": 242
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -4862,24 +4886,24 @@
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 211
|
||||
"__id__": 213
|
||||
},
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 213
|
||||
"__id__": 215
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 231
|
||||
"__id__": 233
|
||||
},
|
||||
{
|
||||
"__id__": 233
|
||||
"__id__": 235
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 235
|
||||
"__id__": 237
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -4916,27 +4940,27 @@
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 212
|
||||
"__id__": 214
|
||||
},
|
||||
"_children": [
|
||||
{
|
||||
"__id__": 214
|
||||
"__id__": 216
|
||||
}
|
||||
],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 224
|
||||
},
|
||||
{
|
||||
"__id__": 226
|
||||
},
|
||||
{
|
||||
"__id__": 228
|
||||
},
|
||||
{
|
||||
"__id__": 230
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 230
|
||||
"__id__": 232
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -4973,14 +4997,11 @@
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": {
|
||||
"__id__": 213
|
||||
"__id__": 215
|
||||
},
|
||||
"_children": [],
|
||||
"_active": true,
|
||||
"_components": [
|
||||
{
|
||||
"__id__": 215
|
||||
},
|
||||
{
|
||||
"__id__": 217
|
||||
},
|
||||
@@ -4989,10 +5010,13 @@
|
||||
},
|
||||
{
|
||||
"__id__": 221
|
||||
},
|
||||
{
|
||||
"__id__": 223
|
||||
}
|
||||
],
|
||||
"_prefab": {
|
||||
"__id__": 223
|
||||
"__id__": 225
|
||||
},
|
||||
"_lpos": {
|
||||
"__type__": "cc.Vec3",
|
||||
@@ -5029,11 +5053,11 @@
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 214
|
||||
"__id__": 216
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 216
|
||||
"__id__": 218
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
@@ -5057,11 +5081,11 @@
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 214
|
||||
"__id__": 216
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 218
|
||||
"__id__": 220
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
@@ -5102,11 +5126,11 @@
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 214
|
||||
"__id__": 216
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 220
|
||||
"__id__": 222
|
||||
},
|
||||
"_alignFlags": 12,
|
||||
"_target": null,
|
||||
@@ -5138,11 +5162,11 @@
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 214
|
||||
"__id__": 216
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 222
|
||||
"__id__": 224
|
||||
},
|
||||
"clickEvents": [],
|
||||
"_interactable": true,
|
||||
@@ -5207,11 +5231,11 @@
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 213
|
||||
"__id__": 215
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 225
|
||||
"__id__": 227
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
@@ -5235,11 +5259,11 @@
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 213
|
||||
"__id__": 215
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 227
|
||||
"__id__": 229
|
||||
},
|
||||
"_type": 3,
|
||||
"_inverted": false,
|
||||
@@ -5257,11 +5281,11 @@
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 213
|
||||
"__id__": 215
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 229
|
||||
"__id__": 231
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
@@ -5315,11 +5339,11 @@
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 212
|
||||
"__id__": 214
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 232
|
||||
"__id__": 234
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
@@ -5343,11 +5367,11 @@
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 212
|
||||
"__id__": 214
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 234
|
||||
"__id__": 236
|
||||
},
|
||||
"_customMaterial": null,
|
||||
"_srcBlendFactor": 2,
|
||||
@@ -5401,11 +5425,11 @@
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 211
|
||||
"__id__": 213
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 237
|
||||
"__id__": 239
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
@@ -5429,14 +5453,14 @@
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"node": {
|
||||
"__id__": 211
|
||||
"__id__": 213
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 239
|
||||
"__id__": 241
|
||||
},
|
||||
"image": {
|
||||
"__id__": 217
|
||||
"__id__": 219
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
@@ -5467,7 +5491,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 242
|
||||
"__id__": 244
|
||||
},
|
||||
"_contentSize": {
|
||||
"__type__": "cc.Size",
|
||||
@@ -5495,7 +5519,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 244
|
||||
"__id__": 246
|
||||
},
|
||||
"_alignFlags": 45,
|
||||
"_target": null,
|
||||
@@ -5531,11 +5555,11 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 246
|
||||
"__id__": 248
|
||||
},
|
||||
"m_rootNode": null,
|
||||
"editBox": {
|
||||
"__id__": 168
|
||||
"__id__": 170
|
||||
},
|
||||
"girlName": {
|
||||
"__id__": 24
|
||||
@@ -5547,7 +5571,7 @@
|
||||
"__id__": 77
|
||||
},
|
||||
"popUpImage": {
|
||||
"__id__": 238
|
||||
"__id__": 240
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,2 +0,0 @@
|
||||
┐ИИ│⌠Е┘╥1Ф▐▐Х©╟1
|
||||
┐ЙИ│⌠Е┘╥2Ф▐▐Х©╟2d
|
||||
@@ -1,2 +0,0 @@
|
||||
┐ИИ│⌠Е┘╥1Г╒▌Г┴┤
|
||||
┐ЙИ│⌠Е┘╥2И┤▒Е╦│d
|
||||
@@ -1,12 +0,0 @@
|
||||
{
|
||||
"ver": "1.0.3",
|
||||
"importer": "buffer",
|
||||
"imported": true,
|
||||
"uuid": "22867eec-f2ee-4997-b2b4-b277af84b625",
|
||||
"files": [
|
||||
".bin",
|
||||
".json"
|
||||
],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1,9 @@
|
||||
themepanel.titleGirls Online在线选妃+ऑनलाइन लड़कियाँFilles en ligneMädchen Onlinethemepanel.recomandtextDaily Recomand每日推荐%दैनिक सिफारिशRecommandation quotidienneTägliche Empfehlunggirllistpanel.title Girl List技师列表,लड़कियों की सूचीListe des filles␍Mädchenlistegirldetailpanel.chatbtn
|
||||
Send Msgs!发送消息संदेश भेजेंEnvoyer un messageNachricht sendengirldetailpanel.nameName:名字:
|
||||
नाम:Nom :Name:girldetailpanel.ageAge:年龄:␍उम्र:Âge :Alter:girldetailpanel.descDescription:␍自我介绍:विवरण:␍Description :␍Beschreibung:chatpanel.inputplaceholder Messages!请输入:संदेश लिखेंÉcrivez ici...Nachricht eingeben␍category_1001mature_lady熟女%परिपक्व महिलाFemme mature
|
||||
Reife Dame␍category_1002eighteen18岁अठारह वर्षDix-huit ansAchtzehn␍category_1003 hot_mommy辣妈सेक्सी माँ
|
||||
Maman sexyHeiße Mama␍category_1004binding捆绑बंधनBondageFesseln␍category_1005public_fight公众野战+सार्वजनिक संभोगSexe publicÖffentlicher Sex␍category_1006cartoon卡通कार्टून␍Dessin animéZeichentrickgirl_10001_nameAnaya Kapoor 阿纳雅आन्या कपूरAnaya KapoorAnaya Kapoorgirl_10002_nameMeher Joshi梅尔मेहर जोशीMeher JoshiMeher Joshigirl_10003_name
|
||||
Sana Reddy萨娜साना रेड्डी
|
||||
Sana Reddy
|
||||
Sana Reddygirl_10001_tag Hot|Horny␍火辣|饥渴"सेक्सी|कामुकChaude|Excitée
|
||||
Heiß|Geilgirl_10002_tag%Earth-tone linens,handcrafted jewelry土色亚麻制品|手工珠宝Yभूरे रंग के लिनन|हस्तनिर्मित गहनेLinge terreux,Bijoux artisanaux'Erdfarbene Leinen,Handgemachter Schmuckgirl_10003_tagSinger-Songwriter,Dancer␍舞者|歌手2गायक-गीतकार|नर्तकीChanteuse-compositrice,Danseuse Sängerin-Songwriterin,Tänzerin
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
"ver": "1.0.3",
|
||||
"importer": "buffer",
|
||||
"imported": true,
|
||||
"uuid": "63fbd1bd-9cb1-4fa3-aca9-15b259a9c421",
|
||||
"uuid": "4c2b1986-c2f8-47a9-be89-9dbe639a2f4a",
|
||||
"files": [
|
||||
".bin",
|
||||
".json"
|
||||
Binary file not shown.
Reference in New Issue
Block a user