C++ Вопрос Краш меню при анимации

Рисую демонической кровью
Забаненный
Статус
Оффлайн
Регистрация
10 Дек 2021
Сообщения
124
Реакции[?]
46
Поинты[?]
1K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Здрасте форумчане, поймал анимации на чекбоксе

imgui_widgets.cpp:
struct checkbox_element {
    float selected_rect;
};

bool ImGui::Checkbox(const char* label, bool* v)
{
    ImGuiWindow* window = GetCurrentWindow();
    if (window->SkipItems)
        return false;

    ImGuiContext& g = *GImGui;
    const ImGuiStyle& style = g.Style;
    const ImGuiID id = window->GetID(label);
    const ImVec2 label_size = CalcTextSize(label, NULL, true);

    const float square_sz = 16;
    const ImVec2 pos = window->DC.CursorPos;
    const ImRect total_bb(pos, pos + ImVec2(square_sz + 12 + label_size.x, (label_size.y > square_sz) ? label_size.y : square_sz));
    ItemSize(total_bb, style.FramePadding.y);
    if (!ItemAdd(total_bb, id))
        return false;

    bool hovered, held;
    bool pressed = ButtonBehavior(total_bb, id, &hovered, &held);
    if (pressed)
    {
        *v = !(*v);
        MarkItemEdited(id);
    }

    static std::map <ImGuiID, checkbox_element> anim;
    auto it_anim = anim.find(id);
    if (it_anim == anim.end())
    {
        anim.insert({ id, { 0.0f } });
        it_anim = anim.find(id);
    }

    it_anim->second.selected_rect = ImLerp(it_anim->second.selected_rect, *v ? 1.0f : (hovered ? 0.2f : 0.0f), 0.08f * (1.0f - ImGui::GetIO().DeltaTime));

    window->DrawList->AddRectFilled(total_bb.Min, total_bb.Min + ImVec2(square_sz, square_sz), ImColor(32, 33, 35), 3.0f);
    window->DrawList->AddRectFilled(total_bb.Min, total_bb.Min + ImVec2(square_sz, square_sz), ImColor(22 / 255.0f, 118 / 255.0f, 243 / 255.0f, it_anim->second.selected_rect), 3.0f);
    RenderCheckMark(window->DrawList, ImVec2(total_bb.Min.x + 4, (total_bb.Min.y + total_bb.Max.y) / 2 - 4), ImColor(1.0f, 1.0f, 1.0f, it_anim->second.selected_rect), 9.0f);

    window->DrawList->AddText(ImVec2(total_bb.Max.x - label_size.x - 5, total_bb.Min.y), ImGui::GetColorU32(ImGuiCol_Text), label);

    IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags | ImGuiItemStatusFlags_Checkable | (*v ? ImGuiItemStatusFlags_Checked : 0));
    return pressed;

(анимация с 31 строки)

Суть проблемы:При нажатии на "insert"(open menu) -> игра крашится(немного поясню - крашится без каких либо окон ошибок и т. п., т.е. игра просто закрывается)
Как я определил что краш зависит от анимаций? -> методом вырезки кода я понял, что если вырезать анимацию, то меню и чекбокс рендерится нормально
из этого получаем, что проблема скорее всего в анимации(так как с инициализацией, вызовами и т.д всё нормально).

Кто поможети обьяснит буду благодарен и можете рассчитывать на денежное вознагрождение.

Заранее спасибо.
 
dev
Забаненный
Статус
Оффлайн
Регистрация
5 Апр 2022
Сообщения
302
Реакции[?]
215
Поинты[?]
3K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Отладчик повесь и будешь знать более подробно что крашит, а не «скорее всего»
 
Рисую демонической кровью
Забаненный
Статус
Оффлайн
Регистрация
10 Дек 2021
Сообщения
124
Реакции[?]
46
Поинты[?]
1K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Эксперт
Статус
Оффлайн
Регистрация
13 Сен 2020
Сообщения
1,415
Реакции[?]
713
Поинты[?]
10K
Здрасте форумчане, поймал анимации на чекбоксе

imgui_widgets.cpp:
struct checkbox_element {
    float selected_rect;
};

bool ImGui::Checkbox(const char* label, bool* v)
{
    ImGuiWindow* window = GetCurrentWindow();
    if (window->SkipItems)
        return false;

    ImGuiContext& g = *GImGui;
    const ImGuiStyle& style = g.Style;
    const ImGuiID id = window->GetID(label);
    const ImVec2 label_size = CalcTextSize(label, NULL, true);

    const float square_sz = 16;
    const ImVec2 pos = window->DC.CursorPos;
    const ImRect total_bb(pos, pos + ImVec2(square_sz + 12 + label_size.x, (label_size.y > square_sz) ? label_size.y : square_sz));
    ItemSize(total_bb, style.FramePadding.y);
    if (!ItemAdd(total_bb, id))
        return false;

    bool hovered, held;
    bool pressed = ButtonBehavior(total_bb, id, &hovered, &held);
    if (pressed)
    {
        *v = !(*v);
        MarkItemEdited(id);
    }

    static std::map <ImGuiID, checkbox_element> anim;
    auto it_anim = anim.find(id);
    if (it_anim == anim.end())
    {
        anim.insert({ id, { 0.0f } });
        it_anim = anim.find(id);
    }

    it_anim->second.selected_rect = ImLerp(it_anim->second.selected_rect, *v ? 1.0f : (hovered ? 0.2f : 0.0f), 0.08f * (1.0f - ImGui::GetIO().DeltaTime));

    window->DrawList->AddRectFilled(total_bb.Min, total_bb.Min + ImVec2(square_sz, square_sz), ImColor(32, 33, 35), 3.0f);
    window->DrawList->AddRectFilled(total_bb.Min, total_bb.Min + ImVec2(square_sz, square_sz), ImColor(22 / 255.0f, 118 / 255.0f, 243 / 255.0f, it_anim->second.selected_rect), 3.0f);
    RenderCheckMark(window->DrawList, ImVec2(total_bb.Min.x + 4, (total_bb.Min.y + total_bb.Max.y) / 2 - 4), ImColor(1.0f, 1.0f, 1.0f, it_anim->second.selected_rect), 9.0f);

    window->DrawList->AddText(ImVec2(total_bb.Max.x - label_size.x - 5, total_bb.Min.y), ImGui::GetColorU32(ImGuiCol_Text), label);

    IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags | ImGuiItemStatusFlags_Checkable | (*v ? ImGuiItemStatusFlags_Checked : 0));
    return pressed;

(анимация с 31 строки)

Суть проблемы:При нажатии на "insert"(open menu) -> игра крашится(немного поясню - крашится без каких либо окон ошибок и т. п., т.е. игра просто закрывается)
Как я определил что краш зависит от анимаций? -> методом вырезки кода я понял, что если вырезать анимацию, то меню и чекбокс рендерится нормально
из этого получаем, что проблема скорее всего в анимации(так как с инициализацией, вызовами и т.д всё нормально).

Кто поможети обьяснит буду благодарен и можете рассчитывать на денежное вознагрождение.

Заранее спасибо.
была вроде такая проблема я переделал с map на vector
 
Рисую демонической кровью
Забаненный
Статус
Оффлайн
Регистрация
10 Дек 2021
Сообщения
124
Реакции[?]
46
Поинты[?]
1K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
dev
Забаненный
Статус
Оффлайн
Регистрация
5 Апр 2022
Сообщения
302
Реакции[?]
215
Поинты[?]
3K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Рисую демонической кровью
Забаненный
Статус
Оффлайн
Регистрация
10 Дек 2021
Сообщения
124
Реакции[?]
46
Поинты[?]
1K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
dev
Забаненный
Статус
Оффлайн
Регистрация
5 Апр 2022
Сообщения
302
Реакции[?]
215
Поинты[?]
3K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Рисую демонической кровью
Забаненный
Статус
Оффлайн
Регистрация
10 Дек 2021
Сообщения
124
Реакции[?]
46
Поинты[?]
1K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Последнее редактирование:
ЧВК EB_LAN
Эксперт
Статус
Оффлайн
Регистрация
26 Янв 2021
Сообщения
1,552
Реакции[?]
519
Поинты[?]
189K
Рисую демонической кровью
Забаненный
Статус
Оффлайн
Регистрация
10 Дек 2021
Сообщения
124
Реакции[?]
46
Поинты[?]
1K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Рисую демонической кровью
Забаненный
Статус
Оффлайн
Регистрация
10 Дек 2021
Сообщения
124
Реакции[?]
46
Поинты[?]
1K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Kodit izke
Забаненный
Статус
Оффлайн
Регистрация
9 Авг 2020
Сообщения
741
Реакции[?]
243
Поинты[?]
7K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Где этот флаг указать надо?
Мой совет - ничего на плюсах не делай, по крайней мере пока что, изучи плюсы более подробно, пореверсь игру и хотя бы научись пользоваться стимом и гуглом.
На всякий:
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
dev
Забаненный
Статус
Оффлайн
Регистрация
5 Апр 2022
Сообщения
302
Реакции[?]
215
Поинты[?]
3K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Посмотреть вложение 228946
После insert вот это и всё ,_,

Посмотреть вложение 228947

В выводе тоже нету, мб у меня не настроен дебаг, но я всё что надо включил
во первых
Свойства проекта -> Компоновщик -> Отладка -> Создавать отладочную информацию ставишь на /DEBUG
Во вторых инжектишь методом LLA, но не MMAP
 
Рисую демонической кровью
Забаненный
Статус
Оффлайн
Регистрация
10 Дек 2021
Сообщения
124
Реакции[?]
46
Поинты[?]
1K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Мой совет - ничего на плюсах не делай, по крайней мере пока что, изучи плюсы более подробно, пореверсь игру и хотя бы научись пользоваться стимом и гуглом.
На всякий:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Сижу в ахуе, всё работает, это всё оказывается из-за инжектора ,_,
Типо рил, заинжектил другим инжектором и чекбокс рендерится ,_,
Мой совет - ничего на плюсах не делай, по крайней мере пока что, изучи плюсы более подробно, пореверсь игру и хотя бы научись пользоваться стимом и гуглом.
На всякий:
Пожалуйста, авторизуйтесь для просмотра ссылки.
На счет этого - я изучаю плюсы где-то +- 4 месяца(и до этого был опыт на других языках), далее про гугл, первым делом я пошел искать инфу в инете, но на опен сайтах врятли вы найдёте решение такой проблемы(а она была именно в инжекторе, который не хотел рендерить чекбокс, скорее всего из-за импортов)
Ну и всем спасибо большое кто хотел помочь), тему считаю закрытой.
 
Последнее редактирование:
Сверху Снизу