feat: Добавлена обработка столкновения ракетки и бонуса, логика обработки бонусов подключена в tick
This commit is contained in:
+48
@@ -2,6 +2,7 @@ import { Container, Graphics } from 'pixi.js';
|
||||
import { Ball } from './entities/ball/ball';
|
||||
import { Brick } from './entities/brick/brick';
|
||||
import { Paddle } from './entities/paddle/paddle';
|
||||
import { Perk } from './entities/perk/perk';
|
||||
import { Game } from './game';
|
||||
|
||||
/**
|
||||
@@ -39,6 +40,22 @@ function createBrickView(brick) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Создает визуальное отображение бонуса с помощью Pixi.js
|
||||
* @param {Perk} perk экземпляр класса бонус
|
||||
* @returns {Graphics} графическое отображение бонуса
|
||||
*/
|
||||
function createPerkView(perk) {
|
||||
const perkView = new Graphics().rect(0, 0, perk.width, perk.height);
|
||||
|
||||
switch (perk.type) {
|
||||
case 'slow':
|
||||
return perkView.fill('#00ffff');
|
||||
default:
|
||||
return perkView.fill('#ffffff');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Создает визуальное отображение всех сущностей в игре с помощью Pixi.js и добавляет в контейнер
|
||||
* @param {Game} game экземпляр класса игра
|
||||
@@ -62,6 +79,7 @@ export function createGameView(game, container) {
|
||||
ball,
|
||||
paddle,
|
||||
bricks,
|
||||
perks: new Map(),
|
||||
};
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
@@ -69,6 +87,30 @@ export function createGameView(game, container) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Создает отображения для новых бонусов и удаляет отображения исчезнувших
|
||||
* @param {object} views объект с визуальными отображениями сущностей игры
|
||||
* @param {Game} game экземпляр класса игра
|
||||
* @param {Container} container экземпляр класса контейнер Pixi.js
|
||||
*/
|
||||
export function managePerkViewsLifetime(views, game, container) {
|
||||
for (const [perk, perkView] of views.perks) {
|
||||
if (!game.perks.includes(perk)) {
|
||||
container.removeChild(perkView);
|
||||
perkView.destroy();
|
||||
views.perks.delete(perk);
|
||||
}
|
||||
}
|
||||
|
||||
for (const perk of game.perks) {
|
||||
if (!views.perks.has(perk)) {
|
||||
const perkView = createPerkView(perk);
|
||||
container.addChild(perkView);
|
||||
views.perks.set(perk, perkView);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Синхронизирует отображение сущностей Pixi.js с логикой игры (координаты и тд.)
|
||||
* @param {object} views объект с визуальными отображениями сущностей игры
|
||||
@@ -93,6 +135,12 @@ export function syncronizeViewsWithGame(views, game) {
|
||||
brickView.y = brick.y;
|
||||
brickView.visible = brick.alive;
|
||||
}
|
||||
|
||||
for (const perk of game.perks) {
|
||||
const perkView = views.perks.get(perk);
|
||||
perkView.x = perk.x;
|
||||
perkView.y = perk.y;
|
||||
}
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user