Задать вопрос
  • Почему компилятор не видит реализацию методов во компиляции?

    lina666
    @lina666 Автор вопроса
    User.cpp находится по пути от корня проекта
    src\objects\User.cpp
    src\objects\User.hpp
    При билде на EPS без проблем запускается
    Я пробовал указывать дополнительно в platform.ini, но это не помогло
    build_src_filter = 
        +<src/objects/User.cpp>

    #include "User.hpp"
    
    #include <cmath>
    
    User::User() : currentRadiation(0), currentPsi(0), lastUpdateTime(0) {}
    
    #define RADIATION_REST 1000
    #define PSI_REST 1000
    
    bool
    User::isInZone(const EffectZone& zone) const
    {
        // Проверяем, находится ли пользователь в радиусе действия зоны
        float distance = calculateDistance(zone.position);
        return distance <= zone.radius;
    }
    
    float
    User::calculateDistance(const GpsPosition& pos1) const
    {
        // Расчет расстояния по формуле гаверсинусов
        float lat1 = currentPosition.lat * DEG_TO_RAD;
        float lon1 = currentPosition.lng * DEG_TO_RAD;
        float lat2 = pos1.lat * DEG_TO_RAD;
        float lon2 = pos1.lng * DEG_TO_RAD;
    
        // Радиус Земли в метрах
        const float R = 6371000;
    
        float dLat = lat2 - lat1;
        float dLon = lon2 - lon1;
    
        float a = sin(dLat / 2) * sin(dLat / 2) +
                  cos(lat1) * cos(lat2) * sin(dLon / 2) * sin(dLon / 2);
    
        float c        = 2 * atan2(sqrt(a), sqrt(1 - a));
        float distance = R * c;
    
        return distance;
    }
    
    bool
    User::isRadiationSick() const
    {
        // Проверка на наличие лучевой болезни (>80% от максимума)
        return currentRadiation > (MAX_RADIATION * 0.8f);
    }
    
    void
    User::applyRadiation(float radiationDps, unsigned long deltaTime)
    {
        if (isDead) return;
    
        if (!isRadiationSick())
        {
            currentRadiation -= RADIATION_REST * deltaTime / 1000.0f;
            if (currentRadiation < 0)
            {
                currentRadiation = 0;
            }
        }
    
        if (radiationDps <= 0) return;
    
        // Накопление радиации без учета защиты
        float radiationIncrease = radiationDps * deltaTime / 1000.0f;
        currentRadiation += radiationIncrease;
    
        // Проверка летального уровня
        if (currentRadiation >= MAX_RADIATION)
        {
            setDead(DeathReason::RADIATION);
        }
    }
    
    void
    User::applyPsi(float psiDps, unsigned long deltaTime)
    {
        if (isDead) return;
    
        // Накопление пси-излучения без учета защиты
        float psiIncrease = psiDps * deltaTime / 1000.0f;
        currentPsi += psiIncrease;
    
        // Проверка летального уровня
        if (currentPsi >= MAX_PSI)
        {
            setDead(DeathReason::PSI);
        }
    }
    
    void
    User::updatePosition(const GpsPosition& position)
    {
        currentPosition = position;
    }
    
    void
    User::updateWithEffects(const std::vector<EffectZone>& zones)
    {
        if (isDead) return;
    
        // Получаем текущее время и рассчитываем дельту
        unsigned long currentTime = millis();
        unsigned long deltaTime =
            lastUpdateTime > 0 ? currentTime - lastUpdateTime : 0;
        lastUpdateTime = currentTime;
    
        if (deltaTime == 0) return;
    
        // Максимальные значения DPS для каждого типа зоны
        float maxRadiationDps = 0;
        float maxPsiDps       = 0;
        bool  inShelter       = false;
    
        // Ищем зоны с максимальным воздействием по каждому типу
        for (const EffectZone& zone : zones)
        {
            if (!isInZone(zone)) continue;
    
            switch (zone.type)
            {
                case TypeEffectZone::RADIATION:
                    maxRadiationDps = max(maxRadiationDps, zone.damagePerSecond);
                    break;
    
                case TypeEffectZone::PSI:
                    maxPsiDps = max(maxPsiDps, zone.damagePerSecond);
                    break;
    
                case TypeEffectZone::SHELTER:
                    inShelter = true;
                    break;
            }
        }
    
        applyRadiation(maxRadiationDps, deltaTime);
        applyPsi(maxPsiDps, deltaTime);
    
        // Обработка лучевой болезни
        if (isRadiationSick() && !isDead)
        {
            // Дополнительная радиация от лучевой болезни
            float sickRadiationRate =
                MAX_RADIATION / (RADIATION_ZONE_TIME_LIMIT * 10.0f);
            float sickRadiationIncrease = sickRadiationRate * deltaTime / 1000.0f;
            currentRadiation += sickRadiationIncrease;
    
            // Проверка смерти от лучевой болезни
            if (currentRadiation >= MAX_RADIATION)
            {
                setDead(DeathReason::RADIATION);
            }
        }
    }
    
    void
    User::setOnDeathCallback(std::function<void(DeathReason)> callback)
    {
        onDeathCallback = callback;
    }
    
    void
    User::setDead(DeathReason reason)
    {
        isDead = true;
        if (onDeathCallback)
        {
            onDeathCallback(reason);
        }
    }
    Написано
  • Как делать отладку сетевых запросов в Nuxt 3?

    lina666
    @lina666 Автор вопроса
    Aetae, обычно я думаю так, если есть запрос на удобный инструмент который постоянно напрашивается, я пытаюсь найти его.
    Если не нахожу иду на форумы спрашивать, потому что возможно я не правильно ищу.

    Очень грустно, что нет такой функции конечно, на сколько знаю в тулзе laravel есть такая возможность посмотреть какие запросы ушли и с какими данными, получается хоть самому садится и делать в виде плагина в nuxt-devtools
    Написано
  • Не работает ссылка?

    lina666
    @lina666
    В целом все корректно, попробуйте посмотреть в других браузерах. Попробуйте обернуть текст в div вероятно может помочь, в целом тут сложно ошибиться, мб у вас где то не закрыт какой то html тег, из за чего происходит такой лаг?
    text
  • Как сделать поиск/фильтрацию таблицы расположенной на нескольких страницах?

    lina666
    @lina666
    Михаил,
    function search(input, table) {}
    
    //Далее вызов
    search(document.querySelector('#input'), document.querySelector('#table'))

    Т.е мы во время вызова функции находим нужный инпут и таблицу с которой нужно работать.
  • Как сделать поиск/фильтрацию таблицы расположенной на нескольких страницах?

    lina666
    @lina666
    Да, если у вас верстка таблиц одинаковая, а id разные, то добавить параметры функции и передевать в качестве аргументов инпут и саму таблицу.
  • Как отключить перемещение за мышкой яндекс карту?

    lina666
    @lina666
    Хм, первый раз слышу про такое поведение. у меня вроде всегда срабатывало, просто отрубить все ивенты мыши (драг и т.п), можешь показать пример проблемы короткий видос например.
    Из того, что могу подсказать, можно костыль сделать, накрутив абсолютный прозрачный блок поверх карты (если она статической полностью должна быть, от лапок пользователя)
  • Как задать цвет заднего фона для каждой колонки?

    lina666
    @lina666
    wonder_uix, грубый набросок без фреймворков, на какой нить вьюшке в разы быстрее получится и поудобнее.
    class Columns {
        cols = []
        constructor(str, count) {
            this.count = count
            const symbolMax = Math.round(str.length / count)
            for (let i = 0; i < count; i++) {
                this.cols.push(str.substr(i*symbolMax, symbolMax))
            }
        }
        
        /** @param {HTMLElement} container*/
        mount(container) {
            const divs = this.cols.map(i => {
                const container = document.createElement('div')
                container.innerHTML = i
                return container
            })
            container.append(...divs)
        }
    }
    const col = new Columns(
        '1234567890qwertyuiopZXCVBNMLKJ',
        3
    )
    const block = document.querySelector('.columns')
    col.mount(block)


    .columns {
      display: grid;
      grid-template-columns: 1fr 1fr 1fr;
      gap: 10%;
      div {
        background: pink;
      }
      div:first-child {
        background: red;
      }
      
      div:last-child {
        background: green;
      }
    }
  • Какие объемы данных может нормально переваривать Vuex?

    lina666
    @lina666
    В целом все зависит от устройства, на котором будет работать пользователь. В целом если данные просто хранятся, то будет все ок, если будет хватать оперативной памяти.
    Нужно проверять на каком то среднем железе, если начинает блокироваться основной поток, то стоит уже начинать придумывать хитрости.
    Такой вопрос, а что за проект такой, где приходится хранить 20кб данных в памяти?
    Я обычно работаю с CMSками или магазинами, как правило, мы стараемся на фронте в определенный момент времени хранить минимум инфы.
  • Как отредактировать актуальные данные в localStorage по конкретному id в объекте?

    lina666
    @lina666
    Andy Koshman, вы же слушатель на какую то кнопку вешаете.
    можете на кнопку с которой ловите клик добавить дата атрибут

    <div class="item">
     <button data-id="1" class="item__button"></button>
    </div>

    document.querySelectorAll('item__button').forEach(i => i.addEvenListener('click', function() {
     console.log(this.dataset.id)
    }))
    
    В коде ошибся мб чутка, но примерно так.
  • Поддерживают ли сайты даркнета (.onion) React, Vue и PHP?

    lina666
    @lina666
    В общем это мысли в слух.
    По итогу если вы поддерживаете пользователей с отключенным js в браузере, то любые javaScript фреймворки не будут доступны, а что на бекенде без разницы.
  • Поддерживают ли сайты даркнета (.onion) React, Vue и PHP?

    lina666
    @lina666
    Слава,
    Да я просто сначала подумал, что можно будет чат через iframe подключить, но потом уже дошло, что js, то в браузере отключен :).
  • Почему не вызывается функция из подключенного скрипта?

    lina666
    @lina666
    niten_d0raku, Скрипт должен подключаться после инициализации всего DOM, сделай подключение в html в самом низу
  • Как вывести интерфейсы через консоль?

    lina666
    @lina666
    TTghost, Если сборка настоенна корректно, точно так же как и в дев режиме, сервер отдает файлы по html файл по запросу в котором подключаются нужные скрипты, после чего открываешь консоль и используешь.
  • Как вывести интерфейсы через консоль?

    lina666
    @lina666
    В дополнение хочу сказать, что ты не мог их использовать потому что они меняли свои имена и в консоль соответственно не попадали, когда мы их к window приделываем в 1м варианте, то можем по данному св-ву в объекте на функцию.

    Я думаю что тебе стоит поковыряться с настройками webpack для vue-cli, а так же посмотреть как делается финальная сборка проекта, т.к я думаю что предложенное мной решение не совсем корректное и большое подходит как временное.
  • Как вывести интерфейсы через консоль?

    lina666
    @lina666
    TTghost,
    В 1ом варианте он входит в итоговый бандл
    Во 2ом хеша не будет, но он будет как отдельный JS файл выносится при каждой сборке, для дальнейшего подключения.

    Как делать хеш не скажу, т.к не занимался подобным, но думаю можно сделать если поковырять настройки вебпака.
  • Как вывести интерфейсы через консоль?

    lina666
    @lina666
    2й вариант, vue-cli является средой для разработки, мы помним, что наше приложение которое мы соберем, мы будем подключать куда либо => в public к index.html подрубаешь файл со скриптами которые условно будут на проекте.
    6324fb0a6500a657185634.png
  • Как вывести интерфейсы через консоль?

    lina666
    @lina666
    1й вариант, ты можешь сохранять данные функции в window.functionName
    import Vue from 'vue'
    import App from './App.vue'
    
    Vue.config.productionTip = false
    
    new Vue({
      render: h => h(App),
    }).$mount('#app')
    
    // eslint-disable-next-line no-unused-vars
    window.test = function test() {
      alert('test')
    }


    UPD ты сможешь потом в консоли их вызывать просто test() или window.test()