Вопрос Как сделать плавное появление меню? (CSGOSIMPLE)

Забаненный
Статус
Оффлайн
Регистрация
24 Фев 2022
Сообщения
276
Реакции[?]
20
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Вопрос в заголовкe
Код:
#include "imgui_internal.h"

void ToggleButton(const char* str_id, bool* v)
{
    ImVec2 p = ImGui::GetCursorScreenPos();
    ImDrawList* draw_list = ImGui::GetWindowDrawList();

    float height = ImGui::GetFrameHeight();
    float width = height * 1.55f;
    float radius = height * 0.50f;

    ImGui::InvisibleButton(str_id, ImVec2(width, height));
    if (ImGui::IsItemClicked())
        *v = !*v;

    float t = *v ? 1.0f : 0.0f;

    ImGuiContext& g = *GImGui;
    float ANIM_SPEED = 0.08f;
    if (g.LastActiveId == g.CurrentWindow->GetID(str_id))// && g.LastActiveIdTimer < ANIM_SPEED)
    {
        float t_anim = ImSaturate(g.LastActiveIdTimer / ANIM_SPEED);
        t = *v ? (t_anim) : (1.0f - t_anim);
    }

    ImU32 col_bg;
    if (ImGui::IsItemHovered())
        col_bg = ImGui::GetColorU32(ImLerp(ImVec4(0.78f, 0.78f, 0.78f, 1.0f), ImVec4(0.64f, 0.83f, 0.34f, 1.0f), t));
    else
        col_bg = ImGui::GetColorU32(ImLerp(ImVec4(0.85f, 0.85f, 0.85f, 1.0f), ImVec4(0.56f, 0.83f, 0.26f, 1.0f), t));

    draw_list->AddRectFilled(p, ImVec2(p.x + width, p.y + height), col_bg, height * 0.5f);
    draw_list->AddCircleFilled(ImVec2(p.x + radius + t * (width - radius * 2.0f), p.y + radius), radius - 1.5f, IM_COL32(255, 255, 255, 255));
}
по такому же принципу сделай на if (Menu::Render)
 
Эксперт
Статус
Оффлайн
Регистрация
30 Дек 2019
Сообщения
1,970
Реакции[?]
958
Поинты[?]
19K
static float alpha = 0.0f;
if (alpha < 1.f)
alpha += 0.2f;
else if (alpha > 0.f)
alpha -= 0.2f;

ImGui::PushStyleVar(ImGui_StyleVarAlpha,alpha);
// render menu
ImGui::PopStyleVar();
Код:
#include "imgui_internal.h"

void ToggleButton(const char* str_id, bool* v)
{
    ImVec2 p = ImGui::GetCursorScreenPos();
    ImDrawList* draw_list = ImGui::GetWindowDrawList();

    float height = ImGui::GetFrameHeight();
    float width = height * 1.55f;
    float radius = height * 0.50f;

    ImGui::InvisibleButton(str_id, ImVec2(width, height));
    if (ImGui::IsItemClicked())
        *v = !*v;

    float t = *v ? 1.0f : 0.0f;

    ImGuiContext& g = *GImGui;
    float ANIM_SPEED = 0.08f;
    if (g.LastActiveId == g.CurrentWindow->GetID(str_id))// && g.LastActiveIdTimer < ANIM_SPEED)
    {
        float t_anim = ImSaturate(g.LastActiveIdTimer / ANIM_SPEED);
        t = *v ? (t_anim) : (1.0f - t_anim);
    }

    ImU32 col_bg;
    if (ImGui::IsItemHovered())
        col_bg = ImGui::GetColorU32(ImLerp(ImVec4(0.78f, 0.78f, 0.78f, 1.0f), ImVec4(0.64f, 0.83f, 0.34f, 1.0f), t));
    else
        col_bg = ImGui::GetColorU32(ImLerp(ImVec4(0.85f, 0.85f, 0.85f, 1.0f), ImVec4(0.56f, 0.83f, 0.26f, 1.0f), t));

    draw_list->AddRectFilled(p, ImVec2(p.x + width, p.y + height), col_bg, height * 0.5f);
    draw_list->AddCircleFilled(ImVec2(p.x + radius + t * (width - radius * 2.0f), p.y + radius), radius - 1.5f, IM_COL32(255, 255, 255, 255));
}
по такому же принципу сделай на if (Menu::Render)
Что за бред блять, зачем ты скинул говно анимацию, для сраного элемента, если ему нужно анимировать сам begin
 
dev
Забаненный
Статус
Оффлайн
Регистрация
5 Апр 2022
Сообщения
302
Реакции[?]
215
Поинты[?]
3K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Что за бред блять, зачем ты скинул говно анимацию
Объективно код анимации тут нормальный, и вполне можно заюзать для бегина, а вот то что отправил ты - можно сделать намного лучше
 
Эксперт
Статус
Оффлайн
Регистрация
30 Дек 2019
Сообщения
1,970
Реакции[?]
958
Поинты[?]
19K
Начинающий
Статус
Оффлайн
Регистрация
16 Мар 2022
Сообщения
61
Реакции[?]
4
Поинты[?]
1K
static float alpha = 0.0f;
if (alpha < 1.f)
alpha += 0.2f;
else if (alpha > 0.f)
alpha -= 0.2f;

ImGui::PushStyleVar(ImGui_StyleVarAlpha,alpha);
// render menu
ImGui::PopStyleVar();

Что за бред блять, зачем ты скинул говно анимацию, для сраного элемента, если ему нужно анимировать сам begin
Че то не воркает, я вроде все правильно сделал1650025539387.png
 
Эксперт
Статус
Оффлайн
Регистрация
30 Дек 2019
Сообщения
1,970
Реакции[?]
958
Поинты[?]
19K
Начинающий
Статус
Оффлайн
Регистрация
16 Мар 2022
Сообщения
61
Реакции[?]
4
Поинты[?]
1K
Забаненный
Статус
Оффлайн
Регистрация
24 Фев 2022
Сообщения
276
Реакции[?]
20
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Начинающий
Статус
Оффлайн
Регистрация
16 Мар 2022
Сообщения
61
Реакции[?]
4
Поинты[?]
1K
Блять, я вроде все правильно делаю но или крашит или меню не закрывается
Блять, я вроде все правильно делаю но или крашит или меню не закрывается
Хоть помогите с затемнением заднего фона меню
 
Последнее редактирование:
Забаненный
Статус
Оффлайн
Регистрация
24 Фев 2022
Сообщения
276
Реакции[?]
20
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Блять, я вроде все правильно делаю но или крашит или меню не закрывается

Хоть помогите с затемнением заднего фона меню
ну потому что это хуйня, у тебя после ImGui::End() заканчивается меню. У тебя там ничего не должно быть
ну потому что это хуйня, у тебя после ImGui::End() заканчивается меню. У тебя там ничего не должно быть
перед
}
ImGui::EndChild() вставь и все
ну потому что это хуйня, у тебя после ImGui::End() заканчивается меню. У тебя там ничего не должно быть

перед
}
ImGui::EndChild() вставь и все
Пожалуйста, авторизуйтесь для просмотра ссылки.
Тут все есть, посмотри внимательнее
 
кто читает тот умрет
Участник
Статус
Оффлайн
Регистрация
29 Июл 2019
Сообщения
693
Реакции[?]
536
Поинты[?]
149K
после ImGui::End()
а не в начало меню

Посмотреть вложение 199759
ДО ImgUI::End нужно уже ресетнуть все стайл вары.
static float alpha = 0.0f;
if (alpha < 1.f)
alpha += 0.2f;
else if (alpha > 0.f)
alpha -= 0.2f;

ImGui::PushStyleVar(ImGui_StyleVarAlpha,alpha);
// render menu
ImGui::PopStyleVar();

Что за бред блять, зачем ты скинул говно анимацию, для сраного элемента, если ему нужно анимировать сам begin
Просто добавлять или отнимать числа плохая идея ибо скорость будет зависеть от фпс, если 400 то очень быстро если 10 то очень медленно.

static float alpha = std::clamp(alpha + ImGui::GetIO().DeltaTime * 2.f * (_visible ? 1.f : -1.f), 0.f, 1.f);

и удали
Посмотреть вложение 199758

тот код что я написал выше неправильный, я там чек забыл
Это уже лучше, но если хочешь удалять чек на закрытое меню то хотя бы сделайте проверку по типу if ( alpha <= 0) return;
 
Пользователь
Статус
Оффлайн
Регистрация
19 Авг 2020
Сообщения
193
Реакции[?]
40
Поинты[?]
0
Блять что за хуйня вы че анимацию то сделать не можете...
C++:
    if (!m_bIsMenuOpened && ImGui::GetStyle().Alpha > 0.f) {
        float fc = 255.f / 0.2f * ImGui::GetIO().DeltaTime;
        ImGui::GetStyle().Alpha = std::clamp(ImGui::GetStyle().Alpha - fc / 255.f, 0.f, 1.f);
    }

    if (m_bIsMenuOpened && ImGui::GetStyle().Alpha < 1.f) {
        float fc = 255.f / 0.2f * ImGui::GetIO().DeltaTime;
        ImGui::GetStyle().Alpha = std::clamp(ImGui::GetStyle().Alpha + fc / 255.f, 0.f, 1.f);
    }

    if (!m_bIsMenuOpened && ImGui::GetStyle().Alpha <= 0.f)
        return;
 
Начинающий
Статус
Оффлайн
Регистрация
16 Мар 2022
Сообщения
61
Реакции[?]
4
Поинты[?]
1K
Оно работает но есть одна проблема спектатор лист пропадает :sob: :sob:
 
ставь чайник, зажигай плиту
Эксперт
Статус
Оффлайн
Регистрация
22 Май 2020
Сообщения
1,444
Реакции[?]
1,092
Поинты[?]
10K
Блять что за хуйня вы че анимацию то сделать не можете...
C++:
    if (!m_bIsMenuOpened && ImGui::GetStyle().Alpha > 0.f) {
        float fc = 255.f / 0.2f * ImGui::GetIO().DeltaTime;
        ImGui::GetStyle().Alpha = std::clamp(ImGui::GetStyle().Alpha - fc / 255.f, 0.f, 1.f);
    }

    if (m_bIsMenuOpened && ImGui::GetStyle().Alpha < 1.f) {
        float fc = 255.f / 0.2f * ImGui::GetIO().DeltaTime;
        ImGui::GetStyle().Alpha = std::clamp(ImGui::GetStyle().Alpha + fc / 255.f, 0.f, 1.f);
    }

    if (!m_bIsMenuOpened && ImGui::GetStyle().Alpha <= 0.f)
        return;
ого, теперь ты изменяешь весь стайл имгуи, ты превзошёл комментаторов выше!

где-то до if (!_visible)
C++:
auto menu_alpha = 0.f;
menu_alpha = ImLerp(menu_alpha, _visible ? 1.f : 0.f, ImGui::GetIO().DeltaTime * 8.f);

и замени
C++:
if (!_visible)
    return;
на
C++:
ImGui::PushStyleVar(ImGuiStyleVar_Alpha, menu_alpha);
if (menu_alpha < 0.01f)
    return;
после ImGui::End(); добавь
ImGui::PopStyleVar();
 
Начинающий
Статус
Оффлайн
Регистрация
16 Мар 2022
Сообщения
61
Реакции[?]
4
Поинты[?]
1K
ого, теперь ты изменяешь весь стайл имгуи, ты превзошёл комментаторов выше!

где-то до if (!_visible)
C++:
auto menu_alpha = 0.f;
menu_alpha = ImLerp(menu_alpha, _visible ? 1.f : 0.f, ImGui::GetIO().DeltaTime * 8.f);

и замени
C++:
if (!_visible)
    return;
на
C++:
ImGui::PushStyleVar(ImGuiStyleVar_Alpha, menu_alpha);
if (menu_alpha < 0.01f)
    return;
после ImGui::End(); добавь
ImGui::PopStyleVar();
мерцает меню
 
Сверху Снизу