mirror of
https://github.com/motajs/template.git
synced 2026-09-19 13:40:18 +08:00
fix(07-02): #06-03-1 resolve the reuse mapping in enemy creation
- createEnemy/createEnemyById now resolve prefabs through internalGetPrefab, matching getPrefab/deletePrefab/modifyPrefabAttribute behaviour - add a Chinese invariant comment above createEnemyById covering all code/id prefab entry points - un-skip the two correct-expectation reuse mapping cases in manager.test.ts (assertions unchanged) and sync their Chinese comments
This commit is contained in:
parent
657d9720af
commit
b70ccbd5f6
@ -268,8 +268,8 @@ describe('EnemyManager reuse mapping', () => {
|
||||
expect(manager.getPrefabById('missing-reuse')).toBeNull();
|
||||
});
|
||||
|
||||
// 疑似 bug:createEnemy/createEnemyById 未走复用映射,详见 06-TEST-FINDINGS.md #06-03-1,修复后取消 skip
|
||||
it.skip('creates enemies for reused codes and ids through the reuse mapping', () => {
|
||||
// 验证 createEnemy 按复用 code 解析到来源模板并生成独立怪物
|
||||
it('creates enemies for reused codes and ids through the reuse mapping', () => {
|
||||
const manager = createManager();
|
||||
manager.addPrefab(createPrefab(1, 'slime'));
|
||||
manager.reusePrefab(1, 100, 'slime-reuse');
|
||||
@ -278,8 +278,8 @@ describe('EnemyManager reuse mapping', () => {
|
||||
expect(manager.createEnemyById('slime-reuse')!.id).toBe('slime');
|
||||
});
|
||||
|
||||
// 疑似 bug:复用映射未接入 createEnemy/createEnemyById,四朝向复用同一模板各自生成独立怪物的链路不可用,详见 06-TEST-FINDINGS.md #06-03-1,修复后取消 skip
|
||||
it.skip('creates four independent enemies from one prefab reused by four facing codes', () => {
|
||||
// 验证同一模板经四个朝向 code 复用后,创建的怪物互相独立且不影响来源模板
|
||||
it('creates four independent enemies from one prefab reused by four facing codes', () => {
|
||||
const manager = createManager();
|
||||
manager.addPrefab(createPrefab(1, 'slime'));
|
||||
manager.reusePrefab(1, 100, 'slime-up');
|
||||
|
||||
@ -117,13 +117,15 @@ export class EnemyManager<TEnemy> implements IEnemyManager<TEnemy> {
|
||||
}
|
||||
|
||||
createEnemy(code: number): IEnemy<TEnemy> | null {
|
||||
const prefab = this.prefabByCode.get(code);
|
||||
const prefab = this.internalGetPrefab(code);
|
||||
if (!prefab) return null;
|
||||
return prefab.clone();
|
||||
}
|
||||
|
||||
// 不变式:所有按 code/id 取模板的公开入口都必须经 internalGetPrefab 解析复用映射,
|
||||
// 复用映射把同一模板的多个朝向 code 别名到来源模板,绕过解析会让这些 code 取不到模板
|
||||
createEnemyById(id: string): IEnemy<TEnemy> | null {
|
||||
const prefab = this.prefabById.get(id);
|
||||
const prefab = this.internalGetPrefab(id);
|
||||
if (!prefab) return null;
|
||||
return prefab.clone();
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user