Гайд Делаем правильный анимированный клантег с использованием std::rotate

Легенда форума
Легенда форума
Статус
Оффлайн
Регистрация
10 Дек 2018
Сообщения
4,457
Реакции
2,321
Привет!
Так как в подавляющем большинстве горепаст легендвара (и не только него) по умолчанию есть не крутой "лестничный" клантег такого вида:
2021-08-09_134547.png
я решил поделиться с вами более правильной реализацией динамического клантега, хоть и с немного другой "анимацией".

Вот и сам код с небольшими комментариями (вполне возможно, что неверными, кекв):
C++:
Expand Collapse Copy
void Misc::ClantagChanger() noexcept
{
    if (!g_Options.Clantag) {
        Utils::SetClantag(""); // if clantag changer disabled - set zero tag. bad way, but who cares
        return;
    }

    static std::string tag = "Sciit.cc "; // definition of var with your tag

    static float lastTime{ };
    float curtime = g_GlobalVars->curtime; // gets curtime
                                          // https://github.com/ValveSoftware/source-sdk-2013/blob/master/mp/src/public/globalvars_base.h#L41-L56

// main part
    if (curtime > lastTime) // wait while curtime will bigger then old curtime + 0.9f
    {
        {
            std::rotate( std::begin(tag), std::next(std::begin(tag)), std::end(tag) ); // shift our tag
            Utils::SetClantag(tag.c_str()); // set our shifted tag

            lastTime = curtime + 0.9f; // updating lastTime, you can set your additional value

            if (fabs(lastTime - curtime) > 1.f) // if module of subtraction of lastTime from curtime bigger than 1.f
                lastTime = curtime;               // then lastTime = curtime (idk when this part is used xd)
        }
    }
}
Если я не ошибаюсь, анимацию можно ускорять/замедлять, уменьшая/увеличивая значение lastTime.

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


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


Если кто-то даст гифку как это выглядит, буду благодарен.

All credits to Aristois :)
 
Последнее редактирование:
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
а как он синхронизируется?
 
а как он синхронизируется?
За это отвечает проверка if (curtime > lastTime). Если текущее время будет больше старого времени + 0.9f, то клантег обновится, если нет - ничего не произойдёт. Чтобы была синхронизация между юзерами, добавочное значение к lastTime (0.9) у всех должно быть одинаково.

Вроде так.

u.p.d. блюдек подсказал, что это не так. Тут вообще нет синхронизации. Извиняюсь за дизинфу.
 
Последнее редактирование:
так получается что кривой говнокоженный клантег лв синхронизируется лучше чем std::rotate?
 
так получается что кривой говнокоженный клантег лв синхронизируется лучше чем std::rotate?
Тут нет синхронизации, я удалил слова о том, что он синхронизируется, давно как бы.
u.p.d. блюдек подсказал, что это не так. Тут вообще нет синхронизации. Извиняюсь за дизинфу.
 
Последнее редактирование:
Пожалуй, самый простенький способ сделать аним. клантег. Кинул бы репу, но уже нету :( +rep короче
 
Если я не ошибаюсь в сублиме вроде такое было
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
по фасту в вейв запихал, но со скоростью накосячил, хороший тред,удачи там
Люблю Пошлую молли :screamcat:

По теме:
А чем лестничный то хуже этого? И почему этот "правильный"?
 
lastTime = curtime + 0.9f;
if (fabs(lastTime - curtime) > 1.f)
шиза какая-то
зачем использовать сразу 2 способа "проверки на время"
для чтения не удобно:
в одном случае задержка кажется 0.9 ( curtime + 0.9f; )
в другом случае задержка кажется 1.0 (fabs(lastTime - curtime) > 1.f)

а на самом деле задержка получится 1.9.. Используй либо то, либо другое, совмещение становится неудобным для чтения
 
Назад
Сверху Снизу