Эксперт
-
Автор темы
- #1
Привет, я написал табы так как делал на DirectXПочему, когда я пишу что static int x = 70 + label_size.x, то у меня вот такая фигня Посмотреть вложение 135848
Размер ВСЕХ табов зависит от размера таба рейджа, а мне надо чтобы у них размер был у всех отдельный. В чем прикол, почему он задается всем табам сразу?
enum EInterfaceTabs {
eTabWeapon = 0,
eTabPlayer,
eTabVisuals,
eTabAiming,
eTabMisc,
eTabDebug,
eTabConsole,
eTabConfig,
eTabSettings,
eTabsCount
};
bool bTabs[EInterfaceTabs::eTabsCount] = { true };
bool inBox(float x, float y, float w, float h) {
return ImGui::GetMousePos().x >= x && ImGui::GetMousePos().x <= x + w && ImGui::GetMousePos().y >= y && ImGui::GetMousePos().y <= y + h;
}
void tabButton(ImVec2 position, ImVec2 size, std::string name, bool& var, ImColor in = ImColor(25, 25, 25), ImColor out = ImColor(15, 15, 15)) {
ImColor color;
if (this->inBox(position.x, position.y, size.x, size.y)) {
if (GetAsyncKeyState(0x1) & 0x1) {
for (int i = 0; i != CTabManager::EInterfaceTabs::eTabsCount; i++) {
this->m_pTM->bTabs[i] = 0;
}
var = !var;
}
}
this->inBox(position.x, position.y, size.x, size.y) ?
color = in :
color = out;
if (var) color = ImColor(35, 35, 35);
ImGui::GetForegroundDrawList()->AddRectFilled(CALC(position.x, position.y, size.x, size.y), color);
ImGui::GetForegroundDrawList()->AddText(ImVec2((position.x + (size.x / 2)) - (ImGui::CalcTextSize(name.c_str()).x / 2),
(position.y + (size.y / 2)) - (ImGui::CalcTextSize(name.c_str()).y / 2)), ImColor(255, 255, 255), name.c_str());
}
this->m_pDM->tabButton(ImVec2(200.f, 0.f), ImVec2(80.f, 35.f), xorstr(u8"Weapon"), this->m_pTM->bTabs[CTabManager::eTabWeapon]);
this->m_pDM->tabButton(ImVec2(280.f, 0.f), ImVec2(80.f, 35.f), xorstr(u8"Player"), this->m_pTM->bTabs[CTabManager::eTabPlayer]);
this->m_pDM->tabButton(ImVec2(360.f, 0.f), ImVec2(80.f, 35.f), xorstr(u8"Visuals"), this->m_pTM->bTabs[CTabManager::eTabVisuals]);
Спасибо, что потратил время, но я уже решил эту проблему просто поменяв кое-что местамиПривет, я написал табы так как делал на DirectX
не думаю что это самый правильный вариант реализации.C++:enum EInterfaceTabs { eTabWeapon = 0, eTabPlayer, eTabVisuals, eTabAiming, eTabMisc, eTabDebug, eTabConsole, eTabConfig, eTabSettings, eTabsCount }; bool bTabs[EInterfaceTabs::eTabsCount] = { true }; bool inBox(float x, float y, float w, float h) { return ImGui::GetMousePos().x >= x && ImGui::GetMousePos().x <= x + w && ImGui::GetMousePos().y >= y && ImGui::GetMousePos().y <= y + h; } void tabButton(ImVec2 position, ImVec2 size, std::string name, bool& var, ImColor in = ImColor(25, 25, 25), ImColor out = ImColor(15, 15, 15)) { ImColor color; if (this->inBox(position.x, position.y, size.x, size.y)) { if (GetAsyncKeyState(0x1) & 0x1) { for (int i = 0; i != CTabManager::EInterfaceTabs::eTabsCount; i++) { this->m_pTM->bTabs[i] = 0; } var = !var; } } this->inBox(position.x, position.y, size.x, size.y) ? color = in : color = out; if (var) color = ImColor(35, 35, 35); ImGui::GetForegroundDrawList()->AddRectFilled(CALC(position.x, position.y, size.x, size.y), color); ImGui::GetForegroundDrawList()->AddText(ImVec2((position.x + (size.x / 2)) - (ImGui::CalcTextSize(name.c_str()).x / 2), (position.y + (size.y / 2)) - (ImGui::CalcTextSize(name.c_str()).y / 2)), ImColor(255, 255, 255), name.c_str()); } this->m_pDM->tabButton(ImVec2(200.f, 0.f), ImVec2(80.f, 35.f), xorstr(u8"Weapon"), this->m_pTM->bTabs[CTabManager::eTabWeapon]); this->m_pDM->tabButton(ImVec2(280.f, 0.f), ImVec2(80.f, 35.f), xorstr(u8"Player"), this->m_pTM->bTabs[CTabManager::eTabPlayer]); this->m_pDM->tabButton(ImVec2(360.f, 0.f), ImVec2(80.f, 35.f), xorstr(u8"Visuals"), this->m_pTM->bTabs[CTabManager::eTabVisuals]);
Посмотреть вложение 135855
Проект предоставляет различный материал, относящийся к сфере киберспорта, программирования, ПО для игр, а также позволяет его участникам общаться на многие другие темы. Почта для жалоб: admin@yougame.biz