feat: animate after booped
This commit is contained in:
parent
2f0fb2bca8
commit
acb2fc82ba
|
|
@ -0,0 +1 @@
|
||||||
|
!node_modules
|
||||||
|
|
@ -51,6 +51,7 @@ const placeCommand = registry.register( 'place <row:number> <col:number> <player
|
||||||
async function boop(game: BoopGame, row: number, col: number, type: PieceType) {
|
async function boop(game: BoopGame, row: number, col: number, type: PieceType) {
|
||||||
const booped: string[] = [];
|
const booped: string[] = [];
|
||||||
|
|
||||||
|
const toRemove = new Set<string>();
|
||||||
await game.produceAsync((state: BoopState) => {
|
await game.produceAsync((state: BoopState) => {
|
||||||
// 按照远离放置位置的方向推动
|
// 按照远离放置位置的方向推动
|
||||||
for (const [dr, dc] of getNeighborPositions()) {
|
for (const [dr, dc] of getNeighborPositions()) {
|
||||||
|
|
@ -73,8 +74,9 @@ async function boop(game: BoopGame, row: number, col: number, type: PieceType) {
|
||||||
// 检查新位置是否为空或在棋盘外
|
// 检查新位置是否为空或在棋盘外
|
||||||
if (!isInBounds(newRow, newCol)) {
|
if (!isInBounds(newRow, newCol)) {
|
||||||
// 棋子被推出棋盘,返回玩家supply
|
// 棋子被推出棋盘,返回玩家supply
|
||||||
|
toRemove.add(part.id);
|
||||||
booped.push(part.id);
|
booped.push(part.id);
|
||||||
moveToRegion(part, state.regions.board, state.regions[part.player]);
|
moveToRegion(part, state.regions.board, state.regions.board, [newRow, newCol]);
|
||||||
} else if (!isCellOccupied(state, newRow, newCol)) {
|
} else if (!isCellOccupied(state, newRow, newCol)) {
|
||||||
// 新位置为空,移动过去
|
// 新位置为空,移动过去
|
||||||
booped.push(part.id);
|
booped.push(part.id);
|
||||||
|
|
@ -83,6 +85,13 @@ async function boop(game: BoopGame, row: number, col: number, type: PieceType) {
|
||||||
// 如果新位置被占用,则不移动(两个棋子都保持原位)
|
// 如果新位置被占用,则不移动(两个棋子都保持原位)
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
await game.produceAsync((state: BoopState) => {
|
||||||
|
// 移除被吃掉的棋子
|
||||||
|
for (const partId of toRemove) {
|
||||||
|
const part = state.pieces[partId];
|
||||||
|
moveToRegion(part, state.regions.board, state.regions[part.player]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
return { booped };
|
return { booped };
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,13 +22,14 @@ class BoopPartSpawner implements Spawner<BoopPart, Phaser.GameObjects.Container>
|
||||||
const x = BOARD_OFFSET.x + col * CELL_SIZE + CELL_SIZE / 2;
|
const x = BOARD_OFFSET.x + col * CELL_SIZE + CELL_SIZE / 2;
|
||||||
const y = BOARD_OFFSET.y + row * CELL_SIZE + CELL_SIZE / 2;
|
const y = BOARD_OFFSET.y + row * CELL_SIZE + CELL_SIZE / 2;
|
||||||
|
|
||||||
this.scene.tweens.add({
|
const tween = this.scene.tweens.add({
|
||||||
targets: obj,
|
targets: obj,
|
||||||
x: x,
|
x: x,
|
||||||
y: y,
|
y: y,
|
||||||
duration: 200,
|
duration: 200,
|
||||||
ease: 'Power2',
|
ease: 'Power2',
|
||||||
});
|
});
|
||||||
|
this.scene.addTweenInterruption(tween);
|
||||||
}
|
}
|
||||||
|
|
||||||
onSpawn(part: BoopPart) {
|
onSpawn(part: BoopPart) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue