Compare commits

...

13 Commits

Author SHA1 Message Date
han_han9
1fad68505d Merge branch 'master' of https://git.yangjie.link/han_han9/Max-Cocos-Demo 2025-11-26 22:57:27 +08:00
han_han9
4c16bec13f fix: 更新提交 2025-11-26 22:57:07 +08:00
614ce6470c 上传宠物资源 2025-11-03 20:58:57 +08:00
han_han9
8a6620cf8f fix: 更新resManager 2025-10-31 07:58:06 +08:00
han_han9
4288798723 Merge branch 'master' of https://git.yangjie.link/han_han9/Max-Cocos-Demo 2025-10-30 08:01:45 +08:00
han_han9
438aea779e fix: 修复资源释放BUG 2025-10-30 08:01:30 +08:00
a542863dba 更新 extensions/max-studio/assets/max-studio/core/res/CCRemoteSprite.ts 2025-10-29 21:40:41 +08:00
a8e54179a2 添加 extensions/max-studio/assets/max-studio/core/res/CCRemoteSprite.ts 2025-10-29 21:40:17 +08:00
han_han9
41d7fe125c fix:优化资源清理 2025-10-29 07:52:29 +08:00
han_han9
55c4fcd9ae feat: 提交资源 2025-10-28 21:55:41 +08:00
han_han9
591f398085 fix: 测试提交 2025-10-10 22:33:40 +08:00
han_han9
389887202b fix: 更新 2025-10-10 22:26:56 +08:00
han_han9
64fc88d1bb fix: 更新日志 2025-10-10 22:16:06 +08:00
2414 changed files with 230706 additions and 0 deletions

View File

@@ -0,0 +1,2 @@
[InternetShortcut]
URL=https://docs.cocos.com/creator/manual/en/scripting/setup.html#custom-script-template

View File

@@ -0,0 +1 @@
{}

4
.gitignore vendored Normal file
View File

@@ -0,0 +1,4 @@
library
temp
build
node_modules

38
.prettierrc Normal file
View File

@@ -0,0 +1,38 @@
{
"printWidth": 120,
"tabWidth": 4,
"useTabs": false,
"semi": true,
"singleQuote": false,
"quoteProps": "consistent",
"jsxSingleQuote": false,
"trailingComma": "all",
"bracketSpacing": true,
"bracketSameLine": false,
"arrowParens": "always",
"proseWrap": "always",
"endOfLine": "lf",
"htmlWhitespaceSensitivity": "css",
"vueIndentScriptAndStyle": false,
"jsxBracketSameLine": false,
"overrides": [
{
"files": "*.json",
"options": {
"printWidth": 80,
"tabWidth": 2,
"singleQuote": false
}
},
{
"files": ["*.md", "*.mdx"],
"options": {
"printWidth": 80,
"proseWrap": "never",
"embeddedLanguageFormatting": "off"
}
}
]
}

9
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,9 @@
{
"eslint.useFlatConfig": true,
"eslint.validate": ["typescript"],
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
},
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode"
}

7
README.md Executable file
View File

@@ -0,0 +1,7 @@
# UI 案例
一个漂亮的闯关类 UI 模板,包含商店、背包等常见游戏 UI 界面。
## Screenshots
<img width="319" alt="ui-image" src="https://user-images.githubusercontent.com/32630749/158115467-5bf10b77-c5e1-464a-8703-0f368fc29110.png">

11
assets/configs.meta Normal file
View File

@@ -0,0 +1,11 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "33558479-c4d2-4151-95ca-52ee0914ea78",
"files": [],
"subMetas": {},
"userData": {
"isBundle": true
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "f7c4440c-c8da-402d-b2fb-9e8608fa3dca",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "c20136b0-1489-4c36-b935-aecc9c99eaa9",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,17 @@
import { ConfigParseUtils } from "./ConfigParseUtils";
/** Bean: Beans */
export interface Beans {
ClassName: string;
FieldName: string;
FieldType: string;
Comment: string;
}
export function parseBeans(data: any): Beans {
return {
ClassName: ConfigParseUtils.parseString(data.ClassName),
FieldName: ConfigParseUtils.parseString(data.FieldName),
FieldType: ConfigParseUtils.parseString(data.FieldType),
Comment: ConfigParseUtils.parseString(data.Comment),
};
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "793d74d0-b0fc-446a-a36e-7ea0476da99a",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,288 @@
import { Vec2, Vec3, Vec4, Color, Size, Rect, Quat, Mat4 } from "cc";
import LogUtils from "@max-studio/core/utils/LogUtils";
/**
* 配置表解析工具类
* 提供通用的数据类型解析函数
*
* ⚠️ 此文件由配置表生成器自动生成,请勿手动修改!
* 如需修改,请编辑 configs/plugins/ConfigTableGenerator.ts 中的 generateConfigParseUtils 方法
*/
export class ConfigParseUtils {
/**
* 解析Vec2类型
*/
public static parseVec2(value: any): Vec2 {
if (typeof value === "string") {
const parts = value.split(",").map((v) => Number.parseFloat(v.trim()) || 0);
return new Vec2(parts[0] || 0, parts[1] || 0);
}
return new Vec2(0, 0);
}
/**
* 解析Vec3类型
*/
public static parseVec3(value: any): Vec3 {
if (typeof value === "string") {
const parts = value.split(",").map((v) => Number.parseFloat(v.trim()) || 0);
return new Vec3(parts[0] || 0, parts[1] || 0, parts[2] || 0);
}
return new Vec3(0, 0, 0);
}
/**
* 解析Vec4类型
*/
public static parseVec4(value: any): Vec4 {
if (typeof value === "string") {
const parts = value.split(",").map((v) => Number.parseFloat(v.trim()) || 0);
return new Vec4(parts[0] || 0, parts[1] || 0, parts[2] || 0, parts[3] || 0);
}
return new Vec4(0, 0, 0, 0);
}
/**
* 解析Color类型
*/
public static parseColor(value: any): Color {
if (typeof value === "string") {
if (value.startsWith("#")) {
// 十六进制颜色
const hex = value.slice(1);
const r = Number.parseInt(hex.substring(0, 2), 16);
const g = Number.parseInt(hex.substring(2, 4), 16);
const b = Number.parseInt(hex.substring(4, 6), 16);
const a = hex.length > 6 ? Number.parseInt(hex.substring(6, 8), 16) : 255;
return new Color(r, g, b, a);
} else {
// 逗号分隔的RGBA值
const parts = value.split(",").map((v) => Number.parseFloat(v.trim()) || 0);
return new Color(parts[0] || 0, parts[1] || 0, parts[2] || 0, parts[3] !== undefined ? parts[3] : 255);
}
}
return new Color(0, 0, 0, 255);
}
/**
* 解析Size类型
*/
public static parseSize(value: any): Size {
if (typeof value === "string") {
const parts = value.split(",").map((v) => Number.parseFloat(v.trim()) || 0);
return new Size(parts[0] || 0, parts[1] || 0);
}
return new Size(0, 0);
}
/**
* 解析Rect类型
*/
public static parseRect(value: any): Rect {
if (typeof value === "string") {
const parts = value.split(",").map((v) => Number.parseFloat(v.trim()) || 0);
return new Rect(parts[0] || 0, parts[1] || 0, parts[2] || 0, parts[3] || 0);
}
return new Rect(0, 0, 0, 0);
}
/**
* 解析Quat类型
*/
public static parseQuat(value: any): Quat {
if (typeof value === "string") {
const parts = value.split(",").map((v) => Number.parseFloat(v.trim()) || 0);
return new Quat(parts[0] || 0, parts[1] || 0, parts[2] || 0, parts[3] !== undefined ? parts[3] : 1);
}
return new Quat(0, 0, 0, 1);
}
/**
* 解析Mat4类型
*/
public static parseMat4(value: any): Mat4 {
if (typeof value === "string") {
const parts = value.split(",").map((v) => Number.parseFloat(v.trim()) || 0);
const mat = new Mat4();
try {
mat.set(
parts[0],
parts[1],
parts[2],
parts[3],
parts[4],
parts[5],
parts[6],
parts[7],
parts[8],
parts[9],
parts[10],
parts[11],
parts[12],
parts[13],
parts[14],
parts[15],
);
} catch (err) {
LogUtils.error("ConfigParseUtils", "解析Mat4失败:", err);
}
return mat;
}
return new Mat4();
}
/**
* 解析布尔值
*/
static parseBoolean(value: any): boolean {
if (typeof value === "boolean") {
return value;
}
if (typeof value === "string") {
const lowerValue = value.toLowerCase();
return lowerValue === "true" || lowerValue === "1" || lowerValue === "yes";
}
if (typeof value === "number") {
return value !== 0;
}
return false;
}
/**
* 解析整数
*/
public static parseInt(value: string | number): number {
if (typeof value === "number") return Math.floor(value);
if (typeof value === "string") return Number.parseInt(value.trim()) || 0;
return 0;
}
/**
* 解析浮点数
*/
static parseFloat(value: any): number {
return Number.parseFloat(value) || 0;
}
/**
* 解析字符串
*/
static parseString(value: any): string {
return String(value || "");
}
/**
* 解析字符串数组
*/
static parseStringArray(value: any): string[] {
if (Array.isArray(value)) {
return value.map((item) => String(item || ""));
}
if (typeof value === "string") {
return value
.split(",")
.map((item) => item.trim())
.filter((item) => item.length > 0);
}
return [];
}
/**
* 解析数字数组
*/
static parseNumberArray(value: any): number[] {
if (Array.isArray(value)) {
return value.map((item) => Number.parseFloat(item) || 0);
}
if (typeof value === "string") {
return value.split(",").map((item) => Number.parseFloat(item.trim()) || 0);
}
return [];
}
/**
* 深度冻结对象,确保所有嵌套属性都不可修改
*/
public static deepFreeze<T>(obj: T): T {
if (obj === null || typeof obj !== "object") {
return obj;
}
// 检查是否为 ArrayBuffer views 或其他不可冻结的对象
if (ArrayBuffer.isView(obj) || obj instanceof ArrayBuffer) {
return obj;
}
// 检查是否为 Date、RegExp 等内置对象
if (obj instanceof Date || obj instanceof RegExp) {
return obj;
}
try {
// 递归冻结所有属性(先冻结子对象)
Object.getOwnPropertyNames(obj).forEach((prop) => {
const value = (obj as any)[prop];
if (value !== null && typeof value === "object") {
this.deepFreeze(value);
}
});
// 最后冻结对象本身
Object.freeze(obj);
// 对于数组,还需要防止索引赋值
if (Array.isArray(obj)) {
Object.seal(obj);
}
} catch (err) {
// 如果冻结失败,记录警告但不中断程序
LogUtils.warn("ConfigParseUtils", "无法冻结对象:", obj, err);
}
return obj;
}
/**
* 创建配置数据的只读代理,提供更好的错误提示
*/
public static createReadonlyProxy<T extends object>(obj: T, configName: string = "配置数据"): T {
return new Proxy(obj, {
set(target, property, value) {
const errorMsg = `❌ 禁止修改${configName}的属性 "${String(property)}"!配置数据在运行时应保持不可变。`;
LogUtils.error("ConfigParseUtils", errorMsg);
throw new Error(errorMsg);
},
defineProperty(target, property, descriptor) {
const errorMsg = `❌ 禁止定义${configName}的属性 "${String(property)}"!配置数据在运行时应保持不可变。`;
LogUtils.error("ConfigParseUtils", errorMsg);
throw new Error(errorMsg);
},
deleteProperty(target, property) {
const errorMsg = `❌ 禁止删除${configName}的属性 "${String(property)}"!配置数据在运行时应保持不可变。`;
LogUtils.error("ConfigParseUtils", errorMsg);
throw new Error(errorMsg);
},
});
}
}
// 导出便捷的解析函数
export const {
parseVec2,
parseVec3,
parseVec4,
parseColor,
parseSize,
parseRect,
parseQuat,
parseMat4,
parseBoolean,
parseInt,
parseFloat,
parseString,
parseStringArray,
parseNumberArray,
deepFreeze,
createReadonlyProxy,
} = ConfigParseUtils;

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "e6350dd1-e9ea-4a64-9823-a20c6bf82990",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,7 @@
/** 自动生成的枚举定义 */
export enum DressSourceType {
NONE = 0, // 无
SLOT = 1, // 插槽
SOCKET_TEX = 2, // 挂点静态图
SOCKET_SPINE = 3, // 挂点动画
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "e46d8a30-83a4-4635-951a-84486ebeec96",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,82 @@
import { Color } from "cc";
import { ConfigParseUtils } from "./ConfigParseUtils";
/**
* PetConfig数据结构
*/
export class PetConfigData {
private _id: number;
public get id(): number {
return this._id;
}
private _key: string;
public get key(): string {
return this._key;
}
private _bundle: string;
public get bundle(): string {
return this._bundle;
}
private _path: string;
public get path(): string {
return this._path;
}
private _name: string;
public get name(): string {
return this._name;
}
private _color: Color;
public get color(): Color {
return this._color;
}
private _desc: string;
public get desc(): string {
return this._desc;
}
public constructor(
id: number,
key: string,
bundle: string,
path: string,
name: string,
color: Color,
desc: string
) {
this._id = id;
this._key = key;
this._bundle = bundle;
this._path = path;
this._name = name;
this._color = color;
this._desc = desc;
}
}
/**
* 解析配置数据
*/
export function parsePetConfigData(data: any): PetConfigData {
return new PetConfigData(
ConfigParseUtils.parseInt(data.id),
ConfigParseUtils.parseString(data.key),
ConfigParseUtils.parseString(data.bundle),
ConfigParseUtils.parseString(data.path),
ConfigParseUtils.parseString(data.name),
ConfigParseUtils.parseColor(data.color),
ConfigParseUtils.parseString(data.desc)
);
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "0b58225d-8d7f-429c-af23-1548e8acb583",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,76 @@
import { JsonAsset } from "cc";
import { singleton, Singleton } from "@max-studio/core/Singleton";
import LogUtils from "@max-studio/core/utils/LogUtils";
import { ConfigParseUtils } from "./ConfigParseUtils";
import { PetConfigData, parsePetConfigData } from "./PetConfigData";
import ResManager from "@max-studio/core/res/ResManager";
/**
* PetConfig配置管理器
*
* ⚠️ 此文件由配置表生成器自动生成,请勿手动修改!
* 如需修改请编辑对应的Excel配置文件然后重新生成
*/
@singleton({ auto: true })
export class PetConfigManager extends Singleton {
private configList: readonly PetConfigData[] = [];
private configMap = new Map<number, PetConfigData>();
private isLoaded = false;
protected async onInit(): Promise<void> {
await this.loadConfig();
}
private async loadConfig(): Promise<void> {
try {
const { err, asset } = await ResManager.getInstance().loadAsset<JsonAsset>({
path: "generated/data/PetConfig",
type: JsonAsset,
bundle: "configs",
});
this.parseConfig(<any>asset.json);
this.isLoaded = true;
} catch (err) {
LogUtils.error("PetConfigManager", "加载 PetConfig 配置失败:", err);
}
}
private parseConfig(data: any[]): void {
this.configList = Object.freeze(
data.map((item) => {
const config = parsePetConfigData(item);
const frozenConfig = ConfigParseUtils.deepFreeze(config);
return ConfigParseUtils.createReadonlyProxy(frozenConfig, "PetConfigData配置");
}),
);
this.configMap.clear();
for (const config of this.configList) {
this.configMap.set((config as any).id, config);
}
ConfigParseUtils.deepFreeze(this.configMap);
}
public getConfig(id: number): PetConfigData | null {
if (!this.isLoaded) {
LogUtils.warn("PetConfigManager", "PetConfig 配置尚未加载完成,请等待加载完成");
return null;
}
return this.configMap.get(id) || null;
}
public getAllConfigs(): PetConfigData[] {
if (!this.isLoaded) {
LogUtils.warn("PetConfigManager", "PetConfig 配置尚未加载完成,请等待加载完成");
return [];
}
return [...this.configList];
}
public isConfigLoaded(): boolean {
return this.isLoaded;
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "a2093a8e-f81a-4bf2-a7a8-6bb20c02484c",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,71 @@
import { ConfigParseUtils } from "./ConfigParseUtils";
/**
* PetPartConfig数据结构
*/
export class PetPartConfigData {
private _id: number;
public get id(): number {
return this._id;
}
private _name: string;
public get name(): string {
return this._name;
}
private _sourceName: string;
public get sourceName(): string {
return this._sourceName;
}
private _type: number;
public get type(): number {
return this._type;
}
private _sourceType: number;
public get sourceType(): number {
return this._sourceType;
}
private _quality: number;
public get quality(): number {
return this._quality;
}
public constructor(
id: number,
name: string,
sourceName: string,
type: number,
sourceType: number,
quality: number,
) {
this._id = id;
this._name = name;
this._sourceName = sourceName;
this._type = type;
this._sourceType = sourceType;
this._quality = quality;
}
}
/**
* 解析配置数据
*/
export function parsePetPartConfigData(data: any): PetPartConfigData {
return new PetPartConfigData(
ConfigParseUtils.parseInt(data.id),
ConfigParseUtils.parseString(data.name),
ConfigParseUtils.parseString(data.sourceName),
ConfigParseUtils.parseInt(data.type),
ConfigParseUtils.parseInt(data.sourceType),
ConfigParseUtils.parseInt(data.quality),
);
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "eb6f0ae1-9c7b-4d26-a8b1-b96d2e65631f",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,76 @@
import { JsonAsset } from "cc";
import { singleton, Singleton } from "@max-studio/core/Singleton";
import LogUtils from "@max-studio/core/utils/LogUtils";
import { ConfigParseUtils } from "./ConfigParseUtils";
import { PetPartConfigData, parsePetPartConfigData } from "./PetPartConfigData";
import ResManager from "@max-studio/core/res/ResManager";
/**
* PetPartConfig配置管理器
*
* ⚠️ 此文件由配置表生成器自动生成,请勿手动修改!
* 如需修改请编辑对应的Excel配置文件然后重新生成
*/
@singleton({ auto: true })
export class PetPartConfigManager extends Singleton {
private configList: readonly PetPartConfigData[] = [];
private configMap = new Map<number, PetPartConfigData>();
private isLoaded = false;
protected async onInit(): Promise<void> {
await this.loadConfig();
}
private async loadConfig(): Promise<void> {
try {
const { err, asset } = await ResManager.getInstance().loadAsset<JsonAsset>({
path: "generated/data/PetPartConfig",
type: JsonAsset,
bundle: "configs",
});
this.parseConfig(<any>asset.json);
this.isLoaded = true;
} catch (err) {
LogUtils.error("PetPartConfigManager", "加载 PetPartConfig 配置失败:", err);
}
}
private parseConfig(data: any[]): void {
this.configList = Object.freeze(
data.map((item) => {
const config = parsePetPartConfigData(item);
const frozenConfig = ConfigParseUtils.deepFreeze(config);
return ConfigParseUtils.createReadonlyProxy(frozenConfig, "PetPartConfigData配置");
}),
);
this.configMap.clear();
for (const config of this.configList) {
this.configMap.set((config as any).id, config);
}
ConfigParseUtils.deepFreeze(this.configMap);
}
public getConfig(id: number): PetPartConfigData | null {
if (!this.isLoaded) {
LogUtils.warn("PetPartConfigManager", "PetPartConfig 配置尚未加载完成,请等待加载完成");
return null;
}
return this.configMap.get(id) || null;
}
public getAllConfigs(): PetPartConfigData[] {
if (!this.isLoaded) {
LogUtils.warn("PetPartConfigManager", "PetPartConfig 配置尚未加载完成,请等待加载完成");
return [];
}
return [...this.configList];
}
public isConfigLoaded(): boolean {
return this.isLoaded;
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "de6a1d46-109e-47ff-bb2a-f9b9f1241e30",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,11 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "b1244b32-aba4-4cbf-b889-ab355071147c",
"files": [],
"subMetas": {},
"userData": {
"bundleName": "config-data"
}
}

View File

@@ -0,0 +1,272 @@
[
{
"id": "1001",
"key": "chenghuang",
"bundle": "pet-spine",
"path": "ChengHuang",
"name": "",
"color": "#00000000",
"desc": ""
},
{
"id": "1002",
"key": "dangkang",
"bundle": "pet-spine",
"path": "DangKang",
"name": "",
"color": "#00000000",
"desc": ""
},
{
"id": "1003",
"key": "shuoshu",
"bundle": "pet-spine",
"path": "ShuoShu",
"name": "",
"color": "",
"desc": ""
},
{
"id": "1004",
"key": "jiuwei",
"bundle": "pet-spine",
"path": "JiuWei",
"name": "精卫",
"color": "",
"desc": ""
},
{
"id": "1005",
"key": "qiongqi",
"bundle": "pet-spine",
"path": "QiongQi",
"name": "穷奇",
"color": "",
"desc": ""
},
{
"id": "1006",
"key": "tiangou",
"bundle": "pet-spine",
"path": "TianGou",
"name": "",
"color": "",
"desc": ""
},
{
"id": "1007",
"key": "xiangliu",
"bundle": "pet-spine",
"path": "XiangLiu",
"name": "",
"color": "",
"desc": ""
},
{
"id": "1008",
"key": "lili",
"bundle": "pet-spine",
"path": "LiLi",
"name": "",
"color": "",
"desc": ""
},
{
"id": "1009",
"key": "yugong",
"bundle": "pet-spine",
"path": "YuGong",
"name": "",
"color": "",
"desc": ""
},
{
"id": "1010",
"key": "yutu",
"bundle": "pet-spine",
"path": "YuTu",
"name": "",
"color": "",
"desc": ""
},
{
"id": "1011",
"key": "zhurong",
"bundle": "pet-spine",
"path": "ZhuRong",
"name": "",
"color": "",
"desc": ""
},
{
"id": "1012",
"key": "changyou",
"bundle": "pet-spine",
"path": "Changyou",
"name": "",
"color": "",
"desc": ""
},
{
"id": "1013",
"key": "dijiang",
"bundle": "pet-spine",
"path": "Dijiang",
"name": "",
"color": "",
"desc": ""
},
{
"id": "1014",
"key": "jili",
"bundle": "pet-spine",
"path": "Jili",
"name": "",
"color": "",
"desc": ""
},
{
"id": "1015",
"key": "shusi",
"bundle": "pet-spine",
"path": "Shusi",
"name": "",
"color": "",
"desc": ""
},
{
"id": "1016",
"key": "wanv",
"bundle": "pet-spine",
"path": "Wanv",
"name": "",
"color": "",
"desc": ""
},
{
"id": "1017",
"key": "xuangui",
"bundle": "pet-spine",
"path": "Xuangui",
"name": "",
"color": "",
"desc": ""
},
{
"id": "1018",
"key": "yingyu",
"bundle": "pet-spine",
"path": "Yingyu",
"name": "",
"color": "",
"desc": ""
},
{
"id": "1019",
"key": "yunque",
"bundle": "pet-spine",
"path": "Yunque",
"name": "",
"color": "",
"desc": ""
},
{
"id": "1020",
"key": "pangding",
"bundle": "pet-spine",
"path": "PangDing",
"name": "",
"color": "",
"desc": ""
},
{
"id": "1021",
"key": "shanyuan",
"bundle": "pet-spine",
"path": "ShanYuan",
"name": "",
"color": "",
"desc": ""
},
{
"id": "1022",
"key": "zhuyin",
"bundle": "pet-spine",
"path": "ZhuYin",
"name": "",
"color": "",
"desc": ""
},
{
"id": "1023",
"key": "yingwu",
"bundle": "pet-spine",
"path": "YingWu",
"name": "",
"color": "",
"desc": ""
},
{
"id": "1024",
"key": "linghu",
"bundle": "pet-spine",
"path": "LingHu",
"name": "",
"color": "",
"desc": ""
},
{
"id": "1025",
"key": "bailuwang",
"bundle": "pet-spine",
"path": "BaiLuWang",
"name": "",
"color": "",
"desc": ""
},
{
"id": "1026",
"key": "xuanwu",
"bundle": "pet-spine",
"path": "XuanWu",
"name": "",
"color": "",
"desc": ""
},
{
"id": "1027",
"key": "fengyou",
"bundle": "pet-spine",
"path": "FengYou",
"name": "",
"color": "",
"desc": ""
},
{
"id": "1028",
"key": "nianshou",
"bundle": "pet-spine",
"path": "NianShou",
"name": "",
"color": "",
"desc": ""
},
{
"id": "1029",
"key": "fenghuang",
"bundle": "pet-spine",
"path": "FengHuang",
"name": "",
"color": "",
"desc": ""
},
{
"id": "1030",
"key": "touzishe",
"bundle": "pet-spine",
"path": "TouZiShe",
"name": "",
"color": "",
"desc": ""
}
]

View File

@@ -0,0 +1,11 @@
{
"ver": "2.0.1",
"importer": "json",
"imported": true,
"uuid": "8a6207a1-9fdc-4802-8675-7024480c1f31",
"files": [
".json"
],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,962 @@
[
{
"id": 20001,
"name": "舞狮套装",
"sourceName": "",
"type": 0,
"sourceType": 1,
"quality": 3
},
{
"id": 20002,
"name": "可爱熊套装",
"sourceName": "",
"type": 0,
"sourceType": 1,
"quality": 2
},
{
"id": 20003,
"name": "格格套装",
"sourceName": "",
"type": 0,
"sourceType": 1,
"quality": 3
},
{
"id": 20004,
"name": "关二爷套装",
"sourceName": "",
"type": 0,
"sourceType": 1,
"quality": 4
},
{
"id": 20005,
"name": "当康-鼻子",
"sourceName": "dk_bizi",
"type": 3,
"sourceType": 1,
"quality": 1
},
{
"id": 20006,
"name": "狸力-鼻子",
"sourceName": "yz_bz",
"type": 3,
"sourceType": 1,
"quality": 1
},
{
"id": 20007,
"name": "吉利-喙",
"sourceName": "jili_hui",
"type": 3,
"sourceType": 1,
"quality": 1
},
{
"id": 20008,
"name": "云雀-喙",
"sourceName": "yunque_hui",
"type": 3,
"sourceType": 1,
"quality": 1
},
{
"id": 20009,
"name": "鹦鹉-喙",
"sourceName": "yw_hui",
"type": 3,
"sourceType": 1,
"quality": 1
},
{
"id": 20010,
"name": "凤凰-喙",
"sourceName": "fh_hui",
"type": 3,
"sourceType": 1,
"quality": 1
},
{
"id": 20011,
"name": "舞狮玲珑球",
"sourceName": "bag_20501",
"type": 1,
"sourceType": 1,
"quality": 3
},
{
"id": 20012,
"name": "舞狮帽",
"sourceName": "hat_20502",
"type": 2,
"sourceType": 4,
"quality": 3
},
{
"id": 20013,
"name": "无",
"sourceName": "eye_23001",
"type": 3,
"sourceType": 1,
"quality": 3
},
{
"id": 20014,
"name": "舞狮领带",
"sourceName": "tie_20504",
"type": 4,
"sourceType": 1,
"quality": 3
},
{
"id": 20015,
"name": "可爱熊挎包",
"sourceName": "bag_20506",
"type": 1,
"sourceType": 2,
"quality": 2
},
{
"id": 20016,
"name": "可爱熊头饰",
"sourceName": "hat_20507",
"type": 2,
"sourceType": 1,
"quality": 2
},
{
"id": 20017,
"name": "可爱熊面饰",
"sourceName": "eye_20508",
"type": 3,
"sourceType": 1,
"quality": 2
},
{
"id": 20018,
"name": "可爱熊围兜",
"sourceName": "tie_20509",
"type": 4,
"sourceType": 1,
"quality": 2
},
{
"id": 20019,
"name": "关公盾牌",
"sourceName": "bag_20511",
"type": 1,
"sourceType": 3,
"quality": 4
},
{
"id": 20020,
"name": "关公帽",
"sourceName": "hat_20512",
"type": 2,
"sourceType": 3,
"quality": 4
},
{
"id": 20021,
"name": "关公眉毛",
"sourceName": "eye_20513",
"type": 3,
"sourceType": 3,
"quality": 4
},
{
"id": 20022,
"name": "关公胡须",
"sourceName": "tie_20514",
"type": 4,
"sourceType": 3,
"quality": 4
},
{
"id": 20023,
"name": "青龙刀",
"sourceName": "yanyuedao",
"type": 5,
"sourceType": 3,
"quality": 4
},
{
"id": 20024,
"name": "格格扇子",
"sourceName": "bag_20516",
"type": 1,
"sourceType": 1,
"quality": 3
},
{
"id": 20025,
"name": "格格帽",
"sourceName": "hat_20517",
"type": 2,
"sourceType": 4,
"quality": 3
},
{
"id": 20026,
"name": "格格眼饰-备用",
"sourceName": "",
"type": 3,
"sourceType": 1,
"quality": 3
},
{
"id": 20027,
"name": "格格围巾",
"sourceName": "tie_20519",
"type": 4,
"sourceType": 1,
"quality": 3
},
{
"id": 20028,
"name": "格格炫光-备用",
"sourceName": "",
"type": 5,
"sourceType": 1,
"quality": 3
},
{
"id": 20029,
"name": "青蛇法宝",
"sourceName": "bag_20521",
"type": 1,
"sourceType": 3,
"quality": 4
},
{
"id": 20030,
"name": "青蛇发冠",
"sourceName": "hat_20522",
"type": 2,
"sourceType": 5,
"quality": 4
},
{
"id": 20031,
"name": "青蛇面饰",
"sourceName": "eye_20523",
"type": 3,
"sourceType": 3,
"quality": 4
},
{
"id": 20032,
"name": "青蛇领饰",
"sourceName": "tie_20524",
"type": 4,
"sourceType": 1,
"quality": 4
},
{
"id": 20033,
"name": "青蛇莲花",
"sourceName": "wing_20525",
"type": 5,
"sourceType": 3,
"quality": 4
},
{
"id": 20034,
"name": "白蛇法宝",
"sourceName": "bag_20526",
"type": 1,
"sourceType": 3,
"quality": 4
},
{
"id": 20035,
"name": "白蛇发冠",
"sourceName": "hat_20527",
"type": 2,
"sourceType": 5,
"quality": 4
},
{
"id": 20036,
"name": "白蛇面饰",
"sourceName": "eye_20528",
"type": 3,
"sourceType": 3,
"quality": 4
},
{
"id": 20037,
"name": "白蛇领饰",
"sourceName": "tie_20529",
"type": 4,
"sourceType": 3,
"quality": 4
},
{
"id": 20038,
"name": "白蛇莲花",
"sourceName": "wing_20530",
"type": 5,
"sourceType": 0,
"quality": 4
},
{
"id": 20039,
"name": "少女战服",
"sourceName": "bag_20531",
"type": 1,
"sourceType": 3,
"quality": 4
},
{
"id": 20040,
"name": "少女头饰",
"sourceName": "hat_20532",
"type": 2,
"sourceType": 5,
"quality": 4
},
{
"id": 20041,
"name": "小樱面饰",
"sourceName": "eye_20533",
"type": 3,
"sourceType": 3,
"quality": 4
},
{
"id": 20042,
"name": "战服领带",
"sourceName": "tie_20534",
"type": 4,
"sourceType": 1,
"quality": 4
},
{
"id": 20043,
"name": "小樱仙女棒",
"sourceName": "wing_20535",
"type": 5,
"sourceType": 3,
"quality": 4
},
{
"id": 20044,
"name": "冰雪长发",
"sourceName": "hat_20537",
"type": 2,
"sourceType": 5,
"quality": 2
},
{
"id": 20045,
"name": "小雪人",
"sourceName": "wing_20540",
"type": 5,
"sourceType": 3,
"quality": 2
},
{
"id": 20046,
"name": "鲜花篮子",
"sourceName": "bag_20541",
"type": 1,
"sourceType": 3,
"quality": 3
},
{
"id": 20047,
"name": "公主发饰",
"sourceName": "hat_20542",
"type": 2,
"sourceType": 5,
"quality": 3
},
{
"id": 20048,
"name": "公主服装",
"sourceName": "tie_24017",
"type": 4,
"sourceType": 2,
"quality": 3
},
{
"id": 20049,
"name": "苹果精灵",
"sourceName": "wing_20545",
"type": 5,
"sourceType": 3,
"quality": 3
},
{
"id": 20050,
"name": "宝藏地图",
"sourceName": "bag_20546",
"type": 1,
"sourceType": 3,
"quality": 3
},
{
"id": 20051,
"name": "航海帽",
"sourceName": "hat_20547",
"type": 2,
"sourceType": 5,
"quality": 3
},
{
"id": 20052,
"name": "海盗眼罩",
"sourceName": "eye_23011",
"type": 3,
"sourceType": 1,
"quality": 3
},
{
"id": 20053,
"name": "船长胡须",
"sourceName": "tie_24015",
"type": 4,
"sourceType": 2,
"quality": 3
},
{
"id": 20054,
"name": "航海宝藏",
"sourceName": "wing_20550",
"type": 5,
"sourceType": 3,
"quality": 3
},
{
"id": 20055,
"name": "时光飞毯",
"sourceName": "wing_20555",
"type": 5,
"sourceType": 3,
"quality": 3
},
{
"id": 20056,
"name": "魔法手杖",
"sourceName": "wing_20560",
"type": 5,
"sourceType": 3,
"quality": 3
},
{
"id": 20057,
"name": "许仙油伞",
"sourceName": "bag_20561",
"type": 1,
"sourceType": 3,
"quality": 4
},
{
"id": 20058,
"name": "许仙帽",
"sourceName": "hat_22012",
"type": 2,
"sourceType": 1,
"quality": 4
},
{
"id": 20059,
"name": "许仙长袍",
"sourceName": "tie_24016",
"type": 4,
"sourceType": 2,
"quality": 4
},
{
"id": 20060,
"name": "许仙背篓",
"sourceName": "wing_20565",
"type": 5,
"sourceType": 3,
"quality": 4
},
{
"id": 20061,
"name": "超人披风",
"sourceName": "bag_20571",
"type": 1,
"sourceType": 3,
"quality": 4
},
{
"id": 20062,
"name": "超人秀发",
"sourceName": "hat_20572",
"type": 2,
"sourceType": 3,
"quality": 4
},
{
"id": 20063,
"name": "记者眼镜",
"sourceName": "eye_23013",
"type": 3,
"sourceType": 1,
"quality": 4
},
{
"id": 20064,
"name": "超人战衣",
"sourceName": "tie_24019",
"type": 4,
"sourceType": 2,
"quality": 4
},
{
"id": 20065,
"name": "神奇战犬",
"sourceName": "wing_20575",
"type": 5,
"sourceType": 3,
"quality": 4
},
{
"id": 20066,
"name": "黑翼披风",
"sourceName": "bag_20551",
"type": 1,
"sourceType": 3,
"quality": 3
},
{
"id": 20067,
"name": "夜行面具",
"sourceName": "eye_23012",
"type": 3,
"sourceType": 1,
"quality": 3
},
{
"id": 20068,
"name": "夜行铠甲",
"sourceName": "tie_24018",
"type": 4,
"sourceType": 2,
"quality": 3
},
{
"id": 20069,
"name": "夜行战车",
"sourceName": "wing_20580",
"type": 5,
"sourceType": 3,
"quality": 3
},
{
"id": 20070,
"name": "太空能量泵",
"sourceName": "bag_21015",
"type": 1,
"sourceType": 2,
"quality": 3
},
{
"id": 20071,
"name": "太空供氧面罩",
"sourceName": "hat_22013",
"type": 2,
"sourceType": 4,
"quality": 3
},
{
"id": 20072,
"name": "太空服",
"sourceName": "tie_24021",
"type": 4,
"sourceType": 2,
"quality": 3
},
{
"id": 20073,
"name": "飞行机甲",
"sourceName": "wing_20585",
"type": 5,
"sourceType": 3,
"quality": 3
},
{
"id": 20074,
"name": "公文背包",
"sourceName": "bag_21001",
"type": 1,
"sourceType": 2,
"quality": 1
},
{
"id": 20075,
"name": "旅行背包(蓝)",
"sourceName": "bag_21001",
"type": 1,
"sourceType": 2,
"quality": 1
},
{
"id": 20076,
"name": "旅行背包(动画)",
"sourceName": "bag_21001",
"type": 1,
"sourceType": 2,
"quality": 1
},
{
"id": 20077,
"name": "睡眠抱枕",
"sourceName": "bag_21004",
"type": 1,
"sourceType": 2,
"quality": 1
},
{
"id": 20078,
"name": "手枪配饰",
"sourceName": "bag_21005",
"type": 1,
"sourceType": 2,
"quality": 1
},
{
"id": 20079,
"name": "游侠钱袋",
"sourceName": "bag_21006",
"type": 1,
"sourceType": 2,
"quality": 2
},
{
"id": 20080,
"name": "熊猫挎包",
"sourceName": "bag_21007",
"type": 1,
"sourceType": 2,
"quality": 1
},
{
"id": 20081,
"name": "魔法书",
"sourceName": "bag_21009",
"type": 1,
"sourceType": 2,
"quality": 3
},
{
"id": 20082,
"name": "兔警官挎包",
"sourceName": "bag_21010",
"type": 1,
"sourceType": 2,
"quality": 2
},
{
"id": 20083,
"name": "铜锣烧",
"sourceName": "bag_21011",
"type": 1,
"sourceType": 2,
"quality": 3
},
{
"id": 20084,
"name": "纯金腰带",
"sourceName": "bag_21014",
"type": 1,
"sourceType": 2,
"quality": 3
},
{
"id": 20085,
"name": "魔术帽",
"sourceName": "hat_22001",
"type": 2,
"sourceType": 1,
"quality": 3
},
{
"id": 20086,
"name": "魔术帽(变色)",
"sourceName": "hat_22001",
"type": 2,
"sourceType": 2,
"quality": 3
},
{
"id": 20087,
"name": "魔术帽(动画)",
"sourceName": "hat_22001",
"type": 2,
"sourceType": 2,
"quality": 3
},
{
"id": 20088,
"name": "xx帽-备用",
"sourceName": "hat_22001",
"type": 2,
"sourceType": 2,
"quality": 1
},
{
"id": 20089,
"name": "制服帽",
"sourceName": "hat_22006",
"type": 2,
"sourceType": 1,
"quality": 1
},
{
"id": 20090,
"name": "休闲帽",
"sourceName": "hat_22003",
"type": 2,
"sourceType": 1,
"quality": 3
},
{
"id": 20091,
"name": "牛仔帽",
"sourceName": "hat_22007",
"type": 2,
"sourceType": 1,
"quality": 1
},
{
"id": 20092,
"name": "兔警官帽",
"sourceName": "hat_22008",
"type": 2,
"sourceType": 1,
"quality": 2
},
{
"id": 20093,
"name": "蓝猫飞行帽",
"sourceName": "hat_22009",
"type": 2,
"sourceType": 4,
"quality": 3
},
{
"id": 20094,
"name": "太阳镜(粉)",
"sourceName": "eye_23001",
"type": 3,
"sourceType": 1,
"quality": 3
},
{
"id": 20095,
"name": "简框眼镜",
"sourceName": "eye_23002",
"type": 3,
"sourceType": 1,
"quality": 1
},
{
"id": 20096,
"name": "墨镜",
"sourceName": "eye_23003",
"type": 3,
"sourceType": 1,
"quality": 1
},
{
"id": 20097,
"name": "圆框饰品",
"sourceName": "eye_23004",
"type": 3,
"sourceType": 1,
"quality": 1
},
{
"id": 20098,
"name": "爱心镜框",
"sourceName": "eye_23005",
"type": 3,
"sourceType": 1,
"quality": 2
},
{
"id": 20099,
"name": "竹子墨镜",
"sourceName": "eye_23006",
"type": 3,
"sourceType": 1,
"quality": 1
},
{
"id": 20100,
"name": "睡眠面罩",
"sourceName": "eye_23007",
"type": 3,
"sourceType": 1,
"quality": 1
},
{
"id": 20101,
"name": "搞怪眼镜",
"sourceName": "eye_23008",
"type": 3,
"sourceType": 1,
"quality": 1
},
{
"id": 20102,
"name": "游侠眼饰",
"sourceName": "eye_23009",
"type": 3,
"sourceType": 1,
"quality": 2
},
{
"id": 20103,
"name": "英伦圆框",
"sourceName": "eye_23010",
"type": 3,
"sourceType": 1,
"quality": 3
},
{
"id": 20104,
"name": "墨镜2",
"sourceName": "eye_23003",
"type": 3,
"sourceType": 1,
"quality": 1
},
{
"id": 20105,
"name": "粉色眼镜2",
"sourceName": "eye_23001",
"type": 3,
"sourceType": 1,
"quality": 3
},
{
"id": 20106,
"name": "粉蝴蝶结",
"sourceName": "tie_24001",
"type": 4,
"sourceType": 1,
"quality": 2
},
{
"id": 20107,
"name": "紫蝴蝶结",
"sourceName": "tie_24002",
"type": 4,
"sourceType": 1,
"quality": 2
},
{
"id": 20108,
"name": "制服领结",
"sourceName": "tie_24004",
"type": 4,
"sourceType": 1,
"quality": 1
},
{
"id": 20109,
"name": "熊猫领结",
"sourceName": "tie_24003",
"type": 4,
"sourceType": 1,
"quality": 1
},
{
"id": 20110,
"name": "制服领带",
"sourceName": "tie_24005",
"type": 4,
"sourceType": 1,
"quality": 1
},
{
"id": 20111,
"name": "金项链",
"sourceName": "tie_24006",
"type": 4,
"sourceType": 1,
"quality": 3
},
{
"id": 20112,
"name": "牛仔围巾",
"sourceName": "tie_24007",
"type": 4,
"sourceType": 1,
"quality": 1
},
{
"id": 20113,
"name": "魔法学院服",
"sourceName": "tie_24011",
"type": 4,
"sourceType": 1,
"quality": 3
},
{
"id": 20114,
"name": "兔警官服",
"sourceName": "tie_24012",
"type": 4,
"sourceType": 1,
"quality": 2
},
{
"id": 20115,
"name": "铃铛",
"sourceName": "tie_24013",
"type": 4,
"sourceType": 1,
"quality": 3
},
{
"id": 20116,
"name": "冰雪领带",
"sourceName": "tie_24014",
"type": 4,
"sourceType": 1,
"quality": 2
},
{
"id": 20117,
"name": "金属勋章",
"sourceName": "tie_24020",
"type": 4,
"sourceType": 1,
"quality": 3
},
{
"id": 20118,
"name": "闪闪糖葫芦",
"sourceName": "tanghulu",
"type": 5,
"sourceType": 0,
"quality": 2
},
{
"id": 20119,
"name": "青龙刀",
"sourceName": "yanyuedao",
"type": 5,
"sourceType": 3,
"quality": 4
},
{
"id": 20120,
"name": "爱心信件",
"sourceName": "qingshu",
"type": 5,
"sourceType": 0,
"quality": 3
}
]

View File

@@ -0,0 +1,11 @@
{
"ver": "2.0.1",
"importer": "json",
"imported": true,
"uuid": "2dfc8295-5211-42cf-85cb-64addd429a7e",
"files": [
".json"
],
"subMetas": {},
"userData": {}
}

11
assets/games.meta Normal file
View File

@@ -0,0 +1,11 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "b3e5cd5c-89d0-4df6-a9f7-9d33026a7c02",
"files": [],
"subMetas": {},
"userData": {
"isBundle": true
}
}

9
assets/games/atlas.meta Normal file
View File

@@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "36f0951d-0b77-4728-bebc-c8192f0c8185",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "1f979c16-7cc3-4786-b607-b82b0591dcc9",
"files": [],
"subMetas": {},
"userData": {}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@@ -0,0 +1,134 @@
{
"ver": "1.0.27",
"importer": "image",
"imported": true,
"uuid": "a562f181-3b53-4777-802d-5dce3b1cac21",
"files": [
".json",
".png"
],
"subMetas": {
"6c48a": {
"importer": "texture",
"uuid": "a562f181-3b53-4777-802d-5dce3b1cac21@6c48a",
"displayName": "Icon_Reward_Pass_ax",
"id": "6c48a",
"name": "texture",
"userData": {
"wrapModeS": "clamp-to-edge",
"wrapModeT": "clamp-to-edge",
"minfilter": "linear",
"magfilter": "linear",
"mipfilter": "none",
"anisotropy": 0,
"isUuid": true,
"imageUuidOrDatabaseUri": "a562f181-3b53-4777-802d-5dce3b1cac21",
"visible": false
},
"ver": "1.0.22",
"imported": true,
"files": [
".json"
],
"subMetas": {}
},
"f9941": {
"importer": "sprite-frame",
"uuid": "a562f181-3b53-4777-802d-5dce3b1cac21@f9941",
"displayName": "Icon_Reward_Pass_ax",
"id": "f9941",
"name": "spriteFrame",
"userData": {
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 216,
"height": 211,
"rawWidth": 216,
"rawHeight": 211,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"packable": true,
"pixelsToUnit": 100,
"pivotX": 0.5,
"pivotY": 0.5,
"meshType": 0,
"vertices": {
"rawPosition": [
-108,
-105.5,
0,
108,
-105.5,
0,
-108,
105.5,
0,
108,
105.5,
0
],
"indexes": [
0,
1,
2,
2,
1,
3
],
"uv": [
0,
211,
216,
211,
0,
0,
216,
0
],
"nuv": [
0,
0,
1,
0,
0,
1,
1,
1
],
"minPos": [
-108,
-105.5,
0
],
"maxPos": [
108,
105.5,
0
]
},
"isUuid": true,
"imageUuidOrDatabaseUri": "a562f181-3b53-4777-802d-5dce3b1cac21@6c48a",
"atlasUuid": "",
"trimType": "auto"
},
"ver": "1.0.12",
"imported": true,
"files": [
".json"
],
"subMetas": {}
}
},
"userData": {
"type": "sprite-frame",
"hasAlpha": true,
"fixAlphaTransparencyArtifacts": false,
"redirect": "a562f181-3b53-4777-802d-5dce3b1cac21@6c48a"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -0,0 +1,134 @@
{
"ver": "1.0.27",
"importer": "image",
"imported": true,
"uuid": "fb18880a-860d-4b65-a202-b5f628d89b13",
"files": [
".json",
".png"
],
"subMetas": {
"6c48a": {
"importer": "texture",
"uuid": "fb18880a-860d-4b65-a202-b5f628d89b13@6c48a",
"displayName": "Icon_Reward_Pass_book",
"id": "6c48a",
"name": "texture",
"userData": {
"wrapModeS": "clamp-to-edge",
"wrapModeT": "clamp-to-edge",
"minfilter": "linear",
"magfilter": "linear",
"mipfilter": "none",
"anisotropy": 0,
"isUuid": true,
"imageUuidOrDatabaseUri": "fb18880a-860d-4b65-a202-b5f628d89b13",
"visible": false
},
"ver": "1.0.22",
"imported": true,
"files": [
".json"
],
"subMetas": {}
},
"f9941": {
"importer": "sprite-frame",
"uuid": "fb18880a-860d-4b65-a202-b5f628d89b13@f9941",
"displayName": "Icon_Reward_Pass_book",
"id": "f9941",
"name": "spriteFrame",
"userData": {
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 215,
"height": 209,
"rawWidth": 215,
"rawHeight": 209,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"packable": true,
"pixelsToUnit": 100,
"pivotX": 0.5,
"pivotY": 0.5,
"meshType": 0,
"vertices": {
"rawPosition": [
-107.5,
-104.5,
0,
107.5,
-104.5,
0,
-107.5,
104.5,
0,
107.5,
104.5,
0
],
"indexes": [
0,
1,
2,
2,
1,
3
],
"uv": [
0,
209,
215,
209,
0,
0,
215,
0
],
"nuv": [
0,
0,
1,
0,
0,
1,
1,
1
],
"minPos": [
-107.5,
-104.5,
0
],
"maxPos": [
107.5,
104.5,
0
]
},
"isUuid": true,
"imageUuidOrDatabaseUri": "fb18880a-860d-4b65-a202-b5f628d89b13@6c48a",
"atlasUuid": "",
"trimType": "auto"
},
"ver": "1.0.12",
"imported": true,
"files": [
".json"
],
"subMetas": {}
}
},
"userData": {
"type": "sprite-frame",
"hasAlpha": true,
"fixAlphaTransparencyArtifacts": false,
"redirect": "fb18880a-860d-4b65-a202-b5f628d89b13@6c48a"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View File

@@ -0,0 +1,134 @@
{
"ver": "1.0.27",
"importer": "image",
"imported": true,
"uuid": "ccee92f9-8e71-4d88-b335-48eb76c53172",
"files": [
".json",
".png"
],
"subMetas": {
"6c48a": {
"importer": "texture",
"uuid": "ccee92f9-8e71-4d88-b335-48eb76c53172@6c48a",
"displayName": "Icon_Reward_Pass_clover",
"id": "6c48a",
"name": "texture",
"userData": {
"wrapModeS": "clamp-to-edge",
"wrapModeT": "clamp-to-edge",
"minfilter": "linear",
"magfilter": "linear",
"mipfilter": "none",
"anisotropy": 0,
"isUuid": true,
"imageUuidOrDatabaseUri": "ccee92f9-8e71-4d88-b335-48eb76c53172",
"visible": false
},
"ver": "1.0.22",
"imported": true,
"files": [
".json"
],
"subMetas": {}
},
"f9941": {
"importer": "sprite-frame",
"uuid": "ccee92f9-8e71-4d88-b335-48eb76c53172@f9941",
"displayName": "Icon_Reward_Pass_clover",
"id": "f9941",
"name": "spriteFrame",
"userData": {
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 191,
"height": 210,
"rawWidth": 191,
"rawHeight": 210,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"packable": true,
"pixelsToUnit": 100,
"pivotX": 0.5,
"pivotY": 0.5,
"meshType": 0,
"vertices": {
"rawPosition": [
-95.5,
-105,
0,
95.5,
-105,
0,
-95.5,
105,
0,
95.5,
105,
0
],
"indexes": [
0,
1,
2,
2,
1,
3
],
"uv": [
0,
210,
191,
210,
0,
0,
191,
0
],
"nuv": [
0,
0,
1,
0,
0,
1,
1,
1
],
"minPos": [
-95.5,
-105,
0
],
"maxPos": [
95.5,
105,
0
]
},
"isUuid": true,
"imageUuidOrDatabaseUri": "ccee92f9-8e71-4d88-b335-48eb76c53172@6c48a",
"atlasUuid": "",
"trimType": "auto"
},
"ver": "1.0.12",
"imported": true,
"files": [
".json"
],
"subMetas": {}
}
},
"userData": {
"type": "sprite-frame",
"hasAlpha": true,
"fixAlphaTransparencyArtifacts": false,
"redirect": "ccee92f9-8e71-4d88-b335-48eb76c53172@6c48a"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View File

@@ -0,0 +1,134 @@
{
"ver": "1.0.27",
"importer": "image",
"imported": true,
"uuid": "7691c8f3-3ca8-4a3b-882a-dfc7b2402ef7",
"files": [
".json",
".png"
],
"subMetas": {
"6c48a": {
"importer": "texture",
"uuid": "7691c8f3-3ca8-4a3b-882a-dfc7b2402ef7@6c48a",
"displayName": "Icon_Reward_Pass_gem",
"id": "6c48a",
"name": "texture",
"userData": {
"wrapModeS": "clamp-to-edge",
"wrapModeT": "clamp-to-edge",
"minfilter": "linear",
"magfilter": "linear",
"mipfilter": "none",
"anisotropy": 0,
"isUuid": true,
"imageUuidOrDatabaseUri": "7691c8f3-3ca8-4a3b-882a-dfc7b2402ef7",
"visible": false
},
"ver": "1.0.22",
"imported": true,
"files": [
".json"
],
"subMetas": {}
},
"f9941": {
"importer": "sprite-frame",
"uuid": "7691c8f3-3ca8-4a3b-882a-dfc7b2402ef7@f9941",
"displayName": "Icon_Reward_Pass_gem",
"id": "f9941",
"name": "spriteFrame",
"userData": {
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 247,
"height": 196,
"rawWidth": 247,
"rawHeight": 196,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"packable": true,
"pixelsToUnit": 100,
"pivotX": 0.5,
"pivotY": 0.5,
"meshType": 0,
"vertices": {
"rawPosition": [
-123.5,
-98,
0,
123.5,
-98,
0,
-123.5,
98,
0,
123.5,
98,
0
],
"indexes": [
0,
1,
2,
2,
1,
3
],
"uv": [
0,
196,
247,
196,
0,
0,
247,
0
],
"nuv": [
0,
0,
1,
0,
0,
1,
1,
1
],
"minPos": [
-123.5,
-98,
0
],
"maxPos": [
123.5,
98,
0
]
},
"isUuid": true,
"imageUuidOrDatabaseUri": "7691c8f3-3ca8-4a3b-882a-dfc7b2402ef7@6c48a",
"atlasUuid": "",
"trimType": "auto"
},
"ver": "1.0.12",
"imported": true,
"files": [
".json"
],
"subMetas": {}
}
},
"userData": {
"type": "sprite-frame",
"hasAlpha": true,
"fixAlphaTransparencyArtifacts": false,
"redirect": "7691c8f3-3ca8-4a3b-882a-dfc7b2402ef7@6c48a"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@@ -0,0 +1,134 @@
{
"ver": "1.0.27",
"importer": "image",
"imported": true,
"uuid": "7c4eee6e-2941-493b-a0ee-772463486f39",
"files": [
".json",
".png"
],
"subMetas": {
"6c48a": {
"importer": "texture",
"uuid": "7c4eee6e-2941-493b-a0ee-772463486f39@6c48a",
"displayName": "Icon_Reward_Pass_glove",
"id": "6c48a",
"name": "texture",
"userData": {
"wrapModeS": "clamp-to-edge",
"wrapModeT": "clamp-to-edge",
"minfilter": "linear",
"magfilter": "linear",
"mipfilter": "none",
"anisotropy": 0,
"isUuid": true,
"imageUuidOrDatabaseUri": "7c4eee6e-2941-493b-a0ee-772463486f39",
"visible": false
},
"ver": "1.0.22",
"imported": true,
"files": [
".json"
],
"subMetas": {}
},
"f9941": {
"importer": "sprite-frame",
"uuid": "7c4eee6e-2941-493b-a0ee-772463486f39@f9941",
"displayName": "Icon_Reward_Pass_glove",
"id": "f9941",
"name": "spriteFrame",
"userData": {
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 196,
"height": 195,
"rawWidth": 196,
"rawHeight": 195,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"packable": true,
"pixelsToUnit": 100,
"pivotX": 0.5,
"pivotY": 0.5,
"meshType": 0,
"vertices": {
"rawPosition": [
-98,
-97.5,
0,
98,
-97.5,
0,
-98,
97.5,
0,
98,
97.5,
0
],
"indexes": [
0,
1,
2,
2,
1,
3
],
"uv": [
0,
195,
196,
195,
0,
0,
196,
0
],
"nuv": [
0,
0,
1,
0,
0,
1,
1,
1
],
"minPos": [
-98,
-97.5,
0
],
"maxPos": [
98,
97.5,
0
]
},
"isUuid": true,
"imageUuidOrDatabaseUri": "7c4eee6e-2941-493b-a0ee-772463486f39@6c48a",
"atlasUuid": "",
"trimType": "auto"
},
"ver": "1.0.12",
"imported": true,
"files": [
".json"
],
"subMetas": {}
}
},
"userData": {
"type": "sprite-frame",
"hasAlpha": true,
"fixAlphaTransparencyArtifacts": false,
"redirect": "7c4eee6e-2941-493b-a0ee-772463486f39@6c48a"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

View File

@@ -0,0 +1,134 @@
{
"ver": "1.0.27",
"importer": "image",
"imported": true,
"uuid": "b8625559-dd62-4c66-96aa-abcc7a69f567",
"files": [
".json",
".png"
],
"subMetas": {
"6c48a": {
"importer": "texture",
"uuid": "b8625559-dd62-4c66-96aa-abcc7a69f567@6c48a",
"displayName": "Icon_Reward_Pass_gold",
"id": "6c48a",
"name": "texture",
"userData": {
"wrapModeS": "clamp-to-edge",
"wrapModeT": "clamp-to-edge",
"minfilter": "linear",
"magfilter": "linear",
"mipfilter": "none",
"anisotropy": 0,
"isUuid": true,
"imageUuidOrDatabaseUri": "b8625559-dd62-4c66-96aa-abcc7a69f567",
"visible": false
},
"ver": "1.0.22",
"imported": true,
"files": [
".json"
],
"subMetas": {}
},
"f9941": {
"importer": "sprite-frame",
"uuid": "b8625559-dd62-4c66-96aa-abcc7a69f567@f9941",
"displayName": "Icon_Reward_Pass_gold",
"id": "f9941",
"name": "spriteFrame",
"userData": {
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 256,
"height": 189,
"rawWidth": 256,
"rawHeight": 189,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"packable": true,
"pixelsToUnit": 100,
"pivotX": 0.5,
"pivotY": 0.5,
"meshType": 0,
"vertices": {
"rawPosition": [
-128,
-94.5,
0,
128,
-94.5,
0,
-128,
94.5,
0,
128,
94.5,
0
],
"indexes": [
0,
1,
2,
2,
1,
3
],
"uv": [
0,
189,
256,
189,
0,
0,
256,
0
],
"nuv": [
0,
0,
1,
0,
0,
1,
1,
1
],
"minPos": [
-128,
-94.5,
0
],
"maxPos": [
128,
94.5,
0
]
},
"isUuid": true,
"imageUuidOrDatabaseUri": "b8625559-dd62-4c66-96aa-abcc7a69f567@6c48a",
"atlasUuid": "",
"trimType": "auto"
},
"ver": "1.0.12",
"imported": true,
"files": [
".json"
],
"subMetas": {}
}
},
"userData": {
"type": "sprite-frame",
"hasAlpha": true,
"fixAlphaTransparencyArtifacts": false,
"redirect": "b8625559-dd62-4c66-96aa-abcc7a69f567@6c48a"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -0,0 +1,134 @@
{
"ver": "1.0.27",
"importer": "image",
"imported": true,
"uuid": "8188705e-b03f-4224-944c-aa443ba8e198",
"files": [
".json",
".png"
],
"subMetas": {
"6c48a": {
"importer": "texture",
"uuid": "8188705e-b03f-4224-944c-aa443ba8e198@6c48a",
"displayName": "Icon_Reward_Pass_rune",
"id": "6c48a",
"name": "texture",
"userData": {
"wrapModeS": "clamp-to-edge",
"wrapModeT": "clamp-to-edge",
"minfilter": "linear",
"magfilter": "linear",
"mipfilter": "none",
"anisotropy": 0,
"isUuid": true,
"imageUuidOrDatabaseUri": "8188705e-b03f-4224-944c-aa443ba8e198",
"visible": false
},
"ver": "1.0.22",
"imported": true,
"files": [
".json"
],
"subMetas": {}
},
"f9941": {
"importer": "sprite-frame",
"uuid": "8188705e-b03f-4224-944c-aa443ba8e198@f9941",
"displayName": "Icon_Reward_Pass_rune",
"id": "f9941",
"name": "spriteFrame",
"userData": {
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 217,
"height": 213,
"rawWidth": 217,
"rawHeight": 213,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"packable": true,
"pixelsToUnit": 100,
"pivotX": 0.5,
"pivotY": 0.5,
"meshType": 0,
"vertices": {
"rawPosition": [
-108.5,
-106.5,
0,
108.5,
-106.5,
0,
-108.5,
106.5,
0,
108.5,
106.5,
0
],
"indexes": [
0,
1,
2,
2,
1,
3
],
"uv": [
0,
213,
217,
213,
0,
0,
217,
0
],
"nuv": [
0,
0,
1,
0,
0,
1,
1,
1
],
"minPos": [
-108.5,
-106.5,
0
],
"maxPos": [
108.5,
106.5,
0
]
},
"isUuid": true,
"imageUuidOrDatabaseUri": "8188705e-b03f-4224-944c-aa443ba8e198@6c48a",
"atlasUuid": "",
"trimType": "auto"
},
"ver": "1.0.12",
"imported": true,
"files": [
".json"
],
"subMetas": {}
}
},
"userData": {
"type": "sprite-frame",
"hasAlpha": true,
"fixAlphaTransparencyArtifacts": false,
"redirect": "8188705e-b03f-4224-944c-aa443ba8e198@6c48a"
}
}

View File

@@ -0,0 +1,3 @@
{
"__type__": "cc.SpriteAtlas"
}

View File

@@ -0,0 +1,36 @@
{
"ver": "1.0.8",
"importer": "auto-atlas",
"imported": true,
"uuid": "35330028-a50f-4ff1-ba32-5a0e04e3bbf2",
"files": [
".json"
],
"subMetas": {},
"userData": {
"maxWidth": 1024,
"maxHeight": 1024,
"padding": 2,
"allowRotation": true,
"forceSquared": false,
"powerOfTwo": false,
"algorithm": "MaxRects",
"format": "png",
"quality": 80,
"contourBleed": true,
"paddingBleed": true,
"filterUnused": false,
"removeTextureInBundle": false,
"removeImageInBundle": false,
"removeSpriteAtlasInBundle": false,
"compressSettings": {},
"textureSetting": {
"wrapModeS": "repeat",
"wrapModeT": "repeat",
"minfilter": "linear",
"magfilter": "linear",
"mipfilter": "none",
"anisotropy": 0
}
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "a49f7c60-2ec3-427a-8219-ae3f0886182d",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "95d180a6-c186-4180-b0fe-29815b9b8b7c",
"files": [],
"subMetas": {},
"userData": {}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,13 @@
{
"ver": "1.1.50",
"importer": "prefab",
"imported": true,
"uuid": "60f72a13-68d6-4351-97aa-e8318e375dda",
"files": [
".json"
],
"subMetas": {},
"userData": {
"syncNodeName": "CurrencyContainer"
}
}

View File

@@ -0,0 +1,632 @@
[
{
"__type__": "cc.Prefab",
"_name": "CurrencyItem",
"_objFlags": 0,
"__editorExtras__": {},
"_native": "",
"data": {
"__id__": 1
},
"optimizationPolicy": 0,
"persistent": false
},
{
"__type__": "cc.Node",
"_name": "CurrencyItem",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": null,
"_children": [
{
"__id__": 2
},
{
"__id__": 8
},
{
"__id__": 14
}
],
"_active": true,
"_components": [
{
"__id__": 20
},
{
"__id__": 22
},
{
"__id__": 24
}
],
"_prefab": {
"__id__": 26
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_lrot": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": 0,
"w": 1
},
"_lscale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"z": 1
},
"_mobility": 0,
"_layer": 33554432,
"_euler": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_id": ""
},
{
"__type__": "cc.Node",
"_name": "AddBtn",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 1
},
"_children": [],
"_active": true,
"_components": [
{
"__id__": 3
},
{
"__id__": 5
}
],
"_prefab": {
"__id__": 7
},
"_lpos": {
"__type__": "cc.Vec3",
"x": -47.279998779296875,
"y": 0,
"z": 0
},
"_lrot": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": 0,
"w": 1
},
"_lscale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"z": 1
},
"_mobility": 0,
"_layer": 33554432,
"_euler": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_id": ""
},
{
"__type__": "cc.UITransform",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 2
},
"_enabled": true,
"__prefab": {
"__id__": 4
},
"_contentSize": {
"__type__": "cc.Size",
"width": 49,
"height": 53
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "a2GgxdOy5KS7fwb8O+MJyL"
},
{
"__type__": "cc.Sprite",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 2
},
"_enabled": true,
"__prefab": {
"__id__": 6
},
"_customMaterial": null,
"_srcBlendFactor": 2,
"_dstBlendFactor": 4,
"_color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_spriteFrame": {
"__uuid__": "8056567a-7bb5-4d3e-b5f1-df94774d273d@f9941",
"__expectedType__": "cc.SpriteFrame"
},
"_type": 0,
"_fillType": 0,
"_sizeMode": 1,
"_fillCenter": {
"__type__": "cc.Vec2",
"x": 0,
"y": 0
},
"_fillStart": 0,
"_fillRange": 0,
"_isTrimmedMode": true,
"_useGrayscale": false,
"_atlas": null,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "9dfTYmKOZASbUwU1XtzELz"
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "7epLlueXRLJJ0LsZ991hOv",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.Node",
"_name": "ValueLabel",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 1
},
"_children": [],
"_active": true,
"_components": [
{
"__id__": 9
},
{
"__id__": 11
}
],
"_prefab": {
"__id__": 13
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 10,
"y": 0,
"z": 0
},
"_lrot": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": 0,
"w": 1
},
"_lscale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"z": 1
},
"_mobility": 0,
"_layer": 33554432,
"_euler": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_id": ""
},
{
"__type__": "cc.UITransform",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 8
},
"_enabled": true,
"__prefab": {
"__id__": 10
},
"_contentSize": {
"__type__": "cc.Size",
"width": 46.55999755859375,
"height": 50.4
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "09wKAKnbBB+5lZqBGPJIvn"
},
{
"__type__": "cc.Label",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 8
},
"_enabled": true,
"__prefab": {
"__id__": 12
},
"_customMaterial": null,
"_srcBlendFactor": 2,
"_dstBlendFactor": 4,
"_color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_string": "20",
"_horizontalAlign": 1,
"_verticalAlign": 1,
"_actualFontSize": 40,
"_fontSize": 40,
"_fontFamily": "Arial",
"_lineHeight": 40,
"_overflow": 0,
"_enableWrapText": true,
"_font": {
"__uuid__": "1e4ba4a2-7090-4e7b-8479-72285e08cdeb",
"__expectedType__": "cc.TTFFont"
},
"_isSystemFontUsed": false,
"_spacingX": 0,
"_isItalic": false,
"_isBold": false,
"_isUnderline": false,
"_underlineHeight": 2,
"_cacheMode": 0,
"_enableOutline": false,
"_outlineColor": {
"__type__": "cc.Color",
"r": 0,
"g": 0,
"b": 0,
"a": 255
},
"_outlineWidth": 2,
"_enableShadow": false,
"_shadowColor": {
"__type__": "cc.Color",
"r": 0,
"g": 0,
"b": 0,
"a": 255
},
"_shadowOffset": {
"__type__": "cc.Vec2",
"x": 2,
"y": 2
},
"_shadowBlur": 2,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "44zvc167VCRKo7OrwxzXs0"
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "1djLQFnGBH/bp9kcIVVJtl",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.Node",
"_name": "Icon",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 1
},
"_children": [],
"_active": true,
"_components": [
{
"__id__": 15
},
{
"__id__": 17
}
],
"_prefab": {
"__id__": 19
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 75,
"y": 0,
"z": 0
},
"_lrot": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": 0,
"w": 1
},
"_lscale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"z": 1
},
"_mobility": 0,
"_layer": 33554432,
"_euler": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_id": ""
},
{
"__type__": "cc.UITransform",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 14
},
"_enabled": true,
"__prefab": {
"__id__": 16
},
"_contentSize": {
"__type__": "cc.Size",
"width": 68,
"height": 91
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "61L4FvqltGmJkxCozXtvXb"
},
{
"__type__": "cc.Sprite",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 14
},
"_enabled": true,
"__prefab": {
"__id__": 18
},
"_customMaterial": null,
"_srcBlendFactor": 2,
"_dstBlendFactor": 4,
"_color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_spriteFrame": {
"__uuid__": "d4766020-e395-41f8-96d1-605e73caecc8@f9941",
"__expectedType__": "cc.SpriteFrame"
},
"_type": 0,
"_fillType": 0,
"_sizeMode": 1,
"_fillCenter": {
"__type__": "cc.Vec2",
"x": 0,
"y": 0
},
"_fillStart": 0,
"_fillRange": 0,
"_isTrimmedMode": true,
"_useGrayscale": false,
"_atlas": null,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "67KlomGiZGkoxxMddz6UMZ"
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "83DdlgppxDqZ9HTy1Ld1x+",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.UITransform",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 1
},
"_enabled": true,
"__prefab": {
"__id__": 21
},
"_contentSize": {
"__type__": "cc.Size",
"width": 163.55999755859375,
"height": 64
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "3dtCsSiNNH9I7OHE0LXe8z"
},
{
"__type__": "cc.Sprite",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 1
},
"_enabled": true,
"__prefab": {
"__id__": 23
},
"_customMaterial": null,
"_srcBlendFactor": 2,
"_dstBlendFactor": 4,
"_color": {
"__type__": "cc.Color",
"r": 4,
"g": 33,
"b": 30,
"a": 255
},
"_spriteFrame": {
"__uuid__": "edc626d3-77ee-4880-b707-da79f9dd6d97@f9941",
"__expectedType__": "cc.SpriteFrame"
},
"_type": 1,
"_fillType": 0,
"_sizeMode": 0,
"_fillCenter": {
"__type__": "cc.Vec2",
"x": 0,
"y": 0
},
"_fillStart": 0,
"_fillRange": 0,
"_isTrimmedMode": true,
"_useGrayscale": false,
"_atlas": null,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "9a33L6+C1ITahVCBb3AYxx"
},
{
"__type__": "cc.Layout",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 1
},
"_enabled": true,
"__prefab": {
"__id__": 25
},
"_resizeMode": 1,
"_layoutType": 1,
"_cellSize": {
"__type__": "cc.Size",
"width": 40,
"height": 40
},
"_startAxis": 0,
"_paddingLeft": 10,
"_paddingRight": -50,
"_paddingTop": 0,
"_paddingBottom": 0,
"_spacingX": 20,
"_spacingY": 0,
"_verticalDirection": 1,
"_horizontalDirection": 0,
"_constraint": 0,
"_constraintNum": 2,
"_affectedByScale": false,
"_isAlign": false,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "d3QJZHxpBK0bRpdCfcnjsv"
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "21S4TQDzROJK1npIOgoF+m",
"instance": null,
"targetOverrides": null
}
]

View File

@@ -0,0 +1,13 @@
{
"ver": "1.1.50",
"importer": "prefab",
"imported": true,
"uuid": "334b6dda-3905-424e-bea3-5c56d3c51efe",
"files": [
".json"
],
"subMetas": {},
"userData": {
"syncNodeName": "CurrencyItem"
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "a53e21a6-1d72-42c3-a8ea-ce4cd0dc318f",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,63 @@
[
{
"__type__": "cc.Prefab",
"_name": "DressGlareNode",
"_objFlags": 0,
"_native": "",
"data": {
"__id__": 1
},
"optimizationPolicy": 0,
"asyncLoadAssets": false,
"persistent": false
},
{
"__type__": "cc.Node",
"_name": "DressGlareNode",
"_objFlags": 0,
"_parent": null,
"_children": [],
"_active": true,
"_components": [],
"_prefab": {
"__id__": 2
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_lrot": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": 0,
"w": 1
},
"_lscale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"z": 1
},
"_layer": 1073741824,
"_euler": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_id": ""
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "c46/YsCPVOJYA4mWEpNYRx"
}
]

View File

@@ -0,0 +1,13 @@
{
"ver": "1.1.50",
"importer": "prefab",
"imported": true,
"uuid": "e8086588-8a5d-4210-bc27-389b6adcaf11",
"files": [
".json"
],
"subMetas": {},
"userData": {
"syncNodeName": "DressGlareNode"
}
}

View File

@@ -0,0 +1,340 @@
[
{
"__type__": "cc.Prefab",
"_name": "DressSocketNode",
"_objFlags": 0,
"__editorExtras__": {},
"_native": "",
"data": {
"__id__": 1
},
"optimizationPolicy": 0,
"persistent": false
},
{
"__type__": "cc.Node",
"_name": "DressSocketNode",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": null,
"_children": [
{
"__id__": 2
},
{
"__id__": 8
}
],
"_active": true,
"_components": [],
"_prefab": {
"__id__": 14
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_lrot": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": 0,
"w": 1
},
"_lscale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"z": 1
},
"_mobility": 0,
"_layer": 1073741824,
"_euler": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_id": ""
},
{
"__type__": "cc.Node",
"_name": "Texture",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 1
},
"_children": [],
"_active": true,
"_components": [
{
"__id__": 3
},
{
"__id__": 5
}
],
"_prefab": {
"__id__": 7
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_lrot": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": 0,
"w": 1
},
"_lscale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"z": 1
},
"_mobility": 0,
"_layer": 1073741824,
"_euler": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_id": ""
},
{
"__type__": "cc.UITransform",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 2
},
"_enabled": true,
"__prefab": {
"__id__": 4
},
"_contentSize": {
"__type__": "cc.Size",
"width": 100,
"height": 100
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "c2tK6S82tEJq55LVlT4F3N"
},
{
"__type__": "cc.Sprite",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 2
},
"_enabled": true,
"__prefab": {
"__id__": 6
},
"_customMaterial": null,
"_srcBlendFactor": 2,
"_dstBlendFactor": 4,
"_color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_spriteFrame": null,
"_type": 0,
"_fillType": 0,
"_sizeMode": 2,
"_fillCenter": {
"__type__": "cc.Vec2",
"x": 0,
"y": 0
},
"_fillStart": 0,
"_fillRange": 0,
"_isTrimmedMode": false,
"_useGrayscale": false,
"_atlas": null,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "a5XjaX0ABPP5RSoo98iHXa"
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "46WgrGcBpCU4AVxZHeUKo0",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.Node",
"_name": "Spine",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 1
},
"_children": [],
"_active": true,
"_components": [
{
"__id__": 9
},
{
"__id__": 11
}
],
"_prefab": {
"__id__": 13
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_lrot": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": 0,
"w": 1
},
"_lscale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"z": 1
},
"_mobility": 0,
"_layer": 1073741824,
"_euler": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_id": ""
},
{
"__type__": "cc.UITransform",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 8
},
"_enabled": true,
"__prefab": {
"__id__": 10
},
"_contentSize": {
"__type__": "cc.Size",
"width": 100,
"height": 100
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.60222
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "e8PHvFTQdCub2YlQVztJGK"
},
{
"__type__": "sp.Skeleton",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 8
},
"_enabled": true,
"__prefab": {
"__id__": 12
},
"_customMaterial": null,
"_srcBlendFactor": 2,
"_dstBlendFactor": 4,
"_color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_skeletonData": null,
"defaultSkin": "",
"defaultAnimation": "",
"_premultipliedAlpha": false,
"_timeScale": 1,
"_preCacheMode": -1,
"_cacheMode": 0,
"_sockets": [],
"_useTint": false,
"_debugMesh": false,
"_debugBones": false,
"_debugSlots": false,
"_enableBatch": false,
"loop": true,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "0bLrMfCo1HH4sNbP27AV7B"
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "28LtEJQG9CerixgYrYjMCo",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "c46/YsCPVOJYA4mWEpNYRx",
"instance": null,
"targetOverrides": null
}
]

View File

@@ -0,0 +1,13 @@
{
"ver": "1.1.50",
"importer": "prefab",
"imported": true,
"uuid": "2366e791-ed40-4713-8037-8702c964ea37",
"files": [
".json"
],
"subMetas": {},
"userData": {
"syncNodeName": "DressSocketNode"
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "6e6fdb82-af61-4574-bae8-f29c78b8eb4d",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "a2524a27-9d0d-465c-a1bd-01b4229c3ef1",
"files": [],
"subMetas": {},
"userData": {}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,13 @@
{
"ver": "1.1.50",
"importer": "prefab",
"imported": true,
"uuid": "b7a6cbd2-b13b-4eb9-9608-3d53c816315a",
"files": [
".json"
],
"subMetas": {},
"userData": {
"syncNodeName": "CommonDialogBox"
}
}

View File

@@ -0,0 +1,486 @@
[
{
"__type__": "cc.Prefab",
"_name": "CommonToast",
"_objFlags": 0,
"__editorExtras__": {},
"_native": "",
"data": {
"__id__": 1
},
"optimizationPolicy": 0,
"persistent": false
},
{
"__type__": "cc.Node",
"_name": "CommonToast",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": null,
"_children": [
{
"__id__": 2
}
],
"_active": true,
"_components": [
{
"__id__": 16
},
{
"__id__": 18
},
{
"__id__": 20
}
],
"_prefab": {
"__id__": 22
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_lrot": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": 0,
"w": 1
},
"_lscale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"z": 1
},
"_mobility": 0,
"_layer": 33554432,
"_euler": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_id": ""
},
{
"__type__": "cc.Node",
"_name": "Container",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 1
},
"_children": [
{
"__id__": 3
}
],
"_active": true,
"_components": [
{
"__id__": 9
},
{
"__id__": 11
},
{
"__id__": 13
}
],
"_prefab": {
"__id__": 15
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 0,
"y": 930,
"z": 0
},
"_lrot": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": 0,
"w": 1
},
"_lscale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"z": 1
},
"_mobility": 0,
"_layer": 33554432,
"_euler": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_id": ""
},
{
"__type__": "cc.Node",
"_name": "Content",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 2
},
"_children": [],
"_active": true,
"_components": [
{
"__id__": 4
},
{
"__id__": 6
}
],
"_prefab": {
"__id__": 8
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 0,
"y": -73,
"z": 0
},
"_lrot": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": 0,
"w": 1
},
"_lscale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"z": 1
},
"_mobility": 0,
"_layer": 33554432,
"_euler": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_id": ""
},
{
"__type__": "cc.UITransform",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 3
},
"_enabled": true,
"__prefab": {
"__id__": 5
},
"_contentSize": {
"__type__": "cc.Size",
"width": 2460,
"height": 66.78
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "78F/C0LzlIZprU8L6fH1uZ"
},
{
"__type__": "cc.RichText",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 3
},
"_enabled": true,
"__prefab": {
"__id__": 7
},
"_lineHeight": 53,
"_string": "",
"_horizontalAlign": 1,
"_verticalAlign": 1,
"_fontSize": 53,
"_fontColor": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_maxWidth": 2460,
"_fontFamily": "Arial",
"_font": {
"__uuid__": "1e4ba4a2-7090-4e7b-8479-72285e08cdeb",
"__expectedType__": "cc.TTFFont"
},
"_isSystemFontUsed": false,
"_userDefinedFont": {
"__uuid__": "1e4ba4a2-7090-4e7b-8479-72285e08cdeb",
"__expectedType__": "cc.TTFFont"
},
"_cacheMode": 0,
"_imageAtlas": {
"__uuid__": "35330028-a50f-4ff1-ba32-5a0e04e3bbf2",
"__expectedType__": "cc.SpriteAtlas"
},
"_handleTouchEvent": false,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "c309HMP+5FiLw2COQEShKP"
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "95YqJo5jVJmKTQCV9sNJ8Q",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.UITransform",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 2
},
"_enabled": true,
"__prefab": {
"__id__": 10
},
"_contentSize": {
"__type__": "cc.Size",
"width": 2560,
"height": 183
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 1
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "6bie7ttBVMh60blIUo01g6"
},
{
"__type__": "cc.Widget",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 2
},
"_enabled": true,
"__prefab": {
"__id__": 12
},
"_alignFlags": 40,
"_target": null,
"_left": 0,
"_right": 0,
"_top": -210,
"_bottom": 0,
"_horizontalCenter": 0,
"_verticalCenter": 0,
"_isAbsLeft": true,
"_isAbsRight": false,
"_isAbsTop": true,
"_isAbsBottom": true,
"_isAbsHorizontalCenter": true,
"_isAbsVerticalCenter": true,
"_originalWidth": 100,
"_originalHeight": 0,
"_alignMode": 2,
"_lockFlags": 0,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "c8KBjUN7hMC69oIfCgH/Eb"
},
{
"__type__": "cc.Sprite",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 2
},
"_enabled": true,
"__prefab": {
"__id__": 14
},
"_customMaterial": null,
"_srcBlendFactor": 2,
"_dstBlendFactor": 4,
"_color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_spriteFrame": {
"__uuid__": "536e0b99-f1b2-4e59-ab32-8c4e67fbbf4d@f9941",
"__expectedType__": "cc.SpriteFrame"
},
"_type": 1,
"_fillType": 0,
"_sizeMode": 0,
"_fillCenter": {
"__type__": "cc.Vec2",
"x": 0,
"y": 0
},
"_fillStart": 0,
"_fillRange": 0,
"_isTrimmedMode": true,
"_useGrayscale": false,
"_atlas": null,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "d4FnpitvxIcbRI9Nl01P7E"
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "6fL3o6XlpH97wbcQQkpg3Z",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.UITransform",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 1
},
"_enabled": true,
"__prefab": {
"__id__": 17
},
"_contentSize": {
"__type__": "cc.Size",
"width": 2560,
"height": 1440
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "71asNAIwtAZq4DKjJ3k5YZ"
},
{
"__type__": "cc.Widget",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 1
},
"_enabled": true,
"__prefab": {
"__id__": 19
},
"_alignFlags": 45,
"_target": null,
"_left": 0,
"_right": 0,
"_top": 0,
"_bottom": 0,
"_horizontalCenter": 0,
"_verticalCenter": 0,
"_isAbsLeft": true,
"_isAbsRight": true,
"_isAbsTop": true,
"_isAbsBottom": true,
"_isAbsHorizontalCenter": true,
"_isAbsVerticalCenter": true,
"_originalWidth": 100,
"_originalHeight": 100,
"_alignMode": 2,
"_lockFlags": 0,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "edAc3cfJNCQJd0XDh0poPz"
},
{
"__type__": "3c532HQfoBBi78q+sTYBpzr",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 1
},
"_enabled": true,
"__prefab": {
"__id__": 21
},
"contentLabel": {
"__id__": 6
},
"containerNode": {
"__id__": 2
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "81f1XJM0JOWb0fH0GVh+PM"
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "",
"instance": null,
"targetOverrides": []
}
]

View File

@@ -0,0 +1,13 @@
{
"ver": "1.1.50",
"importer": "prefab",
"imported": true,
"uuid": "f3d8831c-1525-4b2c-84b3-8f7d1910095f",
"files": [
".json"
],
"subMetas": {},
"userData": {
"syncNodeName": "CommonToast"
}
}

View File

@@ -0,0 +1,67 @@
[
{
"__type__": "cc.Prefab",
"_name": "GameUI",
"_objFlags": 0,
"__editorExtras__": {},
"_native": "",
"data": {
"__id__": 1
},
"optimizationPolicy": 0,
"persistent": false
},
{
"__type__": "cc.Node",
"_name": "GameUI",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": null,
"_children": [],
"_active": true,
"_components": [],
"_prefab": {
"__id__": 2
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_lrot": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": 0,
"w": 1
},
"_lscale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"z": 1
},
"_mobility": 0,
"_layer": 1073741824,
"_euler": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_id": ""
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "c46/YsCPVOJYA4mWEpNYRx",
"instance": null,
"targetOverrides": null
}
]

View File

@@ -0,0 +1,13 @@
{
"ver": "1.1.50",
"importer": "prefab",
"imported": true,
"uuid": "1369e7f1-056a-4e3d-8484-39be5dface1e",
"files": [
".json"
],
"subMetas": {},
"userData": {
"syncNodeName": "GameUI"
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,13 @@
{
"ver": "1.1.50",
"importer": "prefab",
"imported": true,
"uuid": "682cc812-4182-4fe0-8b91-43c4d9b6add6",
"files": [
".json"
],
"subMetas": {},
"userData": {
"syncNodeName": "MainUI-001"
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,13 @@
{
"ver": "1.1.50",
"importer": "prefab",
"imported": true,
"uuid": "f5d33adb-6500-4a57-a4f7-e887749e98cd",
"files": [
".json"
],
"subMetas": {},
"userData": {
"syncNodeName": "MainUI"
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,13 @@
{
"ver": "1.1.50",
"importer": "prefab",
"imported": true,
"uuid": "be15b5af-c87d-4d9a-9faa-954318e815a6",
"files": [
".json"
],
"subMetas": {},
"userData": {
"syncNodeName": "ShopUI"
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "e530c886-01d1-4780-a154-940c11ebc245",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "99123257-14dc-48cf-a23c-a1155cd6dd44",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,64 @@
import { _decorator } from "cc";
import { EventManager } from "@max-studio/core/event/EventManager";
import { Singleton } from "@max-studio/core/Singleton";
import LogUtils from "@max-studio/core/utils/LogUtils";
import { CurrencyEventMessage, CurrencyType } from "./Types";
const { ccclass, property } = _decorator;
@ccclass("CurrencyManager")
export class CurrencyManager extends Singleton {
private currencyValues: Record<CurrencyType, number> = {} as Record<CurrencyType, number>;
/** 获取货币值 */
public getCurrencyValue(type: CurrencyType): number {
return this.currencyValues[type] || 0;
}
/** 设置货币值 */
public setCurrencyValue(type: CurrencyType, value: number, isNotify: boolean = true) {
this.currencyValues[type] = value;
if (isNotify) {
EventManager.getInstance().emit(CurrencyEventMessage.CURRENCY_VALUE_CHANGED, type, value);
}
}
/** 格式化货币显示 */
public formatCurrencyDisplay(type: CurrencyType, value?: number): string {
const amount = value ?? this.getCurrencyValue(type);
// 根据货币类型返回不同的格式
if (amount >= 1000000) {
return `${(amount / 1000000).toFixed(1)}M`;
} else if (amount >= 1000) {
return `${(amount / 1000).toFixed(1)}K`;
}
return amount.toString();
}
/** 检查货币是否足够 */
public isCurrencyEnough(type: CurrencyType, amount: number): boolean {
return this.getCurrencyValue(type) >= amount;
}
/** 消耗货币 */
public consumeCurrency(type: CurrencyType, amount: number, isNotify: boolean = true): boolean {
if (amount <= 0) {
LogUtils.warn(`[CurrencyManager] 消耗货币数量必须大于0: ${amount}`);
return false;
}
if (!this.isCurrencyEnough(type, amount)) {
LogUtils.warn(`[CurrencyManager] 货币不足: ${type}, 需要: ${amount}, 当前: ${this.getCurrencyValue(type)}`);
return false;
}
const currentValue = this.getCurrencyValue(type);
const newValue = currentValue - amount;
this.setCurrencyValue(type, newValue, isNotify);
return true;
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "0474457b-c003-444f-b68b-9279920ba444",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,9 @@
export enum CurrencyType {
ENERGY = "energy",
GEM = "gem",
GOLD = "gold",
}
export enum CurrencyEventMessage {
CURRENCY_VALUE_CHANGED = 'currency_value_changed',
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "4eb1626b-f4b8-4566-b197-30c135c7e3a8",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "ea4b3885-21a2-4076-8162-00bd5ee2c090",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,46 @@
import { _decorator, Component, Enum, Label } from "cc";
import { EventManager } from "@max-studio/core/event/EventManager";
import UIManager from "@max-studio/core/ui/UIManager";
import LogUtils from "@max-studio/core/utils/LogUtils";
import { ShopUI } from "../../uis/ShopUI";
import { CurrencyManager } from "../CurrencyManager";
import { CurrencyEventMessage, CurrencyType } from "../Types";
import { onEvent } from "@max-studio/core/decorators";
const { ccclass, property } = _decorator;
@ccclass("CurrencyItem")
export class CurrencyItem extends Component {
@property({ type: Enum(CurrencyType) })
public type: CurrencyType = CurrencyType.ENERGY;
@property(Label)
public label: Label = null!;
protected onLoad(): void {
this.node.onClick(this.onGotoCurrencyShop, this);
}
private onGotoCurrencyShop() {
LogUtils.log("点击了货币商店:", this.type);
void UIManager.getInstance().openUI(ShopUI, this.type);
}
@onEvent(CurrencyEventMessage.CURRENCY_VALUE_CHANGED)
private onCurrencyValueChanged(type: CurrencyType, value: number) {
if (type !== this.type) {
return;
}
this.label.string = CurrencyManager.getInstance().formatCurrencyDisplay(this.type, value);
}
protected onDestroy(): void {
EventManager.getInstance().off(CurrencyEventMessage.CURRENCY_VALUE_CHANGED, this.onCurrencyValueChanged, this);
}
protected start(): void {
this.label.string = CurrencyManager.getInstance().formatCurrencyDisplay(this.type);
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "8840c2d8-d822-482c-b68f-2a88cd9c8e72",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "d098e1e4-9d54-4ad0-88f0-f13bf7c77e51",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,232 @@
import { instantiate, Node, sp, Sprite, SpriteFrame, Texture2D } from "cc";
import { DRESS_PART, DRESS_SOURCE_TYPE, IDressInfo, SPINE_SLOT, SPINE_SOCKET } from "./Types";
import ResManager from "@max-studio/core/res/ResManager";
import { loadDressSocketNode } from "./PetUtils";
import { StringUtils } from "@max-studio/core/utils/StringUtils";
export class BasePart {
protected skeleton: sp.Skeleton = null;
protected info: IDressInfo = null;
protected socketName: string = null;
protected part: DRESS_PART = null;
protected faceSkeleton: sp.Skeleton = null;
protected socketMountNode: Node = null;
protected socketCache: Map<string, sp.SpineSocket> = new Map();
protected socketNode: Node = null;
constructor(ske: sp.Skeleton, part: DRESS_PART) {
this.skeleton = ske;
this.part = part;
this.socketName = SPINE_SOCKET[part];
this.faceSkeleton = ske.node.getChildByName("face")?.getComponent(sp.Skeleton);
}
public async putOn(info: IDressInfo) {
this.takeOff();
this.info = info;
if (info.sourceLocationType == DRESS_SOURCE_TYPE.SLOT) {
await this.putOnBySlot(info);
} else {
await this.putOnBySocket(info);
}
}
public takeOff() {
if (this.info == null) {
return;
}
const partSkeleton = this.getPartSkeleton();
if (this.info.sourceLocationType == DRESS_SOURCE_TYPE.SLOT) {
const slotName = SPINE_SLOT[this.part];
if (StringUtils.isEmpty(slotName) || partSkeleton == null) {
console.error("宠物_槽位_空", slotName);
return;
}
const slot = partSkeleton.findSlot(slotName);
if (!slot) {
console.error("宠物_槽位_不存在", slotName);
return;
}
if (slot.texture) {
ResManager.getInstance().releaseAsset(slot.texture);
slot.texture = null;
}
partSkeleton.setSlotTexture(slotName, null, true);
} else {
if (!this.socketNode) {
return;
}
const socketSprite = this.socketNode.getOrAddComponent(Sprite, "Texture");
if (socketSprite && socketSprite.spriteFrame) {
ResManager.getInstance().releaseAsset(socketSprite.spriteFrame);
socketSprite.spriteFrame = null;
}
const spine = this.socketNode.getOrAddComponent(sp.Skeleton, "Spine");
if (spine && spine.skeletonData) {
ResManager.getInstance().releaseAsset(spine.skeletonData);
spine.skeletonData = undefined;
spine.animation = undefined;
}
}
this.info = null;
}
private getPartSkeleton() {
if (
this.part == DRESS_PART.GLASSES ||
this.part == DRESS_PART.ACCESS ||
this.info.sourceLocationType == DRESS_SOURCE_TYPE.SOCKET_TEX_FACE ||
this.info.sourceLocationType == DRESS_SOURCE_TYPE.SOCKET_SPINE_FACE
) {
return this.faceSkeleton;
}
return this.skeleton;
}
private getPartBonePath(skeleton: sp.Skeleton, name: string) {
let path = "";
console.log("获取宠物_骨骼_路径:", name);
let bone = skeleton.findBone(name);
if (bone) {
path = bone.data.name;
while (bone.parent) {
bone = bone.parent;
path = `${bone.data.name}/${path}`;
if ("root" == bone.data.name) {
break;
}
}
}
return path;
}
private getSocketNode(ske: sp.Skeleton, path: string): sp.SpineSocket {
let socket = this.socketCache.get(path);
if (socket == null) {
const sockets = ske.sockets as sp.SpineSocket[];
socket = sockets.find((s) => s.path == path);
if (!socket) {
console.error("宠物_挂点_不存在 创建挂点:", path);
socket = new sp.SpineSocket(path);
sockets.push(socket);
ske.sockets = sockets;
}
this.socketCache.set(path, socket);
}
return socket;
}
private async putOnBySlot(info: IDressInfo) {
const partSkeleton = this.getPartSkeleton();
const slotName = SPINE_SLOT[this.part];
if (StringUtils.isEmpty(slotName) || partSkeleton == null) {
console.error("宠物_槽位_空", slotName);
return;
}
const slot = partSkeleton.findSlot(slotName);
if (!slot) {
console.error("宠物_槽位_不存在", slotName);
return;
}
if (!info) {
if (slot.texture) {
ResManager.getInstance().releaseAsset(slot.texture);
slot.texture = null;
}
partSkeleton.setSlotTexture(slotName, null, true);
return;
}
const { err, asset } = await ResManager.getInstance().loadAsset({
bundle: "dress-spine",
path: `DressTexture/${info.sourceName}`,
type: Texture2D,
});
if (err) {
console.error("加载宠物_槽位_失败", err);
return;
}
if (this.info != info) {
ResManager.getInstance().releaseAsset(asset);
return;
}
if (slot.texture != null) {
ResManager.getInstance().releaseAsset(slot.texture);
slot.texture = null;
}
slot.texture = asset;
partSkeleton.setSlotTexture(slotName, asset, true);
}
private async putOnBySocket(info: IDressInfo) {
const partSkeleton = this.getPartSkeleton();
const bonePath = this.getPartBonePath(partSkeleton, this.socketName);
if (this.socketNode == null) {
const socketPrefab = await loadDressSocketNode();
if (socketPrefab == null) {
return;
}
this.socketNode = instantiate(socketPrefab);
}
if (
info.sourceLocationType == DRESS_SOURCE_TYPE.SOCKET_TEX_FACE ||
info.sourceLocationType == DRESS_SOURCE_TYPE.SOCKET_TEX
) {
const loadInfo = await ResManager.getInstance().loadAsset({
bundle: "dress-spine",
path: `DressTexture/${info.sourceName}`,
type: SpriteFrame,
});
if (loadInfo.err) {
console.error("加载宠物_socket_tex失败", loadInfo.err);
} else {
if (this.info == info) {
const socketSprite = this.socketNode.getOrAddComponent(Sprite, "Texture");
socketSprite.spriteFrame = loadInfo.asset as SpriteFrame;
} else {
console.warn("加载宠物_socket_tex失败但是不是当前宠物");
ResManager.getInstance().releaseAsset(loadInfo.asset);
}
}
} else if (
info.sourceLocationType == DRESS_SOURCE_TYPE.SOCKET_SPINE ||
info.sourceLocationType == DRESS_SOURCE_TYPE.SOCKET_SPINE_FACE
) {
const loadInfo = await ResManager.getInstance().loadAsset({
bundle: "dress-spine",
path: `DressSpine/${info.sourceName}/${info.sourceName}`,
type: sp.SkeletonData,
});
if (loadInfo.err) {
console.error("加载宠物_socket_spine失败", loadInfo.err);
} else {
if (this.info == info) {
const spine = this.socketNode.getOrAddComponent(sp.Skeleton, "Spine");
spine.animation = undefined;
spine.skeletonData = loadInfo.asset as sp.SkeletonData;
spine.setAnimation(0, "idle", true);
} else {
console.warn("加载宠物_socket_spine失败但是不是当前宠物");
ResManager.getInstance().releaseAsset(loadInfo.asset);
}
}
}
this.socketNode.setParent(partSkeleton.node);
const socket = this.getSocketNode(partSkeleton, bonePath);
this.socketNode.layer = partSkeleton.node.layer;
socket.target = this.socketNode;
const socketSpine = this.socketNode.getOrAddComponent(sp.Skeleton);
if (socketSpine && socketSpine.skeletonData) {
socketSpine.setAnimation(0, "idle", true);
}
// eslint-disable-next-line no-self-assign
partSkeleton.sockets = partSkeleton.sockets;
this.setSocketZIndex();
}
protected setSocketZIndex() {
if (this.socketNode) {
this.socketNode.setSiblingIndex(0);
}
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "e07784d9-9898-4cde-b467-3deaba247a36",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,82 @@
import { Component, _decorator, sp } from "cc";
import { COMMON_FACE_ANIM, DRESS_PART, IDressInfo, PET_ANIM_NAME, PET_BODY_FACE_ANIM_MAP, PetInfo } from "./Types";
import { autoBind } from "@max-studio/core/ui/UIDecorator";
import { BasePart } from "./BasePart";
import { GlarePart } from "./GlarePart";
const { ccclass } = _decorator;
@ccclass("BasePet")
export class BasePet extends Component {
private petInfo: PetInfo;
@autoBind("RootNode/PetAni", sp.Skeleton)
private petBodySkeleton: sp.Skeleton = null;
@autoBind("RootNode/PetAni/face", sp.Skeleton)
private petFace: sp.Skeleton = null;
private parts: Map<DRESS_PART, BasePart> = new Map();
protected onLoad(): void {
this.parts.set(DRESS_PART.GLARE, new GlarePart(this.petBodySkeleton, DRESS_PART.GLARE));
this.parts.set(DRESS_PART.BAG, new BasePart(this.petBodySkeleton, DRESS_PART.BAG));
this.parts.set(DRESS_PART.GLASSES, new BasePart(this.petBodySkeleton, DRESS_PART.GLASSES));
this.parts.set(DRESS_PART.HAT, new BasePart(this.petBodySkeleton, DRESS_PART.HAT));
this.parts.set(DRESS_PART.ACCESS, new BasePart(this.petBodySkeleton, DRESS_PART.ACCESS));
}
public setInfo(info: PetInfo) {
this.petInfo = info;
}
public getInfo(): PetInfo {
return this.petInfo;
}
public async putOn(info: IDressInfo) {
const { type, sourceLocationType, sourceName } = info;
if (type == DRESS_PART.SUIT) {
if (info.dressMap) {
info.dressMap.forEach(async (dressInfo) => {
await this.parts.get(dressInfo.type)?.putOn(dressInfo);
});
}
return;
}
await this.parts.get(type)?.putOn(info);
}
public takeOff(type: DRESS_PART = DRESS_PART.ALL) {
if (type == DRESS_PART.ALL) {
this.parts.forEach((part) => {
part.takeOff();
});
} else {
this.parts.get(type)?.takeOff();
}
}
public playAnim(anim: PET_ANIM_NAME) {
this.petBodySkeleton.setAnimation(0, anim, true);
const faceAnim = PET_BODY_FACE_ANIM_MAP[anim] ?? PET_ANIM_NAME.IDLE;
this.petFace.setAnimation(0, faceAnim, true);
this.setFaceSkinFromAnim(faceAnim);
}
protected setFaceSkinFromAnim(faceAnim: PET_ANIM_NAME) {
let faceSkin: string = faceAnim;
if (!COMMON_FACE_ANIM.includes(faceAnim)) {
faceSkin = `eye/${this.petInfo.name}`;
}
this.petFace.setSkin(faceSkin);
this.petFace._skeleton?.slots.forEach((slot) => {
const slotName = slot.data.name.toLowerCase();
if (slotName.endsWith("_hui")) {
slot.color.a = slotName == `${this.petInfo.name}_hui`.toLowerCase() ? 1 : 0;
}
if (slotName.startsWith("dk")) {
console.log("slotName:", slotName);
}
});
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "5df90b9c-7a32-4e70-b46f-1510986c73d4",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,3 @@
import { BasePart } from "./BasePart";
export class FacePart extends BasePart {}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "dbc0d9b3-b0a1-4121-8e48-9c991101a10b",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,90 @@
import { easing, instantiate, Node, Prefab, sp, tween, Tween, Vec3 } from "cc";
import { BasePart } from "./BasePart";
import { DRESS_PART, DRESS_SOURCE_TYPE, IDressInfo } from "./Types";
import ResManager from "@max-studio/core/res/ResManager";
const GLARE_NODE_NAME = "glare";
const GLARE_DEFAULT_POSITION = new Vec3(-170, 0, 0);
export class GlarePart extends BasePart {
private glareNode: Node = null;
private glareSpine: sp.Skeleton = null;
private glarePrefab: Prefab = null;
constructor(ske: sp.Skeleton, part: DRESS_PART) {
super(ske, part);
this.getGlareNode();
}
public async putOn(info: IDressInfo) {
this.takeOff();
this.info = info;
const loadInfo = await ResManager.getInstance().loadAsset({
bundle: "dress-spine",
path: `DressGlare/${info.sourceName}`,
type: Prefab,
});
if (loadInfo.err) {
console.error("加载宠物_槽位_失败", loadInfo.err);
return;
}
this.glarePrefab = loadInfo.asset;
const node = instantiate(loadInfo.asset);
node.name = "sp";
node.setParent(this.glareNode);
if (node == null) {
return;
}
this.glareSpine = node.getComponent(sp.Skeleton);
this.glareSpine.setAnimation(0, "animation", false);
this.glareNode.setScale(this.skeleton.node.scale);
Tween.stopAllByTarget(this.glareNode);
const dir = this.glareNode.scale.x;
GLARE_DEFAULT_POSITION.x = dir > 0 ? -170 : 170;
tween(this.glareNode).to(0.35, { position: GLARE_DEFAULT_POSITION }, { easing: easing.sineOut }).start();
if (this.info.sourceLocationType == DRESS_SOURCE_TYPE.NONE) {
this.glareNode.setSiblingIndex(0);
} else {
this.glareNode.setSiblingIndex(this.glareNode.parent.children.length - 1);
}
}
public takeOff() {
if (this.glareSpine == null) {
return;
}
if (this.glareSpine) {
this.glareSpine.node.destroy();
this.glareSpine = null;
}
if (this.glarePrefab) {
ResManager.getInstance().releaseAsset(this.glarePrefab);
this.glarePrefab = null;
}
if (this.glareNode) {
Tween.stopAllByTarget(this.glareNode);
}
this.info = null;
}
private getGlareNode() {
if (this.glareNode) {
return this.glareNode;
}
const root = this.skeleton.node.parent;
if (!root) {
console.error("没有找到根节点");
return null;
}
this.glareNode = new Node(GLARE_NODE_NAME);
this.glareNode.setParent(root);
this.glareNode.setPosition(GLARE_DEFAULT_POSITION);
this.glareNode.setSiblingIndex(0);
return this.glareNode;
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "f5f29e43-e981-42ee-96c5-b993931e25e4",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,9 @@
import { BasePart } from "./BasePart";
export class GlassesPart extends BasePart {
protected setSocketZIndex(): void {
if (this.socketNode) {
this.socketNode.setSiblingIndex(this.socketNode.parent.children.length);
}
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "86abc774-d404-4392-b642-463b5e5470dc",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,55 @@
import ResManager from "@max-studio/core/res/ResManager";
import { Singleton } from "@max-studio/core/Singleton";
import { instantiate, Prefab } from "cc";
import { BasePet } from "./BasePet";
import { releaseDressSocketNode } from "./PetUtils";
export class PetManager extends Singleton {
private petPrefabCache: Map<string, Prefab> = new Map();
public async getPet(name: string): Promise<BasePet> {
let asset: Prefab = null;
if (this.petPrefabCache.has(name)) {
asset = this.petPrefabCache.get(name);
if (asset == null) {
console.error(`宠物预制体缓存为空 ${name}`);
return null;
}
asset.addRef();
} else {
const loadInfo = await ResManager.getInstance().loadAsset({
bundle: "pet-spine",
path: name,
type: Prefab,
});
if (loadInfo.err) {
console.error(`加载宠物预制体失败 ${name}`, loadInfo.err);
return null;
}
asset = loadInfo.asset;
this.petPrefabCache.set(name, asset);
}
const basePet = instantiate(asset).getOrAddComponent(BasePet);
basePet.setInfo({ name: name });
return basePet;
}
public releasePet(pet: BasePet) {
const petName = pet.getInfo().name;
pet.takeOff();
pet.node.removeFromParent();
pet.node.destroy();
if (this.petPrefabCache.has(petName)) {
const prefab = this.petPrefabCache.get(petName);
ResManager.getInstance().releaseAsset(prefab);
if (prefab.refCount == 0) {
this.petPrefabCache.delete(petName);
console.log(`释放宠物预制体成功 ${petName}`);
}
}
}
protected onRelease(): void {
releaseDressSocketNode();
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "e9aeecff-fbae-4e76-8620-bb0f5664ad62",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,29 @@
import ResManager from "@max-studio/core/res/ResManager";
import { Prefab } from "cc";
const DRESS_SOCKET_NODE_PATH = "prefabs/pet/DressSocketNode";
let socketPrefab: Prefab = null;
export async function loadDressSocketNode(): Promise<Prefab> {
if (socketPrefab != null) {
return socketPrefab;
}
const loadInfo = await ResManager.getInstance().loadAsset({
bundle: "games",
path: DRESS_SOCKET_NODE_PATH,
type: Prefab,
});
if (loadInfo.err) {
console.error(`加载 DressSocketNode 失败: ${loadInfo.err}`);
return null;
}
socketPrefab = loadInfo.asset;
return socketPrefab;
}
export function releaseDressSocketNode() {
if (socketPrefab != null) {
ResManager.getInstance().releaseAsset(socketPrefab);
socketPrefab = null;
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "ccf9a987-4dc8-4993-856e-b9ea38c19731",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,125 @@
export interface PetInfo {
name: string;
petId?: string;
}
export interface IDressInfo {
/**
* 装扮部位
*/
type: DRESS_PART;
sourceLocationType: DRESS_SOURCE_TYPE;
sourceName: string;
/**
* 套装信息
*/
dressMap?: Map<number, IDressInfo>;
}
export enum DRESS_PART {
/**
* 套装
*/
SUIT = 0,
/**
* 背包
*/
BAG = 1,
/**
* 帽子
*/
HAT = 2,
/**
* 眼镜
*/
GLASSES = 3,
/**
* 附件
*/
ACCESS = 4,
/**
* 炫光
*/
GLARE = 5,
/**
* 所有
*/
ALL = 6,
}
export enum DRESS_SOURCE_TYPE {
NONE = 0,
/**
* 槽位
*/
SLOT = 1,
/**
* 挂点静态图
*/
SOCKET_TEX = 2,
/**
* 挂点动画
*/
SOCKET_SPINE = 3,
/**
* 挂点静态图-脸
*/
SOCKET_TEX_FACE = 4,
/**
* 挂点动画-脸
*/
SOCKET_SPINE_FACE = 5,
}
export const SPINE_SLOT: Record<number, string> = {
[DRESS_PART.BAG]: "glasses/bag",
[DRESS_PART.HAT]: "glasses/zs_hat_01",
[DRESS_PART.GLASSES]: "glasses/zs_glass_01",
[DRESS_PART.ACCESS]: "glasses/zs_hdi_01",
};
export const SPINE_SOCKET: Record<number, string> = {
[DRESS_PART.BAG]: "Bag",
[DRESS_PART.HAT]: "Hat",
[DRESS_PART.GLASSES]: "Glasses",
[DRESS_PART.ACCESS]: "ZS",
};
export enum PET_ANIM_NAME {
IDLE = "idle",
HAPPY = "happy",
SLEEP = "sleep",
VERTIGO = "vertigo",
EAT = "eat",
MOTOU = "motou",
RUN = "run",
WALK = "walk",
PLAY = "hudong_hudie",
ANGRY = "angry",
}
export const PET_BODY_FACE_ANIM_MAP: Record<PET_ANIM_NAME, PET_ANIM_NAME> = {
[PET_ANIM_NAME.IDLE]: PET_ANIM_NAME.IDLE,
[PET_ANIM_NAME.HAPPY]: PET_ANIM_NAME.HAPPY,
[PET_ANIM_NAME.SLEEP]: PET_ANIM_NAME.SLEEP,
[PET_ANIM_NAME.VERTIGO]: PET_ANIM_NAME.VERTIGO,
[PET_ANIM_NAME.EAT]: PET_ANIM_NAME.HAPPY,
[PET_ANIM_NAME.MOTOU]: PET_ANIM_NAME.MOTOU,
[PET_ANIM_NAME.RUN]: PET_ANIM_NAME.IDLE,
[PET_ANIM_NAME.WALK]: PET_ANIM_NAME.IDLE,
[PET_ANIM_NAME.PLAY]: PET_ANIM_NAME.HAPPY,
[PET_ANIM_NAME.ANGRY]: PET_ANIM_NAME.ANGRY,
};
export const COMMON_FACE_ANIM = [PET_ANIM_NAME.SLEEP, PET_ANIM_NAME.ANGRY, PET_ANIM_NAME.VERTIGO, PET_ANIM_NAME.HAPPY];

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "25f7a591-83b6-4490-9f3f-bc18d0dfbf76",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,3 @@
// import BasePet from "./BasePet";
export { PetManager } from "./PetManager";
export { BasePet } from "./BasePet";

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "d269dbc8-fcc2-48c2-8f83-4c35dcb4a760",
"files": [],
"subMetas": {},
"userData": {}
}

Some files were not shown because too many files have changed in this diff Show More