Skip to content
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

Merged
merged 23 commits into from
Oct 3, 2024
Merged

[SOK-21] start game page #11

merged 23 commits into from
Oct 3, 2024

Conversation

Timur233
Copy link
Owner

### Какую задачу решаем

  • Добавил компонент Loader
  • Добавил компонент Modal
  • Добавил компонент Icon
  • Добавил favicon

Если нужно добавить иконку добавляйте в /public/sprite.symbol.svg

Скриншоты/видяшка (если есть)

image

TBD (если есть)

Copy link
Collaborator

@k0ndratov k0ndratov left a 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) {
Copy link
Collaborator

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 тоже ожидаемое поведение.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ты прав.
Тут добавил отслеживание кнопок только для примера, в итоге буду использовать то решение которое будет финальное в игре.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В таком случае возможно стоит это поменить TODO: или типо того, чтобы не смушать при резолве конфликтов.

Copy link
Owner Author

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'
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Может быть лучше event.preventDefault() лучше сразу тут делать? Чтобы не пробрасывать event в toggleButton()?

Copy link
Owner Author

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
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Выглядит вроде как обязательный пропс. Внутри это значение вроде нельзя изменить, значит и открыться оно иначе никак не может.

Copy link
Owner Author

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) => {
Copy link
Collaborator

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/

Может быть лучше обернуть это в него? Вроде как это становится стандартом.

Copy link
Owner Author

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 {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Мб быть тут тоже в миксин засунуть, как ты это раньше делал?

Copy link
Owner Author

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;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я вот думаю, не может ли стать проблемой, что при лоадере перекрывается возможность клацать в меню?

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Нет, но вот кнопку аварийного закрытия можно сделать. Сегодня сделаю

Copy link
Owner Author

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'
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не было опыта, а нормально что расширение png?

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Да вполне норм. В поддержке только нет старых ie

Copy link
Collaborator

@VladToby VladToby left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Отличная работа! В основном никаких замечаний и пожеланий нет, немного смутил один момент со svg-спрайтом.

packages/client/src/components/ui/SvgSprite/SvgSprite.tsx Outdated Show resolved Hide resolved
@k0ndratov k0ndratov mentioned this pull request Sep 30, 2024
Copy link
Collaborator

@shamemask shamemask left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Мне нравится, я в целом не очень опытный в ревью, а во фронте вообще, по-моему здорово!

@Timur233 Timur233 changed the title [SOK-17] start game page [SOK-21] start game page Oct 2, 2024
Copy link
Collaborator

@gloginov gloginov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Четко, классно!

@@ -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;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Опечатка? Или фича?

Copy link
Collaborator

@VladToby VladToby left a 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 (
Copy link
Collaborator

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;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Можно лучше: цвета лучше вынести в константу

Copy link
Owner Author

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

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Для модальных окон обычно используются порталы, чтобы рендерить их в другой части DOM. Мне кажется и в вашем случае это актуально. Стоит использовать его

Copy link
Owner Author

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)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Почему выбрано время именно 5 секунд? Почему не показать кнопку сразу если я, к примеру, случайно открыл

Copy link
Owner Author

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())

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Можно лучше: мне кажетяс url для svg стоит передавать как пропс

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Сделал

Copy link

@kyzinatra kyzinatra left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Отличная работа! В целом верстка сделана хорошо. Я оставил несколько комментариев в моментах, которые вызвали у меня вопросы. Если захотите ответить, то не забудьте тэгнуть меня @kyzinatra. И я обязательно приду. В остальном мне все нравится, так что ваша работа принята!

- Отрендерил модалку через портал
- Убрал задержку появления кнопки закрытия лоадера
- SvgSprite Передал url спрайта через пропсы
- Фиксы по стилям
@Timur233 Timur233 merged commit 2b4debc into develop Oct 3, 2024
1 check passed
@k0ndratov k0ndratov mentioned this pull request Oct 5, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants