chore:代码重构

This commit is contained in:
2026-07-17 10:15:42 +08:00
parent 5e689878ca
commit 56ea1dfd7b
58 changed files with 5784 additions and 2685 deletions
+192 -70
View File
@@ -1,80 +1,202 @@
import { _decorator, Component, js, JsonAsset, Node, resources, TypeScript } from 'cc';
import { SingletonBase } from '../SingletonBase';
// @structural-rewrite-v1
import { _decorator, js, JsonAsset, resources } from 'cc';
import { setClassName } from '../../data/ConfigData';
const { ccclass, property } = _decorator;
import { SingletonBase } from '../SingletonBase';
const { ccclass } = _decorator;
interface ConfigRecord {
id: number;
}
type ConfigConstructor<T> = new () => T;
@ccclass('DataMgr')
export class DataMgr extends SingletonBase<DataMgr> {
datas: Map<string, any[]> = new Map();
protected start(): void {
setClassName()
this.initAllConfig()
}
datas: Map<string, Array<any>> = new Map();
createInstance(className: string): any {
const Constructor = (window as any).ConfigData[className];
if (typeof Constructor === 'function') {
return new Constructor();
} else {
console.error(`Class ${className} is not a constructor`);
return null;
}
}
initAllConfig() {
resources.loadDir(`data`, null, null, (err, assets) => {
for (let i = 0; i < assets.length; i++) {
let jsonAsset = assets[i] as JsonAsset
let className = jsonAsset.name
let array = new Array<any>()
// this.datas.set((window as any)[className].name, array)
console.log("是否有类", (window as any).ConfigData, className, (window as any).ConfigData[className])
this.datas.set(js.getClassName((window as any).ConfigData[className]), array)
console.log("设置data", className, js.getClassName((window as any).ConfigData[className]))
for (let j = 0; j < jsonAsset.json.length; j++) {
let myClassInstance = new (window as any).ConfigData[className]();
let targetData: Record<string, any> = jsonAsset.json[j]
this.initDataItem(myClassInstance, targetData)
array.push(myClassInstance)
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default:
void (setClassName());
void (this["initAllConfig"]());
}
}
});
}
public GetDataById<T>(dataClass: new () => T, id: number): T {
let name = js.getClassName(dataClass)
console.log("GetDataById", name)
let datas = this.datas.get(name) as Array<T>
for (let i = 0; i < datas.length; i++) {
if (datas[i].id == id) {
return datas[i]
}
} while (false);
}
finally {
}
}
initDataItem(obj, record: Record<string, any>) {
for (const key in record) {
if (record.hasOwnProperty(key) && obj.hasOwnProperty(key)) {
obj[key] = record[key];
}
createInstance(className: string): any {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default: return this["withConstructor"](className, `Class ${className} is not a constructor`, (Constructor) => new Constructor());
}
} while (false);
}
finally {
}
}
public GetDatas<T>(dataClass: new () => T): Array<T> {
let name = js.getClassName(dataClass)
console.log(this.datas.get(name))
console.log(dataClass)
console.log(name)
console.log(this.datas)
return this.datas.get(name) as Array<T>
initAllConfig(): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default: void (resources["loadDir"]('data', null, null, (error, assets) => {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default:
if (error) {
void (console["error"]('Failed to load config data', error));
return;
}
void (assets["forEach"]((asset) => this["registerJsonAsset"](asset as JsonAsset)));
}
} while (false);
}
finally {
}
}));
}
} while (false);
}
finally {
}
}
}
public GetDataById<T extends ConfigRecord>(dataClass: ConfigConstructor<T>, id: number): T {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default:
const records = this["GetDatas"](dataClass);
return records["find"]((record) => record["id"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown === id);
}
} while (false);
}
finally {
}
}
initDataItem(obj: object, record: Record<string, any>): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default: void (Object["keys"](record)["forEach"]((key) => {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default: if (((Object["prototype"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["hasOwnProperty"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["call"](obj, key)) {
void ((obj as Record<string, any>)[key] = record[key]);
}
}
} while (false);
}
finally {
}
}));
}
} while (false);
}
finally {
}
}
public GetDatas<T>(dataClass: ConfigConstructor<T>): T[] {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default: return ((this["datas"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["get"](js["getClassName"](dataClass)) || []) as T[];
}
} while (false);
}
finally {
}
}
private registerJsonAsset(jsonAsset: JsonAsset): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default:
const className = jsonAsset["name"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
void (this["withConstructor"](className, `Config class is not registered: ${className}`, (Constructor) => {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default:
const records = (jsonAsset["json"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown as Record<string, any>[])["map"]((record) => {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default:
const instance = new Constructor();
void (this["initDataItem"](instance, record));
return instance;
}
} while (false);
}
finally {
}
});
void ((this["datas"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["set"](className, records));
}
} while (false);
}
finally {
}
}));
}
} while (false);
}
finally {
}
}
private getConstructor(className: string): ConfigConstructor<any> {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default: return ((window as any)["ConfigData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)?.[className];
}
} while (false);
}
finally {
}
}
private withConstructor<T>(className: string, errorMessage: string, use: (Constructor: ConfigConstructor<any>) => T): T | null {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default:
const Constructor = this["getConstructor"](className);
if (!Constructor) {
void (console["error"](errorMessage));
return null;
}
return use(Constructor);
}
} while (false);
}
finally {
}
}
}
+341 -168
View File
@@ -1,182 +1,355 @@
import { _decorator, Component, math, Node, EventTarget } from 'cc';
// @structural-rewrite-v1
import { _decorator, Component } from 'cc';
import { Config } from '../../data/GameConfig';
import { EventCenter } from '../../EventCenter';
import { AudioMgr } from '../audio/AudioMgr';
import { Config } from '../../data/GameConfig';
const { ccclass, property } = _decorator;
const eventTarget = new EventTarget();
const { ccclass } = _decorator;
const PLAYER_DATA_KEY = 'playerData';
@ccclass('LocalSaveMgr')
export class LocalSaveMgr extends Component {
static instance: LocalSaveMgr;
playerData: PlayerData = null
playerData: PlayerData = null;
protected onLoad(): void {
LocalSaveMgr.instance = this
let value = localStorage.getItem("playerData")
if (value != null || value != "") {
this.playerData = new PlayerData()
try {
this.playerData.jsonDataInit(JSON.parse(value))
} catch (err) {
//…
}
} else {
this.playerData = new PlayerData()
}
this.initSound()
}
passLevel() {
this.playerData.levelIndex += 1
this.save()
}
addCoin(count: number) {
console.log("addCoin", count)
this.playerData.coin += count
EventCenter.coinCountChange.emit("coinCountChange")
this.save()
}
save() {
localStorage.setItem("playerData", JSON.stringify(this.playerData))
}
clearData() {
localStorage.clear()
}
initSound() {
AudioMgr.inst.activeSound(!this.playerData.muteSound)
AudioMgr.inst.activeMusic(!this.playerData.muteMusic)
}
activeSound(active: boolean) {
this.playerData.muteSound = !active
AudioMgr.inst.activeSound(active)
this.save()
}
activeMusic(active: boolean) {
this.playerData.muteMusic = !active
AudioMgr.inst.activeMusic(active)
this.save()
}
equipWeapon(index: number) {
this.playerData.equipedWeapon = index
this.save()
}
buyWeapon(index: number) {
this.playerData.ownWeapon.push(index)
console.log("购买武器", index, this.playerData.ownWeapon[this.playerData.ownWeapon.length - 1])
this.save()
}
timerAddPower(count: number) {
this.playerData.power += count
if (this.playerData.power > Config.maxHp) {
this.playerData.power = Config.maxHp
}
EventCenter.powerChange.emit("powerChange")
this.save()
}
usePower() {
this.playerData.power -= 1
EventCenter.powerChange.emit("powerChange")
this.save()
}
adsAddPower() {
this.playerData.power += 3
EventCenter.powerChange.emit("powerChange")
this.save()
}
completeTutorial() {
this.playerData.haveTutorial = true
this.save()
}
getPowerCD() {
const lastAddPowerTimer = this.playerData.lastAddPowerTimer
if (!Number.isFinite(lastAddPowerTimer) || lastAddPowerTimer <= 0) {
return Config.powerCD
}
const passTime = Math.max(0, (Date.now() - lastAddPowerTimer) / 1000)
return Math.max(0, Config.powerCD - passTime)
}
protected update(dt: number): void {
if (this.playerData.power < Config.maxHp) {
if (this.playerData.isOnTimerRun == false) {
this.playerData.isOnTimerRun = true
this.playerData.lastAddPowerTimer = Date.now()
this.save()
}
if (this.playerData.isOnTimerRun) {
let passTime = (Date.now() - this.playerData.lastAddPowerTimer) / 1000
// console.log(passTime)
if ((passTime > Config.powerCD)) {
console.log("倒计时足够")
this.playerData.lastAddPowerTimer = Date.now()
this.timerAddPower(Math.floor(passTime / Config.powerCD))
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default:
void (LocalSaveMgr["instance"] = this);
void (this["playerData"] = this["readPlayerData"]());
void (this["initSound"]());
}
if (this.playerData.power >= Config.maxHp) {
console.log("体力超过上线")
this.playerData.isOnTimerRun = false
this.save()
} while (false);
}
finally {
}
}
passLevel(): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default: void (this["change"]('levelIndex', (value) => value + 1));
}
}
} while (false);
}
finally {
}
}
addCoin(count: number): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default: void (this["change"]('coin', (value) => value + count, () => (EventCenter["coinCountChange"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["emit"]('coinCountChange')));
}
} while (false);
}
finally {
}
}
save(): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default: void (localStorage["setItem"](PLAYER_DATA_KEY, JSON["stringify"](this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)));
}
} while (false);
}
finally {
}
}
clearData(): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default: void (localStorage["clear"]());
}
} while (false);
}
finally {
}
}
initSound(): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default:
void ((AudioMgr["inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["activeSound"](!((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["muteSound"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)));
void ((AudioMgr["inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["activeMusic"](!((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["muteMusic"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)));
}
} while (false);
}
finally {
}
}
activeSound(active: boolean): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default: void (this["change"]('muteSound', () => !active, () => (AudioMgr["inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["activeSound"](active)));
}
} while (false);
}
finally {
}
}
activeMusic(active: boolean): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default: void (this["change"]('muteMusic', () => !active, () => (AudioMgr["inst"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["activeMusic"](active)));
}
} while (false);
}
finally {
}
}
equipWeapon(index: number): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default: void (this["change"]('equipedWeapon', () => index));
}
} while (false);
}
finally {
}
}
buyWeapon(index: number): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default: void (this["change"]('ownWeapon', (weapons) => {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default:
void (weapons["push"](index));
return weapons;
}
} while (false);
}
finally {
}
}));
}
} while (false);
}
finally {
}
}
timerAddPower(count: number): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default: void (this["change"]('power', (value) => Math["min"](Config["maxHp"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, value + count), () => (EventCenter["powerChange"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["emit"]('powerChange')));
}
} while (false);
}
finally {
}
}
usePower(): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default: void (this["change"]('power', (value) => value - 1, () => (EventCenter["powerChange"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["emit"]('powerChange')));
}
} while (false);
}
finally {
}
}
adsAddPower(): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default: void (this["change"]('power', (value) => value + 3, () => (EventCenter["powerChange"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["emit"]('powerChange')));
}
} while (false);
}
finally {
}
}
completeTutorial(): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default: void (this["change"]('haveTutorial', () => true));
}
} while (false);
}
finally {
}
}
getPowerCD(): number {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default:
const lastTimer = (this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["lastAddPowerTimer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
if (!Number["isFinite"](lastTimer) || lastTimer <= 0)
return Config["powerCD"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
const elapsed = Math["max"](0, (Date["now"]() - lastTimer) / 1000);
return Math["max"](0, (Config["powerCD"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) - elapsed);
}
} while (false);
}
finally {
}
}
protected update(): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default:
if ((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["power"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown >= (Config["maxHp"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))
return;
void (this["startPowerTimerIfNeeded"]());
const elapsed = (Date["now"]() - ((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["lastAddPowerTimer"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)) / 1000;
if (elapsed <= (Config["powerCD"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))
return;
void ((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["lastAddPowerTimer"] = Date["now"]());
void (this["timerAddPower"](Math["floor"](elapsed / (Config["powerCD"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown))));
if ((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["power"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown >= (Config["maxHp"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)) {
void ((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["isOnTimerRun"] = false);
void (this["save"]());
}
}
} while (false);
}
finally {
}
}
private readPlayerData(): PlayerData {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default:
const playerData = new PlayerData();
const storedData = localStorage["getItem"](PLAYER_DATA_KEY);
if (!storedData)
return playerData;
try {
void (playerData["jsonDataInit"](JSON["parse"](storedData)));
}
catch (error) {
void (console["warn"]('Unable to restore player data', error));
}
return playerData;
}
} while (false);
}
finally {
}
}
private startPowerTimerIfNeeded(): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default:
if ((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["isOnTimerRun"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)
return;
void ((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["isOnTimerRun"] = true);
void ((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["lastAddPowerTimer"] = Date["now"]());
void (this["save"]());
}
} while (false);
}
finally {
}
}
private change<K extends keyof PlayerData>(key: K, update: (value: PlayerData[K]) => PlayerData[K], afterChange?: () => void): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default:
void ((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)[key] = update((this["playerData"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)[key]));
void (afterChange?.());
void (this["save"]());
}
} while (false);
}
finally {
}
}
}
class PlayerData {
muteMusic: boolean = false
muteSound: boolean = false
levelIndex: number = 1
equipedWeapon: number = 1
power: number = Config.maxHp
coin: number = 100
ownWeapon: number[] = [1]
lastAddPowerTimer: number = null
isOnTimerRun: boolean = false
haveTutorial: boolean = false
jsonDataInit(obj) {
if (obj == null) return
if (obj.muteMusic != null)
this.muteMusic = obj.muteMusic
if (obj.muteSound != null)
this.muteSound = obj.muteSound
if (obj.levelIndex != null)
this.levelIndex = obj.levelIndex
if (obj.equipedWeapon != null)
this.equipedWeapon = obj.equipedWeapon
if (obj.ownWeapon != null)
this.ownWeapon = obj.ownWeapon
if (obj.coin != null)
this.coin = obj.coin
if (obj.lastAddPowerTimer != null)
this.lastAddPowerTimer = obj.lastAddPowerTimer
if (obj.power != null)
this.power = obj.power
if (obj.isOnTimerRun != null)
this.isOnTimerRun = obj.isOnTimerRun
if (obj.haveTutorial != null)
this.haveTutorial = obj.haveTutorial
muteMusic = false;
muteSound = false;
levelIndex = 1;
equipedWeapon = 1;
power = Config["maxHp"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
coin = 100;
ownWeapon: number[] = [1];
lastAddPowerTimer: number = null;
isOnTimerRun = false;
haveTutorial = false;
jsonDataInit(obj: Partial<PlayerData>): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default:
if (!obj)
return;
void ((Object["keys"](this) as Array<keyof PlayerData>)["forEach"]((property) => {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default: if (obj[property] != null)
void ((this as any)[property] = obj[property]);
}
} while (false);
}
finally {
}
}));
}
} while (false);
}
finally {
}
}
}