-
Автор темы
- #1
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Здравствуйте. Мне было скучно, и я увидел все те «текстовые меню», которые использовали горячие клавиши для переключения функций, поэтому решили сделать ту, которая использует клавиши со стрелками.
Код немного уродлив и не имеет лучших методов кодирования. Версия, которую я публикую, содержит только bools, если вы хотите, чтобы float / ints или что-то еще, пойдите, сделайте это. Кроме того, вы должны узнать, как это сделать, чтобы вы могли включать / отключать меню (это действительно не сложно, поскольку у вас есть функция для этого готового)
SS
Menu.cpp
Menu.h
Код немного уродлив и не имеет лучших методов кодирования. Версия, которую я публикую, содержит только bools, если вы хотите, чтобы float / ints или что-то еще, пойдите, сделайте это. Кроме того, вы должны узнать, как это сделать, чтобы вы могли включать / отключать меню (это действительно не сложно, поскольку у вас есть функция для этого готового)
SS
Menu.cpp
Код:
Menu::Menu()
{
Enabled = true;
SelectedOption = 0;
MenuItems =
{
{ L"example0", &g_Options.esp_enabled, 0 },
{ L"example1", &g_Options.esp_player_boxes, 1 },
{ L"example2", &g_Options.esp_player_health, 2 },
{ L"example3", &g_Options.esp_player_names, 3 },
{ L"example4", &g_Options.esp_player_weapons, 4 }
};
}
void Menu::OnPaintTraverse()
{
if (!Enabled) return;
HandleInput();
int i = 0;
for (int q = 0; q < MenuItems.size(); q++) DrawBool(20, 20 + (i++ * 13), MenuItems[q].name, *MenuItems[q].container, MenuItems[q].number, SelectedOption);
}
void Menu::DrawBool(int x, int y, const wchar_t* name, bool container, int number, int selected_number)
{
g_VGuiSurface->DrawSetTextFont(esp_font);
g_VGuiSurface->DrawSetTextColor(number == selected_number ? Color(255, 215, 0) : Color::White);
g_VGuiSurface->DrawSetTextPos(x, y);
g_VGuiSurface->DrawPrintText(name, wcslen(name));
g_VGuiSurface->DrawSetTextColor(container ? Color(Color::Green) : Color(Color::Red));
g_VGuiSurface->DrawSetTextPos(x + 120, y);
g_VGuiSurface->DrawPrintText(container ? L"true" : L"false", container ? wcslen(L"true") : wcslen(L"false"));
}
void Menu::HandleInput() //ugly code warning
{
if (InputSys::Get().WasKeyPressed(VK_UP)) SelectedOption--;
else if (InputSys::Get().WasKeyPressed(VK_DOWN)) SelectedOption++;
if (SelectedOption < 0) SelectedOption = MenuItems.size() - 1; //bit ghetto
else if (SelectedOption > MenuItems.size() - 1) SelectedOption = 0;//bit ghetto
if (InputSys::Get().WasKeyPressed(VK_LEFT)) *MenuItems[SelectedOption].container = false;
else if (InputSys::Get().WasKeyPressed(VK_RIGHT)) *MenuItems[SelectedOption].container = true;
}
void Menu::Toggle() { Enabled = !Enabled; }
bool Menu::IsVisible() { return Enabled; }
Menu.h
Код:
struct Item
{
const wchar_t* name;
bool* container;
int number;
};
class Menu
: public Singleton<Menu>
{
public:
Menu();
void OnPaintTraverse();
void Toggle();
bool IsVisible();
private:
void HandleInput();
void DrawBool(int x, int y, const wchar_t* name, bool container, int number, int selected_number);
bool Enabled;
int SelectedOption;
std::vector<Item> MenuItems;
};