fix(event): finalize event reference changes

This commit is contained in:
unanmed 2026-09-09 13:03:42 +08:00
parent 64efcf2555
commit 63d4d37ff3
3 changed files with 36 additions and 23 deletions

View File

@ -54,8 +54,6 @@ export class MapLayer
/** 图层参考基准,用于存档压缩对比 */
private refArray: Uint32Array | null = null;
//#region 点事件操作
/** 点事件视图key = y * width + x */
private readonly pointEvents: Map<number, ILayerEventView> = new Map();
@ -125,6 +123,8 @@ export class MapLayer
this.posTileMap.delete(tile);
}
//#region 点事件操作
/**
*
* @param tile

View File

@ -94,6 +94,11 @@ export interface IReadonlyEventView {
*/
get(): ReadonlyMap<number, string>;
/**
*
*/
ref(): ReadonlyMap<number, string>;
/**
*
*/

View File

@ -25,10 +25,36 @@ export class EventExecutor implements IGameEventExecutor {
this.reduce = reduce;
}
/**
*
* @param mode
* @param results
*/
private reduceResults(mode: EventReduceMode, results: any[]): any {
if (mode === EventReduceMode.OrReduce) {
return results.reduce((prev, curr) => {
if (typeof curr !== 'boolean') {
logger.warn(172, String(curr));
}
return prev || curr;
}, false);
} else if (mode === EventReduceMode.AndReduce) {
return results.reduce((prev, curr) => {
if (typeof curr !== 'boolean') {
logger.warn(172, String(curr));
}
return prev && curr;
}, true);
} else {
return results;
}
}
async execute<R = void>(
events: IGameEventInvocation[],
param: IBlockEventParam
): Promise<R> {
// 事件执行
const results: any[] = [];
for (const invocation of events) {
const id = invocation.id;
@ -47,13 +73,9 @@ export class EventExecutor implements IGameEventExecutor {
if (event.trigger !== invocation.env.trigger) continue;
const result = await event.execute(param, invocation.env);
if (
this.reduce !== EventReduceMode.NoReduce &&
typeof result !== 'boolean'
) {
logger.warn(172, String(result));
}
results.push(result);
// 执行模式
if (this.mode === EventExecuteMode.CutIfFalsy && !result) {
break;
} else if (this.mode === EventExecuteMode.CutIfTruthy && result) {
@ -61,20 +83,6 @@ export class EventExecutor implements IGameEventExecutor {
}
}
let reduced: any = results;
if (this.reduce === EventReduceMode.OrReduce) {
reduced = false;
for (const result of results) {
reduced ||= result;
if (reduced) break;
}
} else if (this.reduce === EventReduceMode.AndReduce) {
reduced = true;
for (const result of results) {
reduced &&= result;
if (!reduced) break;
}
}
return reduced;
return this.reduceResults(this.reduce, results);
}
}