• Как архитектурно правильно организовать классы в игре на JS. (ООП)?

    @Arrow_MGD Автор вопроса
    Mercury13, Понял, спасибо!) За Wave надо подумать, может так оно и есть, покопаюсь, смогу ли без него обойтись
    Написано
  • Как архитектурно правильно организовать классы в игре на JS. (ООП)?

    @Arrow_MGD Автор вопроса
    Mercury13, Wave:
    крутит счётчик волн (уменьшает таймер визуальный);
    хранит и вычисляет то, какие статы будут у врагов (в зависимости от количества пройденных волн);
    дёргает метод спавна врагов (на активной фазе волны);
    даёт монеточки в конце пройденной волны;
    Написано
  • Как архитектурно правильно организовать классы в игре на JS. (ООП)?

    @Arrow_MGD Автор вопроса
    Про статические методы понял, спасибо. Про calculateDamageWithCrit тоже понял, вопрос лишь красоты, по факту это статический метод, который просто прописан как отдельная функция, не обязательно загонять его в класс.

    На счёт Wave — это по факту класс цикла волн, где есть информация о текущем состоянии. Как такового, у самой волны никаких механик нет. Да, наверное можно как-то переименовать его.

    Не до конца понял на счет Башни. Ну вот первый фрагмент кода у меня показывает, что в Game создается экземпляр tower и wave (Который можно бы переименовать в WaveLoop):
    export default class Game {
    	constructor() {
    		this.waves = reactive(new Wave());
    		this.tower = reactive(new Tower());
    		//** ... **//
    		this.initGame();
    	}
    }

    Это нормально? То бишь вот с башней я просто работаю как с одним экземпляром и всё. Без статических методов, просто по методам экземпляра.

    Ну и как я понял, просто в "высший класс" Game вынести все массивы (враги, пули). Такс?

    Спасибо)
    Написано
  • Почему не срабатывает реактивность Pinia?

    @Arrow_MGD Автор вопроса
    Aetae, Понял) Благодарю)) Пока React не привлекает, Vue нравится вообще всем. Говорят, чтобы быть мастером технологии, надо понять недостатки, но я пока не всё вижу во Vue) Хотя пишу так, для себя, мне достаточно... Нравится мне просто кодить)) Как стану сенсеем Vue, пойду дальше) Хотя у меня в планах заняться BackEnd, Node поучить, MongoDB, Express. Может Nuxt с его SSR. React слишком далеко и не факт)
    Спасибо за то, что подтвердили моё понимание)
  • Почему не срабатывает реактивность Pinia?

    @Arrow_MGD Автор вопроса
    Aetae, Не хочется быть колдуном просто)) Хочется осознавать и не забывать чо происходит)) Просто когда я два месяца учу Vue и, к примеру, пишу {{ переменная }}, я уже и забыл, что в нативе это делается через querySelector('.foo').innerText. Ну и прочее подобное))
  • Почему не срабатывает реактивность Pinia?

    @Arrow_MGD Автор вопроса
    Aetae, Алексей Ярков, Так то да, но эта "магия" реактивности для меня не всегда понятна) читаю доки и на рус и на англ, пытаюсь заглянуть под капот(изучать глубже), но иногда туплю по базовым вещам (как в случае с этой функцией), иногда не могу найти ответ на простейший вопрос .
    Как я понял все что в data -- реактивно. Computed отличается от Method тем, что методы мы сами вызываем (на клик, или другое действие), а computed реактивен. И реактивен он только тогда, когда внутри него есть хоть одна переменная которая реактивна. При её изменении (либо любой другой реактивной, если их несколько, достаточно одной из них) computed пересчитывается.
    В Pinia, в отличии от Vuex, state сразу реактивен (== логике data). Getters == логике Computed, Actions == логике Methods. А все mapЫ это лишь сахар для читабельности и ёмкости.

    +Computed без аргументов, а метод имеет аргументы.

    Изучаю не так долго, но боюсь, что из-за этой магии, я забуду как писать нативный js)) Думаю в этом отчасти преимущество React над Vue, когда "магия" полу автоматическая и есть связь с нативным кодом. Но меня бесит JSX))

    Мои понимания верны? Думаю все через это проходили...
  • Почему не срабатывает реактивность Pinia?

    @Arrow_MGD Автор вопроса
    Золотой ты человек!!! Вот я... Спасибо! Внимательность -30lvl.
    Можно тогда еще вопрос по Pinia?
    Вот если я обращаюсь в компонентах в computed или в других Store на useUsersStore.status, то все getters того стора в котором я обращаюсь тоже автоматически будут обновляться в тех компонентах, в которых они объявлены?
  • Офлайн работа с БД в PWA приложении?

    @Arrow_MGD Автор вопроса
    1. Спасибо большое за Pinia. Учусь где-то 2-й месяц. Для себя недавно открыл преимущества Vite на vue-cli, перешел на него. Теперь буду отходить от Vuex, потому что то что я глянул про Pinia мне нравится)) Действительно всё проще, но пока не понял недостатки Pinia (разве что надо теперь разобраться в теме Options API и Composition API, так как во многом в гайдах Pinia пишут по парадигме Composition, а я как понимаю, учился по Options). Единственное что не понял, теперь не нужно постоянно забирать данные через pinia getters, как во vuex, а можно напрямую с state, а getters только если нужна "мутация" данных? Я читал, что vuex нельзя (нежелательно) обращаться к state напрямую, лучше через getters (вроде как я понял из-за отсутствия реактивности в таких обращениях).
    Ну, проект не такой большой, попытаюсь переписать его на Pinia тоже для собственной практики.

    2. Спасибо за подсказку про couch/pouch db. Я думаю, что в данном проекте мне это не подойдёт, так как Back придется где-то на сервак кидать. Supabase в этом плане удобнее, что я за авторизацию не парюсь (тоже еще для меня муть с этими токенами, сессиями и прочим), вдобавок за Back вообще не парюсь, просто сервер тот работает на фри пакете. Буду видимо придумывать логику через localStorage (еще чот почитаю про LocalForage). Проект небольшой, сойдёт) А в дальнейших проектах, когда с Frontom разберусь получше и буду щупать Back активнее, обязательно займусь couch/pouch db)