Попробуйте рассмотреть такой вариант.
Если к каждой ячейке cell добавить еще поле clickHandler, сильно хуже ей не станет
private setEvent(): void {
const cellClick = (cell: Cell) => {
if (this.occupiedCells.has(cell)) {
console.log('DESTROY');
} else {
console.log('empty');
}
};
this.engine.on(this.shovelNode, 'click', (e) => {
this.toggleState();
this.engine.events.click.eventBubbling = !!this.isActive;
if (this.isActive) {
this.cells.forEach((cellRow) => cellRow.forEach((cell) => {
cell.clickHandler = () => cellClick(cell)
this.engine.on(cell.node, 'click', cell.clickHandler);
}));
} else {
this.cells.forEach((cellRow) => cellRow.forEach((cell) => {
this.engine.off(cell.node, 'click', cell.clickHandler);
}));
}
});
}
Я, конечно не совсем представляю, что такое на самом деле
this.engine.on(cell.node, 'click', () => cellClick(cell));
Но если это просто
cell.node.addEventListener(‘click’, () => cellClick(cell))
то можно просто
cell.node.onclick = () => cellClick(cell)
и
cell.node.onclick = null