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

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

Вот и сам код с небольшими комментариями (вполне возможно, что неверными, кекв):
C++:
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 :)
 
Последнее редактирование:
Забаненный
Статус
Оффлайн
Регистрация
5 Сен 2020
Сообщения
986
Реакции[?]
275
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
а как он синхронизируется?
 
Легенда форума
Статус
Онлайн
Регистрация
10 Дек 2018
Сообщения
4,380
Реакции[?]
2,284
Поинты[?]
189K
а как он синхронизируется?
За это отвечает проверка if (curtime > lastTime). Если текущее время будет больше старого времени + 0.9f, то клантег обновится, если нет - ничего не произойдёт. Чтобы была синхронизация между юзерами, добавочное значение к lastTime (0.9) у всех должно быть одинаково.

Вроде так.

u.p.d. блюдек подсказал, что это не так. Тут вообще нет синхронизации. Извиняюсь за дизинфу.
 
Последнее редактирование:
Участник
Статус
Оффлайн
Регистрация
11 Апр 2019
Сообщения
1,117
Реакции[?]
306
Поинты[?]
4K
Олдфаг
Статус
Оффлайн
Регистрация
4 Янв 2020
Сообщения
2,995
Реакции[?]
1,275
Поинты[?]
5K
так получается что кривой говнокоженный клантег лв синхронизируется лучше чем std::rotate?
 
Легенда форума
Статус
Онлайн
Регистрация
10 Дек 2018
Сообщения
4,380
Реакции[?]
2,284
Поинты[?]
189K
так получается что кривой говнокоженный клантег лв синхронизируется лучше чем std::rotate?
Тут нет синхронизации, я удалил слова о том, что он синхронизируется, давно как бы.
u.p.d. блюдек подсказал, что это не так. Тут вообще нет синхронизации. Извиняюсь за дизинфу.
 
Последнее редактирование:
keep silence
Участник
Статус
Оффлайн
Регистрация
17 Дек 2018
Сообщения
546
Реакции[?]
201
Поинты[?]
0
Пожалуй, самый простенький способ сделать аним. клантег. Кинул бы репу, но уже нету :( +rep короче
 
Забаненный
Статус
Оффлайн
Регистрация
19 Июл 2021
Сообщения
39
Реакции[?]
14
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
по фасту в вейв запихал, но со скоростью накосячил, хороший тред,удачи там
Люблю Пошлую молли :screamcat:

По теме:
А чем лестничный то хуже этого? И почему этот "правильный"?
 
bruh
Участник
Статус
Оффлайн
Регистрация
15 Апр 2017
Сообщения
1,298
Реакции[?]
365
Поинты[?]
0
ставь чайник, зажигай плиту
Эксперт
Статус
Оффлайн
Регистрация
22 Май 2020
Сообщения
1,444
Реакции[?]
1,092
Поинты[?]
10K
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.. Используй либо то, либо другое, совмещение становится неудобным для чтения
 
Сверху Снизу