feat: 提交资源
This commit is contained in:
9
assets/configs/generated.meta
Normal file
9
assets/configs/generated.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "1.2.0",
|
||||
"importer": "directory",
|
||||
"imported": true,
|
||||
"uuid": "f7c4440c-c8da-402d-b2fb-9e8608fa3dca",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
9
assets/configs/generated/core.meta
Normal file
9
assets/configs/generated/core.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "1.2.0",
|
||||
"importer": "directory",
|
||||
"imported": true,
|
||||
"uuid": "c20136b0-1489-4c36-b935-aecc9c99eaa9",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
9
assets/configs/generated/core/Beans.ts
Normal file
9
assets/configs/generated/core/Beans.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
/**
|
||||
* 自动生成的Bean类型定义
|
||||
* 请勿手动修改此文件
|
||||
* 生成时间: 2025-10-13T13:51:42.231Z
|
||||
*/
|
||||
|
||||
import { ConfigParseUtils } from "./ConfigParseUtils";
|
||||
|
||||
// 没有找到Bean定义
|
||||
9
assets/configs/generated/core/Beans.ts.meta
Normal file
9
assets/configs/generated/core/Beans.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "793d74d0-b0fc-446a-a36e-7ea0476da99a",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
257
assets/configs/generated/core/ConfigParseUtils.ts
Normal file
257
assets/configs/generated/core/ConfigParseUtils.ts
Normal file
@@ -0,0 +1,257 @@
|
||||
|
||||
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;
|
||||
9
assets/configs/generated/core/ConfigParseUtils.ts.meta
Normal file
9
assets/configs/generated/core/ConfigParseUtils.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "e6350dd1-e9ea-4a64-9823-a20c6bf82990",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
16
assets/configs/generated/core/Enums.ts
Normal file
16
assets/configs/generated/core/Enums.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
/**
|
||||
* 自动生成的枚举类型定义
|
||||
* 请勿手动修改此文件
|
||||
* 生成时间: 2025-10-13T13:51:42.230Z
|
||||
*/
|
||||
|
||||
export enum DressSourceType {
|
||||
/** 无 */
|
||||
NONE = 0,
|
||||
/** 插槽 */
|
||||
SLOT = 1,
|
||||
/** 挂点静态图 */
|
||||
SOCKET_TEX = 2,
|
||||
/** 挂点动画 */
|
||||
SOCKET_SPINE = 3
|
||||
}
|
||||
9
assets/configs/generated/core/Enums.ts.meta
Normal file
9
assets/configs/generated/core/Enums.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "e46d8a30-83a4-4635-951a-84486ebeec96",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
166
assets/configs/generated/core/PetConfigData.ts
Normal file
166
assets/configs/generated/core/PetConfigData.ts
Normal file
@@ -0,0 +1,166 @@
|
||||
|
||||
|
||||
|
||||
import { Color } from 'cc';
|
||||
|
||||
|
||||
|
||||
import { ConfigParseUtils } from './ConfigParseUtils';
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* PetConfig数据结构
|
||||
*/
|
||||
export class PetConfigData {
|
||||
|
||||
private _id: number;
|
||||
|
||||
private _key: string;
|
||||
|
||||
private _bundle: string;
|
||||
|
||||
private _path: string;
|
||||
|
||||
private _name: string;
|
||||
|
||||
private _color: Color;
|
||||
|
||||
private _desc: string;
|
||||
|
||||
|
||||
|
||||
|
||||
/** id */
|
||||
|
||||
public get id(): number {
|
||||
|
||||
return this._id;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** key */
|
||||
|
||||
public get key(): string {
|
||||
|
||||
return this._key;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** bundle */
|
||||
|
||||
public get bundle(): string {
|
||||
|
||||
return this._bundle;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** 资源路径 */
|
||||
|
||||
public get path(): string {
|
||||
|
||||
return this._path;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** 宠物名称 */
|
||||
|
||||
public get name(): string {
|
||||
|
||||
return this._name;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** 颜色 */
|
||||
|
||||
public get color(): Color {
|
||||
|
||||
return ConfigParseUtils.createReadonlyProxy(ConfigParseUtils.deepFreeze(this._color), '颜色');
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** 描述 */
|
||||
|
||||
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)
|
||||
|
||||
);
|
||||
}
|
||||
9
assets/configs/generated/core/PetConfigData.ts.meta
Normal file
9
assets/configs/generated/core/PetConfigData.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "0b58225d-8d7f-429c-af23-1548e8acb583",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
88
assets/configs/generated/core/PetConfigManager.ts
Normal file
88
assets/configs/generated/core/PetConfigManager.ts
Normal file
@@ -0,0 +1,88 @@
|
||||
import { JsonAsset } from "cc";
|
||||
|
||||
import { ResManager } from "@max-studio/core/res/ResManager";
|
||||
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";
|
||||
|
||||
/**
|
||||
* PetConfig配置管理器
|
||||
*
|
||||
* ⚠️ 此文件由配置表生成器自动生成,请勿手动修改!
|
||||
* 如需修改,请编辑对应的Excel配置文件,然后重新生成
|
||||
*/
|
||||
@singleton()
|
||||
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 asset = await ResManager.getInstance().loadAsset<JsonAsset>(
|
||||
"generated/data/PetConfig",
|
||||
JsonAsset,
|
||||
"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.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;
|
||||
}
|
||||
}
|
||||
9
assets/configs/generated/core/PetConfigManager.ts.meta
Normal file
9
assets/configs/generated/core/PetConfigManager.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "a2093a8e-f81a-4bf2-a7a8-6bb20c02484c",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
130
assets/configs/generated/core/PetPartConfigData.ts
Normal file
130
assets/configs/generated/core/PetPartConfigData.ts
Normal file
@@ -0,0 +1,130 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
import { ConfigParseUtils } from './ConfigParseUtils';
|
||||
|
||||
|
||||
|
||||
import { DressSourceType } from './Enums';
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* PetPartConfig数据结构
|
||||
*/
|
||||
export class PetPartConfigData {
|
||||
|
||||
private _id: number;
|
||||
|
||||
private _name: string;
|
||||
|
||||
private _bundle: string;
|
||||
|
||||
private _path: string;
|
||||
|
||||
private _sourceType: DressSourceType;
|
||||
|
||||
|
||||
|
||||
|
||||
/** id */
|
||||
|
||||
public get id(): number {
|
||||
|
||||
return this._id;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** 装扮名称 */
|
||||
|
||||
public get name(): string {
|
||||
|
||||
return this._name;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** bundle */
|
||||
|
||||
public get bundle(): string {
|
||||
|
||||
return this._bundle;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** 资源路径 */
|
||||
|
||||
public get path(): string {
|
||||
|
||||
return this._path;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** 资源类型 */
|
||||
|
||||
public get sourceType(): DressSourceType {
|
||||
|
||||
return this._sourceType;
|
||||
|
||||
}
|
||||
|
||||
|
||||
public constructor(
|
||||
|
||||
id: number,
|
||||
|
||||
name: string,
|
||||
|
||||
bundle: string,
|
||||
|
||||
path: string,
|
||||
|
||||
sourceType: DressSourceType
|
||||
|
||||
) {
|
||||
|
||||
this._id = id;
|
||||
|
||||
this._name = name;
|
||||
|
||||
this._bundle = bundle;
|
||||
|
||||
this._path = path;
|
||||
|
||||
this._sourceType = sourceType;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 解析配置数据
|
||||
*/
|
||||
export function parsePetPartConfigData(data: any): PetPartConfigData {
|
||||
return new PetPartConfigData(
|
||||
|
||||
ConfigParseUtils.parseInt(data.id),
|
||||
|
||||
ConfigParseUtils.parseString(data.name),
|
||||
|
||||
ConfigParseUtils.parseString(data.bundle),
|
||||
|
||||
ConfigParseUtils.parseString(data.path),
|
||||
|
||||
data.sourceType as DressSourceType
|
||||
|
||||
);
|
||||
}
|
||||
9
assets/configs/generated/core/PetPartConfigData.ts.meta
Normal file
9
assets/configs/generated/core/PetPartConfigData.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "eb6f0ae1-9c7b-4d26-a8b1-b96d2e65631f",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
88
assets/configs/generated/core/PetPartConfigManager.ts
Normal file
88
assets/configs/generated/core/PetPartConfigManager.ts
Normal file
@@ -0,0 +1,88 @@
|
||||
import { JsonAsset } from "cc";
|
||||
|
||||
import { ResManager } from "@max-studio/core/res/ResManager";
|
||||
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";
|
||||
|
||||
/**
|
||||
* PetPartConfig配置管理器
|
||||
*
|
||||
* ⚠️ 此文件由配置表生成器自动生成,请勿手动修改!
|
||||
* 如需修改,请编辑对应的Excel配置文件,然后重新生成
|
||||
*/
|
||||
@singleton()
|
||||
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 asset = await ResManager.getInstance().loadAsset<JsonAsset>(
|
||||
"generated/data/PetPartConfig",
|
||||
JsonAsset,
|
||||
"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.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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "de6a1d46-109e-47ff-bb2a-f9b9f1241e30",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
11
assets/configs/generated/data.meta
Normal file
11
assets/configs/generated/data.meta
Normal 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"
|
||||
}
|
||||
}
|
||||
186
assets/configs/generated/data/PetConfig.json
Normal file
186
assets/configs/generated/data/PetConfig.json
Normal file
@@ -0,0 +1,186 @@
|
||||
[
|
||||
{
|
||||
"id": 1001,
|
||||
"key": "chenghuang",
|
||||
"bundle": "pet-spine",
|
||||
"path": "ChengHuang",
|
||||
"color": "#00000000"
|
||||
},
|
||||
{
|
||||
"id": 1002,
|
||||
"key": "dangkang",
|
||||
"bundle": "pet-spine",
|
||||
"path": "DangKang",
|
||||
"color": "#00000000"
|
||||
},
|
||||
{
|
||||
"id": 1003,
|
||||
"key": "shuoshu",
|
||||
"bundle": "pet-spine",
|
||||
"path": "ShuoShu"
|
||||
},
|
||||
{
|
||||
"id": 1004,
|
||||
"key": "jiuwei",
|
||||
"bundle": "pet-spine",
|
||||
"path": "JiuWei",
|
||||
"name": "精卫"
|
||||
},
|
||||
{
|
||||
"id": 1005,
|
||||
"key": "qiongqi",
|
||||
"bundle": "pet-spine",
|
||||
"path": "QiongQi",
|
||||
"name": "穷奇"
|
||||
},
|
||||
{
|
||||
"id": 1006,
|
||||
"key": "tiangou",
|
||||
"bundle": "pet-spine",
|
||||
"path": "TianGou"
|
||||
},
|
||||
{
|
||||
"id": 1007,
|
||||
"key": "xiangliu",
|
||||
"bundle": "pet-spine",
|
||||
"path": "XiangLiu"
|
||||
},
|
||||
{
|
||||
"id": 1008,
|
||||
"key": "lili",
|
||||
"bundle": "pet-spine",
|
||||
"path": "LiLi"
|
||||
},
|
||||
{
|
||||
"id": 1009,
|
||||
"key": "yugong",
|
||||
"bundle": "pet-spine",
|
||||
"path": "YuGong"
|
||||
},
|
||||
{
|
||||
"id": 1010,
|
||||
"key": "yutu",
|
||||
"bundle": "pet-spine",
|
||||
"path": "YuTu"
|
||||
},
|
||||
{
|
||||
"id": 1011,
|
||||
"key": "zhurong",
|
||||
"bundle": "pet-spine",
|
||||
"path": "ZhuRong"
|
||||
},
|
||||
{
|
||||
"id": 1012,
|
||||
"key": "changyou",
|
||||
"bundle": "pet-spine",
|
||||
"path": "Changyou"
|
||||
},
|
||||
{
|
||||
"id": 1013,
|
||||
"key": "dijiang",
|
||||
"bundle": "pet-spine",
|
||||
"path": "Dijiang"
|
||||
},
|
||||
{
|
||||
"id": 1014,
|
||||
"key": "jili",
|
||||
"bundle": "pet-spine",
|
||||
"path": "Jili"
|
||||
},
|
||||
{
|
||||
"id": 1015,
|
||||
"key": "shusi",
|
||||
"bundle": "pet-spine",
|
||||
"path": "Shusi"
|
||||
},
|
||||
{
|
||||
"id": 1016,
|
||||
"key": "wanv",
|
||||
"bundle": "pet-spine",
|
||||
"path": "Wanv"
|
||||
},
|
||||
{
|
||||
"id": 1017,
|
||||
"key": "xuangui",
|
||||
"bundle": "pet-spine",
|
||||
"path": "Xuangui"
|
||||
},
|
||||
{
|
||||
"id": 1018,
|
||||
"key": "yingyu",
|
||||
"bundle": "pet-spine",
|
||||
"path": "Yingyu"
|
||||
},
|
||||
{
|
||||
"id": 1019,
|
||||
"key": "yunque",
|
||||
"bundle": "pet-spine",
|
||||
"path": "Yunque"
|
||||
},
|
||||
{
|
||||
"id": 1020,
|
||||
"key": "pangding",
|
||||
"bundle": "pet-spine",
|
||||
"path": "PangDing"
|
||||
},
|
||||
{
|
||||
"id": 1021,
|
||||
"key": "shanyuan",
|
||||
"bundle": "pet-spine",
|
||||
"path": "ShanYuan"
|
||||
},
|
||||
{
|
||||
"id": 1022,
|
||||
"key": "zhuyin",
|
||||
"bundle": "pet-spine",
|
||||
"path": "ZhuYin"
|
||||
},
|
||||
{
|
||||
"id": 1023,
|
||||
"key": "yingwu",
|
||||
"bundle": "pet-spine",
|
||||
"path": "YingWu"
|
||||
},
|
||||
{
|
||||
"id": 1024,
|
||||
"key": "linghu",
|
||||
"bundle": "pet-spine",
|
||||
"path": "LingHu"
|
||||
},
|
||||
{
|
||||
"id": 1025,
|
||||
"key": "bailuwang",
|
||||
"bundle": "pet-spine",
|
||||
"path": "BaiLuWang"
|
||||
},
|
||||
{
|
||||
"id": 1026,
|
||||
"key": "xuanwu",
|
||||
"bundle": "pet-spine",
|
||||
"path": "XuanWu"
|
||||
},
|
||||
{
|
||||
"id": 1027,
|
||||
"key": "fengyou",
|
||||
"bundle": "pet-spine",
|
||||
"path": "FengYou"
|
||||
},
|
||||
{
|
||||
"id": 1028,
|
||||
"key": "nianshou",
|
||||
"bundle": "pet-spine",
|
||||
"path": "NianShou"
|
||||
},
|
||||
{
|
||||
"id": 1029,
|
||||
"key": "fenghuang",
|
||||
"bundle": "pet-spine",
|
||||
"path": "FengHuang"
|
||||
},
|
||||
{
|
||||
"id": 1030,
|
||||
"key": "touzishe",
|
||||
"bundle": "pet-spine",
|
||||
"path": "TouZiShe"
|
||||
}
|
||||
]
|
||||
11
assets/configs/generated/data/PetConfig.json.meta
Normal file
11
assets/configs/generated/data/PetConfig.json.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"ver": "2.0.1",
|
||||
"importer": "json",
|
||||
"imported": true,
|
||||
"uuid": "8a6207a1-9fdc-4802-8675-7024480c1f31",
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
399
assets/configs/generated/data/PetPartConfig.json
Normal file
399
assets/configs/generated/data/PetPartConfig.json
Normal file
@@ -0,0 +1,399 @@
|
||||
[
|
||||
{
|
||||
"id": 20001,
|
||||
"name": "舞狮套装",
|
||||
"bundle": "pet-spine",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 20002,
|
||||
"name": "可爱熊套装",
|
||||
"bundle": "pet-spine",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 20003,
|
||||
"name": "格格套装",
|
||||
"bundle": "pet-spine",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 20004,
|
||||
"name": "关二爷套装",
|
||||
"bundle": "pet-spine",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 20501,
|
||||
"name": "舞狮玲珑球",
|
||||
"bundle": "pet-spine",
|
||||
"path": "bag_20501",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 20502,
|
||||
"name": "舞狮帽",
|
||||
"bundle": "pet-spine",
|
||||
"path": "hat_20502",
|
||||
"sourceType": "4"
|
||||
},
|
||||
{
|
||||
"id": 20503,
|
||||
"name": "无",
|
||||
"bundle": "pet-spine",
|
||||
"path": "eye_23001",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 20504,
|
||||
"name": "舞狮领带",
|
||||
"bundle": "pet-spine",
|
||||
"path": "tie_20504",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 20506,
|
||||
"name": "可爱熊挎包",
|
||||
"bundle": "pet-spine",
|
||||
"path": "bag_20506",
|
||||
"sourceType": "2"
|
||||
},
|
||||
{
|
||||
"id": 20507,
|
||||
"name": "可爱熊头饰",
|
||||
"bundle": "pet-spine",
|
||||
"path": "hat_20507",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 20508,
|
||||
"name": "可爱熊面饰",
|
||||
"bundle": "pet-spine",
|
||||
"path": "eye_20508",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 20509,
|
||||
"name": "可爱熊围兜",
|
||||
"bundle": "pet-spine",
|
||||
"path": "tie_20509",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 20511,
|
||||
"name": "关公盾牌",
|
||||
"bundle": "pet-spine",
|
||||
"path": "bag_20511",
|
||||
"sourceType": "3"
|
||||
},
|
||||
{
|
||||
"id": 20512,
|
||||
"name": "关公帽",
|
||||
"bundle": "pet-spine",
|
||||
"path": "hat_20512",
|
||||
"sourceType": "3"
|
||||
},
|
||||
{
|
||||
"id": 20513,
|
||||
"name": "关公眉毛",
|
||||
"bundle": "pet-spine",
|
||||
"path": "eye_20513",
|
||||
"sourceType": "3"
|
||||
},
|
||||
{
|
||||
"id": 20514,
|
||||
"name": "关公胡须",
|
||||
"bundle": "pet-spine",
|
||||
"path": "tie_20514",
|
||||
"sourceType": "3"
|
||||
},
|
||||
{
|
||||
"id": 20515,
|
||||
"name": "青龙刀",
|
||||
"bundle": "pet-spine",
|
||||
"path": "yanyuedao",
|
||||
"sourceType": "3"
|
||||
},
|
||||
{
|
||||
"id": 20516,
|
||||
"name": "格格扇子",
|
||||
"bundle": "pet-spine",
|
||||
"path": "bag_20516",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 20517,
|
||||
"name": "格格帽",
|
||||
"bundle": "pet-spine",
|
||||
"path": "hat_20517",
|
||||
"sourceType": "4"
|
||||
},
|
||||
{
|
||||
"id": 20518,
|
||||
"bundle": "pet-spine",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 20519,
|
||||
"name": "格格围巾",
|
||||
"bundle": "pet-spine",
|
||||
"path": "tie_20519",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 20520,
|
||||
"bundle": "pet-spine",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 21001,
|
||||
"name": "公文背包",
|
||||
"bundle": "pet-spine",
|
||||
"path": "bag_21001",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 21002,
|
||||
"name": "旅行背包(蓝)",
|
||||
"bundle": "pet-spine",
|
||||
"path": "bag_21001",
|
||||
"sourceType": "2"
|
||||
},
|
||||
{
|
||||
"id": 21003,
|
||||
"name": "旅行背包(动画)",
|
||||
"bundle": "pet-spine",
|
||||
"path": "bag_21001",
|
||||
"sourceType": "2"
|
||||
},
|
||||
{
|
||||
"id": 21004,
|
||||
"name": "睡眠抱枕",
|
||||
"bundle": "pet-spine",
|
||||
"path": "bag_21004",
|
||||
"sourceType": "2"
|
||||
},
|
||||
{
|
||||
"id": 21005,
|
||||
"name": "手枪配饰",
|
||||
"bundle": "pet-spine",
|
||||
"path": "bag_21005",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 21006,
|
||||
"name": "游侠钱袋",
|
||||
"bundle": "pet-spine",
|
||||
"path": "bag_21006",
|
||||
"sourceType": "2"
|
||||
},
|
||||
{
|
||||
"id": 21007,
|
||||
"name": "熊猫挎包",
|
||||
"bundle": "pet-spine",
|
||||
"path": "bag_21007",
|
||||
"sourceType": "2"
|
||||
},
|
||||
{
|
||||
"id": 22001,
|
||||
"name": "魔术帽",
|
||||
"bundle": "pet-spine",
|
||||
"path": "hat_22001",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 22002,
|
||||
"name": "魔术帽(变色)",
|
||||
"bundle": "pet-spine",
|
||||
"path": "hat_22001",
|
||||
"sourceType": "2"
|
||||
},
|
||||
{
|
||||
"id": 22003,
|
||||
"name": "魔术帽(动画)",
|
||||
"bundle": "pet-spine",
|
||||
"path": "hat_22001",
|
||||
"sourceType": "2"
|
||||
},
|
||||
{
|
||||
"id": 22004,
|
||||
"bundle": "pet-spine",
|
||||
"path": "hat_22001",
|
||||
"sourceType": "2"
|
||||
},
|
||||
{
|
||||
"id": 22005,
|
||||
"name": "制服帽",
|
||||
"bundle": "pet-spine",
|
||||
"path": "hat_22006",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 22006,
|
||||
"name": "休闲帽",
|
||||
"bundle": "pet-spine",
|
||||
"path": "hat_22003",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 22007,
|
||||
"name": "牛仔帽",
|
||||
"bundle": "pet-spine",
|
||||
"path": "hat_22007",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 23001,
|
||||
"name": "太阳镜(粉)",
|
||||
"bundle": "pet-spine",
|
||||
"path": "eye_23001",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 23002,
|
||||
"name": "简框眼镜",
|
||||
"bundle": "pet-spine",
|
||||
"path": "eye_23002",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 23003,
|
||||
"name": "墨镜",
|
||||
"bundle": "pet-spine",
|
||||
"path": "eye_23003",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 23004,
|
||||
"name": "圆框饰品",
|
||||
"bundle": "pet-spine",
|
||||
"path": "eye_23004",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 23005,
|
||||
"name": "爱心镜框",
|
||||
"bundle": "pet-spine",
|
||||
"path": "eye_23005",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 23006,
|
||||
"name": "竹子墨镜",
|
||||
"bundle": "pet-spine",
|
||||
"path": "eye_23006",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 23007,
|
||||
"name": "睡眠面罩",
|
||||
"bundle": "pet-spine",
|
||||
"path": "eye_23007",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 23008,
|
||||
"name": "搞怪眼镜",
|
||||
"bundle": "pet-spine",
|
||||
"path": "eye_23008",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 23009,
|
||||
"name": "游侠眼饰",
|
||||
"bundle": "pet-spine",
|
||||
"path": "eye_23009",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 23010,
|
||||
"name": "爱心镜框2",
|
||||
"bundle": "pet-spine",
|
||||
"path": "eye_23005",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 23011,
|
||||
"name": "墨镜2",
|
||||
"bundle": "pet-spine",
|
||||
"path": "eye_23003",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 23012,
|
||||
"name": "粉色眼镜2",
|
||||
"bundle": "pet-spine",
|
||||
"path": "eye_23001",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 24001,
|
||||
"name": "粉蝴蝶结",
|
||||
"bundle": "pet-spine",
|
||||
"path": "tie_24001",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 24002,
|
||||
"name": "紫蝴蝶结",
|
||||
"bundle": "pet-spine",
|
||||
"path": "tie_24002",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 24003,
|
||||
"name": "制服领结",
|
||||
"bundle": "pet-spine",
|
||||
"path": "tie_24004",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 24004,
|
||||
"name": "熊猫领结",
|
||||
"bundle": "pet-spine",
|
||||
"path": "tie_24003",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 24005,
|
||||
"name": "制服领带",
|
||||
"bundle": "pet-spine",
|
||||
"path": "tie_24005",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 24006,
|
||||
"name": "金项链",
|
||||
"bundle": "pet-spine",
|
||||
"path": "tie_24006",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 24007,
|
||||
"name": "牛仔围巾",
|
||||
"bundle": "pet-spine",
|
||||
"path": "tie_24007",
|
||||
"sourceType": "1"
|
||||
},
|
||||
{
|
||||
"id": 25001,
|
||||
"name": "闪闪糖葫芦",
|
||||
"bundle": "pet-spine",
|
||||
"path": "tanghulu",
|
||||
"sourceType": "0"
|
||||
},
|
||||
{
|
||||
"id": 25002,
|
||||
"name": "青龙刀",
|
||||
"bundle": "pet-spine",
|
||||
"path": "yanyuedao",
|
||||
"sourceType": "3"
|
||||
},
|
||||
{
|
||||
"id": 25003,
|
||||
"name": "爱心信件",
|
||||
"bundle": "pet-spine",
|
||||
"path": "qingshu",
|
||||
"sourceType": "0"
|
||||
}
|
||||
]
|
||||
11
assets/configs/generated/data/PetPartConfig.json.meta
Normal file
11
assets/configs/generated/data/PetPartConfig.json.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"ver": "2.0.1",
|
||||
"importer": "json",
|
||||
"imported": true,
|
||||
"uuid": "2dfc8295-5211-42cf-85cb-64addd429a7e",
|
||||
"files": [
|
||||
".json"
|
||||
],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
Reference in New Issue
Block a user