diff --git a/src/config.js b/src/config.js index 85861db..14bae67 100644 --- a/src/config.js +++ b/src/config.js @@ -3,6 +3,9 @@ export const CONTAINER_HEIGHT = 600; export const PADDLE_WIDTH = 50; export const PADDLE_HEIGHT = 10; +export const MIN_PADDLE_REFLECTION_ANGLE = 20; +export const MAX_PADDLE_REFLECTION_ANGLE = 160; +export const PADDLE_SECTOR_AMOUNT = 20; export const BALL_RADIUS = 10; export const BALL_SPEED = 3; diff --git a/src/lib/tick/tick.js b/src/lib/tick/tick.js index 95ac1f8..bab86bc 100644 --- a/src/lib/tick/tick.js +++ b/src/lib/tick/tick.js @@ -1,7 +1,15 @@ -import { CONTAINER_HEIGHT, CONTAINER_WIDTH } from '../../config'; +import { + BALL_SPEED, + CONTAINER_HEIGHT, + CONTAINER_WIDTH, + MAX_PADDLE_REFLECTION_ANGLE, + MIN_PADDLE_REFLECTION_ANGLE, + PADDLE_SECTOR_AMOUNT, +} from '../../config'; import { Game } from '../../game'; import { calculateCollision } from '../calculateCollision/calculateCollision'; import { calculateDirection } from '../calculateDirection/calculateDirection'; +import { processReflection } from '../processReflection/processReflection'; /** * Функция для вычисления взаимодействий сущностей игры в зависимости от времени из Ticker @@ -92,15 +100,15 @@ export function tick(game, containerWidth, containerHeight, deltaTime) { } } - // Базоввое взаимодействие мяча и ракетки - if ( - ball.verticalSpeed > 0 && - ball.y + ball.radius >= paddle.y && - ball.x >= paddle.x && - ball.x <= paddle.x + paddle.width - ) { - ball.verticalSpeed *= -1; - } + // Взаимодействие мяча и ракетки - обновление горизонтальной и вертикальной скорости в зависимости от сектора попадания + processReflection( + paddle, + ball, + PADDLE_SECTOR_AMOUNT, + MIN_PADDLE_REFLECTION_ANGLE, + MAX_PADDLE_REFLECTION_ANGLE, + BALL_SPEED, + ); } catch (err) { console.error(err); return null;