-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[SOK-21] start game page #11
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Крутая работа.
Лоадер выглядит круто!
Система спрайтов тоже выглядит удобно.
Компоненты для иконок тоже классно смотрятся.
Возможно только чуть пугает система инпут контролла. Так как ее явно стоит согласовать с прототипом игры.
const handleKey = (event: KeyboardEvent) => { | ||
const isKeydown = event.type === 'keydown' | ||
|
||
switch (event.key) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Выглядит так, что начинаем жестко зависить от нажатых кнопок. Подобную проблему вижу так же с PR с прототипом игры: https://github.com/Timur233/falcon-tanks/pull/9/files/ab6292a0ce91ace230faa7b4238b6a4a7d31c813#diff-dddbaaf61c004c44b0c8710b18b527e19ddc2fdc04759c5d1037e6e53627a491
Возможно нам стоит придумать единый механизм отслеживания нажатий кнопок и систему подписок событий на это (аля эвентбас как из первого модуля, но в реалиях реакта).
Плюс тут обрабатываются не все способы управления. Потенциально wasd тоже ожидаемое поведение.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ты прав.
Тут добавил отслеживание кнопок только для примера, в итоге буду использовать то решение которое будет финальное в игре.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
В таком случае возможно стоит это поменить TODO:
или типо того, чтобы не смушать при резолве конфликтов.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Сделал
|
||
useEffect(() => { | ||
const handleKey = (event: KeyboardEvent) => { | ||
const isKeydown = event.type === 'keydown' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Может быть лучше event.preventDefault()
лучше сразу тут делать? Чтобы не пробрасывать event
в toggleButton()
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Мне не нужно сбрасывать событие на все кнопки, а так как функция только для примера, не стал раздувать case.))
import './Modal.scss' | ||
|
||
type ModalPropsType = { | ||
show?: boolean |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Выглядит вроде как обязательный пропс. Внутри это значение вроде нельзя изменить, значит и открыться оно иначе никак не может.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Исправил
children: React.ReactNode | ||
} | ||
|
||
export const Modal = (props: ModalPropsType) => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Я слышал про вроде как уже доступный API для поповеров.
https://doka.guide/html/popover/
Может быть лучше обернуть это в него? Вроде как это становится стандартом.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Пока не буду это делать, может быть позже реализуем.
inset: 0; | ||
z-index: -1; | ||
|
||
&::before { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Мб быть тут тоже в миксин засунуть, как ты это раньше делал?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Сделал.
align-items: center; | ||
justify-content: center; | ||
inset: 0; | ||
z-index: 10; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Я вот думаю, не может ли стать проблемой, что при лоадере перекрывается возможность клацать в меню?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Нет, но вот кнопку аварийного закрытия можно сделать. Сегодня сделаю
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Кнопка "закрыть" будет появляться через 5 секунд после отрытия лоадера.
@@ -0,0 +1,18 @@ | |||
import './Loader.scss' | |||
import LoaderGif from '@/assets/images/loader.png' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Не было опыта, а нормально что расширение png?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Да вполне норм. В поддержке только нет старых ie
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Отличная работа! В основном никаких замечаний и пожеланий нет, немного смутил один момент со svg-спрайтом.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Мне нравится, я в целом не очень опытный в ревью, а во фронте вообще, по-моему здорово!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Четко, классно!
packages/client/src/scss/vars.scss
Outdated
@@ -38,6 +41,7 @@ $red-ligth-gradient: radial-gradient(#fc2204 -40%, transparent 70%); | |||
$main-text-shadow: 1px 0 $c_black, -1px 0 $c_black, 0 1px $c_black, | |||
0 -1px $c_black, 1px 1px $c_black, -1px -1px $c_black, 1px -1px $c_black, | |||
-1px 1px $c_black; | |||
$overlay-color: #000000bd; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Опечатка? Или фича?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Отличная работа! Выглядит круто! Замечаний по сути нет, только одно предложение
export const Arrows = (props: ArrowsPropsType) => { | ||
const { className, buttonsState, clickHandler } = props | ||
|
||
return ( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Можно немного улучшить типизацию и убрать дублирование
, пример в файле
Arrows.tsx.zip
inset: 0; | ||
border-radius: $border-radius; | ||
background: linear-gradient(to left, #5e5e5e, #414243); | ||
z-index: -1; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Можно лучше: цвета лучше вынести в константу
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Поправил
|
||
return ( | ||
<div className={`modal ${show ? 'modal_show' : ''}`} onClick={onClose}> | ||
<div |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Для модальных окон обычно используются порталы, чтобы рендерить их в другой части DOM
. Мне кажется и в вашем случае это актуально. Стоит использовать его
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@kyzinatra
Не использовал раньше порталов, спасибо за подсказку.
if (show) { | ||
timer = setTimeout(() => { | ||
setShowCloseButton(true) | ||
}, 5000) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Почему выбрано время именно 5 секунд? Почему не показать кнопку сразу если я, к примеру, случайно открыл
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@kyzinatra
Пришлось потратить немного времени, на принятие того что эта задержка и правда не нужна 😅
useEffect(() => { | ||
if (isLoaded === false) { | ||
fetch('/sprite.symbol.svg') | ||
.then(res => res.text()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Можно лучше: мне кажетяс url
для svg
стоит передавать как пропс
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Сделал
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Отличная работа! В целом верстка сделана хорошо. Я оставил несколько комментариев в моментах, которые вызвали у меня вопросы. Если захотите ответить, то не забудьте тэгнуть меня @kyzinatra. И я обязательно приду. В остальном мне все нравится, так что ваша работа принята!
…to SOK-21_start-game-page
### Какую задачу решаем
Если нужно добавить иконку добавляйте в /public/sprite.symbol.svg
Скриншоты/видяшка (если есть)
TBD (если есть)