refactor: 怪物管理器存档

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
AncTeandCopilot committed 2026-04-24 22:17:01 +08:00
1 parent 8c1becc9f1
commit 2ce50bf23e
7 files changed
+464 -21

No files matched your search

@@ -2,10 +2,12 @@ import { logger } from '@motajs/common';
import {
IEnemy,
IEnemyContext,
IEnemySaveState,
IReadonlyEnemy,
ISpecial,
IEnemyView
} from './types';
import { SaveCompression } from '../common/types';
export class Enemy<TAttr> implements IEnemy<TAttr> {
/** 怪物身上的特殊属性列表 */
@@ -87,6 +89,29 @@ export class Enemy<TAttr> implements IEnemy<TAttr> {
this.addSpecial(special.clone());
}
}
saveState(_compression: SaveCompression): IEnemySaveState<TAttr> {
const specials: Map<number, unknown> = new Map();
for (const special of this.specials) {
specials.set(special.code, special.saveState(_compression));
}
return { attrs: structuredClone(this.attributes), specials };
}
loadState(
state: IEnemySaveState<TAttr>,
compression: SaveCompression
): void {
this.attributes = structuredClone(state.attrs);
for (const special of this.specials) {
const saved = state.specials.get(special.code);
if (saved === undefined) {
logger.warn(120, special.code.toString(), this.id);
continue;
}
special.loadState(saved, compression);
}
}
}
export class EnemyView<TAttr> implements IEnemyView<TAttr> {