-
Автор темы
- #1
В очередной раз здравия
Сегодня на повестке дня - скелетон
Если код вашего скелета выглядит как-то так:
То советую проверить гормоно-секреторную функцию вашего мозга, есть подозрения что ваши мендалевидные тела работают примерно как у Байдена, но в случае с дедушкой Джо - его понять мы можем, задумайтесь...
Дак вот, к чему это я, каким бы не был ваш кодик скелетончика - удалите нахуй
Первое что нам понадобится - определить объект драв листа (DrawList)
Думаю вам не нужно объяснять что такое объект, вообще - советую для каждой сцены делать свой обьект, лично я использую два разных обьекта DrawList, 1 для меню, 2 для оверлея
И так, пишем внутри тела ImGui::Begin
Тут мы получаем DrawList не фокусного фона для того что-бы меню покрывала есп
Далее нам нужны определения цвета, толщины, а так же один массив vector с парой костей, перечисление которых можете взять тут
Далее мы переходим к магии: используем функции PathLineTo для патча линии по между двумя координатами, и PathStroke для отрисовки линии
Делать это мы будем в цикле for, примерно так:
Вуаля!
Сегодня на повестке дня - скелетон
Если код вашего скелета выглядит как-то так:
Shitcodeeee:
ImGui::GetBackgroundDrawList()->AddLine(matrix.world2screen(BONE_SOMEBONE), matrix.world2screen(BONE_SOMEBONE), ImGui::GetColorU32(ImVec4(1.f,1.f,1.f,1.f)), 1);
ImGui::GetBackgroundDrawList()->AddLine(matrix.world2screen(BONE_SOMEBONE), matrix.world2screen(BONE_SOMEBONE), ImGui::GetColorU32(ImVec4(1.f,1.f,1.f,1.f)), 1);
ImGui::GetBackgroundDrawList()->AddLine(matrix.world2screen(BONE_SOMEBONE), matrix.world2screen(BONE_SOMEBONE), ImGui::GetColorU32(ImVec4(1.f,1.f,1.f,1.f)), 1);
ImGui::GetBackgroundDrawList()->AddLine(matrix.world2screen(BONE_SOMEBONE), matrix.world2screen(BONE_SOMEBONE), ImGui::GetColorU32(ImVec4(1.f,1.f,1.f,1.f)), 1);
ImGui::GetBackgroundDrawList()->AddLine(matrix.world2screen(BONE_SOMEBONE), matrix.world2screen(BONE_SOMEBONE), ImGui::GetColorU32(ImVec4(1.f,1.f,1.f,1.f)), 1);
ImGui::GetBackgroundDrawList()->AddLine(matrix.world2screen(BONE_SOMEBONE), matrix.world2screen(BONE_SOMEBONE), ImGui::GetColorU32(ImVec4(1.f,1.f,1.f,1.f)), 1);
ImGui::GetBackgroundDrawList()->AddLine(matrix.world2screen(BONE_SOMEBONE), matrix.world2screen(BONE_SOMEBONE), ImGui::GetColorU32(ImVec4(1.f,1.f,1.f,1.f)), 1);
//...
Дак вот, к чему это я, каким бы не был ваш кодик скелетончика - удалите нахуй
Первое что нам понадобится - определить объект драв листа (DrawList)
Думаю вам не нужно объяснять что такое объект, вообще - советую для каждой сцены делать свой обьект, лично я использую два разных обьекта DrawList, 1 для меню, 2 для оверлея
И так, пишем внутри тела ImGui::Begin
C++:
ImDrawList* esp_draw = ImGui::GetBackgroundDrawList();
Далее нам нужны определения цвета, толщины, а так же один массив vector с парой костей, перечисление которых можете взять тут
C++:
ImVec4 col = ...; //цвет ImVec4(red, green, blue, alpha)
float thickness = ...; //толщина (обычно хватает 1px)
static std::vector<std::pair<bones, bones>> pairs = {
{ BONE_HEAD,BONE_NECK },
{ BONE_NECK,BONE_SPINE_1 },
{ BONE_SPINE_1,BONE_SPINE_2 },
{ BONE_SPINE_2,BONE_PELVIS },
{ BONE_PELVIS,BONE_LEG_UP_L },
{ BONE_LEG_UP_L,BONE_LEG_LOW_L },
{ BONE_LEG_LOW_L,BONE_ANKLE_L },
{ BONE_PELVIS,BONE_LEG_UP_R },
{ BONE_LEG_UP_R,BONE_LEG_LOW_R },
{ BONE_LEG_LOW_R,BONE_ANKLE_R },
{ BONE_NECK,BONE_ARM_UP_L },
{ BONE_ARM_UP_L,BONE_ARM_LOW_L },
{ BONE_ARM_LOW_L,BONE_HAND_L },
{ BONE_NECK,BONE_ARM_UP_R },
{ BONE_ARM_UP_R,BONE_ARM_LOW_R },
{ BONE_ARM_LOW_R,BONE_HAND_R },
};
Далее мы переходим к магии: используем функции PathLineTo для патча линии по между двумя координатами, и PathStroke для отрисовки линии
Делать это мы будем в цикле for, примерно так:
C++:
for (auto& it : pairs) {
esp_draw->PathLineTo(matrix.world2screen(player.pawn.bone_pos(it.first)));
esp_draw->PathLineTo(matrix.world2screen(player.pawn.bone_pos(it.second)));
esp_draw->PathStroke(ImGui::GetColorU32(col), 0, thickness);
}