Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

C++ ScGui - Попытка сделать ImGui, только в консольке!

keep silence
Участник
Участник
Статус
Оффлайн
Регистрация
17 Дек 2018
Сообщения
548
Реакции
201
1630143259862.png

Представляю вашему вниманию главного конкурента всяких ваших имгуев (шутка) - ScGui!
Да, мне было очень скучно. По-моему, небольшой потенциал в этой штуке есть, и я всё же попытаюсь довести её до ума.

На данный момент присутствуют след. фишки:
- Text
- Button
- Checkbox
- Slider (Int/Float)
- Tooltip
- Spacing
- Separator
- Кастомизация стилей

Планы на ближайшее будущее:
- Отсутствуют
- ...


Пример:​
C++:
Expand Collapse Copy
#include "scgui.hpp"
#include <thread>

bool bGlowESP = false;
bool bHealthBased = false;
bool bBunnyHop = false;

int iValue = 0;
float fValue = 0.f;

void gui()
{
    ScGui::Window("Essence Lite", { 0, 0 }, { 500, 150 });

    while (true)
    {
        static int tabIndex = 0;

        if (ScGui::Update())
        {
            ScGuiStyle::PushConsoleStyle({
                12, // red
                NULL // black
                });

            ScGuiStyle::ButtonStyle = { "", "", "" };

            if (ScGui::Button("Visuals", false)) tabIndex = 0;
            ScGui::Spacing(1, 0);
            if (ScGui::Button("Misc", false)) tabIndex = 1;
            ScGui::Spacing(1, 0);
            if (ScGui::Button("Test", true)) tabIndex = 2;

            ScGui::Separator(SCGUIAXIS_HORIZONTAL, 25);

            ScGuiStyle::ResetStyle();

            if (tabIndex == 0)
            {
                ScGui::Checkbox("Glow ESP", false, bGlowESP);
                ScGui::Tooltip("Applies glow effect to enemies", true);
                ScGui::Checkbox("Health based", true, bHealthBased);
            }
            else if (tabIndex == 1)
            {
                ScGui::Checkbox("Bunnyhop", true, bBunnyHop);
                ScGui::Button("Save config", true);
                ScGui::Button("Load config", true);
            }
            else if (tabIndex == 2)
            {
                ScGui::SliderInt("Slider test", true, iValue, 1, -10, 10);
                ScGui::SliderFloat("Slider test", true, fValue, 0.001, -10, 10);
            }
        }

        Sleep(1);
    }
}

int main(void)
{
    thread ScGuiThread(gui);
    ScGuiThread.join();
}
 

Вложения

Последнее редактирование:
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Посмотреть вложение 168750
Представляю вашему вниманию, пожалуй, самый говняный говнокод из всех говнокодов - ScGui!
Мне было очень скучно, и я решил скостылить имгуй на ультра минималках. По-моему, потенциал в этой штуке есть, но не в моих руках..
Но! Я всё же попытаюсь довести эту штуку до ума.

На данный присутствуют след. элементы:
- Text
- Button
- Checkbox
- Spacing


Пример:​
C++:
Expand Collapse Copy
#include "scgui.hpp"
#include <thread>

void gui()
{
    ScGui::Window("Hello ScGui!", { 0, 0 }, { 250, 200 });

    while (true)
    {
        static bool checkboxCheck = false;

        if (ScGui::Update())
        {
            ScGui::Text("Hello ScGui!");
            ScGui::Checkbox("Some checkbox lul!", checkboxCheck);

            if (ScGui::Button("Boo button example!"))
            {
                ScGui::Text("Boo!");
            }
        }

        Sleep(1);
    }
}

int main(void)
{
    thread ScGuiThread(gui);
    ScGuiThread.join();
}
нифигово, прикольная задумка +rep
 
Щас пытаюсь сделать стили более удобными, а пока что вот такой простенький результат получается:
Снимок.PNG
 
Подсказка:
Делай так что бы оно подключалось и работало в две строчки.
Это намного лучше будет, ибо меньше проблем с установкой в проект и так далее.
Идея интересная, я пытался делать что-то типа такого, но забросил.
Надеюсь ты, осуществишь это нормально и сделаешь всё норм.

Пожалуйста, зарегистрируйтесь или авторизуйтесь, чтобы увидеть содержимое.

 
Делай так что бы оно подключалось и работало в две строчки.
Подключение:
#include "scgui.hpp"
"Установка" нужного нам окошка:
ScGui::Window("Hello ScGui!", { 0, 0 }, { 300, 200 }); где второй параметр - позиция на экране, а третий - размер окна консольки.
Остальное же в цикле с проверкой на апдейт.
Не совсем понял, в чём проблема)
Или ты хочешь чтоб прям поток с циклом создавались во внутрянке гуишки?
 
Подключение:
#include "scgui.hpp"
"Установка" нужного нам окошка:
ScGui::Window("Hello ScGui!", { 0, 0 }, { 300, 200 }); где второй параметр - позиция на экране, а третий - размер окна консольки.
Остальное же в цикле с проверкой на апдейт.
Не совсем понял, в чём проблема)
Или ты хочешь чтоб прям поток с циклом создавались во внутрянке гуишки?
Ну вообще, я посмотрел у тебя в целом удобно, просто вспоминая имгуи сразу вижу всякие штуки типа подключите директ.
Сделай текстбокс, листбокс и ещё всякие штуки типа такого.
 
(кому не всё равно...)
Обновление! Добавил возможность кастомизации стилей.
Пример:
C++:
Expand Collapse Copy
ScGuiStyle::PushStyle({
    FOREGROUND_BLUE,
    NULL,
    {
        "@"
    },
    {
        "/",
        "",
        "!"
    },
    {
        "/",
        "",
        "+",
        "-"
    }
    }, false);
ScGuiStyle::PushStyle() принимает 2 параметра (или аргумента, кому как угодно): SCGUISTYLE (структуру ниже прикреплю) и bool IgnoreConsoleParams.
IgnoreConsoleParams true если хотите, чтоб консолька не красилась. Нужно на случай, если захотите просто поменять элементы.
Сбросить стили в рантайме можно при помощи ScGuiStyle::ResetStyle();
C++:
Expand Collapse Copy
struct SCGUISTYLE
{
    WORD ForegroundColor;
    WORD BackgroundColor;
    SCGUICURSORSTYLE CursorStyle;
    SCGUIBUTTONSTYLE ButtonStyle;
    SCGUICHECKBOXSTYLE CheckboxStyle;
};
C++:
Expand Collapse Copy
struct SCGUICURSORSTYLE
{
    string Icon = ">";
};

struct SCGUIBUTTONSTYLE
{
    string LeftBorder = "[";
    string RightBorder = "]";
    string Icon = "#";
};

struct SCGUICHECKBOXSTYLE
{
    string LeftBorder = "[";
    string RightBorder = "]";
    string ToggledIcon = "+";
    string NotToggledIcon = "-";
};
Апдейт после нажатия кнопки так и не пофиксил, да..
 
Посмотреть вложение 168750
Представляю вашему вниманию, пожалуй, самый говняный говнокод из всех говнокодов - ScGui!
Мне было очень скучно, и я решил скостылить имгуй на ультра минималках. По-моему, потенциал в этой штуке есть, но не в моих руках..
Но! Я всё же попытаюсь довести эту штуку до ума.

На данный момент присутствуют след. фишки:
- Text
- Button
- Checkbox
- Spacing
- Кастомизация стилей

Планы на ближайшее будущее:
- Пофиксить апдейт после нажатия кнопок
- Слайдер
- Кейбинд


Пример:​
C++:
Expand Collapse Copy
#include "scgui.hpp"
#include <thread>

void gui()
{
    ScGui::Window("Hello ScGui!", { 0, 0 }, { 250, 200 });

    while (true)
    {
        static bool checkboxCheck = false;

        if (ScGui::Update())
        {
            ScGui::Text("Hello ScGui!");
            ScGui::Checkbox("Some checkbox lul!", checkboxCheck);

            if (ScGui::Button("Boo button example!"))
            {
                ScGui::Text("Boo!");
            }
        }

        Sleep(1);
    }
}

int main(void)
{
    thread ScGuiThread(gui);
    ScGuiThread.join();
}
Looks cool, gonna give it a try, if this is what I think that it is +rep
edit; +rep useful
 
Последнее редактирование:
Посмотреть вложение 168750
Представляю вашему вниманию, пожалуй, самый говняный говнокод из всех говнокодов - ScGui!
Мне было очень скучно, и я решил скостылить имгуй на ультра минималках. По-моему, потенциал в этой штуке есть, но не в моих руках..
Но! Я всё же попытаюсь довести эту штуку до ума.

На данный момент присутствуют след. фишки:
- Text
- Button
- Checkbox
- Spacing
- Кастомизация стилей

Планы на ближайшее будущее:
- Пофиксить апдейт после нажатия кнопок
- Слайдер
- Кейбинд


Пример:​
C++:
Expand Collapse Copy
#include "scgui.hpp"
#include <thread>

void gui()
{
    ScGui::Window("Hello ScGui!", { 0, 0 }, { 250, 200 });

    while (true)
    {
        static bool checkboxCheck = false;

        if (ScGui::Update())
        {
            ScGui::Text("Hello ScGui!");
            ScGui::Checkbox("Some checkbox lul!", checkboxCheck);

            if (ScGui::Button("Boo button example!"))
            {
                ScGui::Text("Boo!");
            }
        }

        Sleep(1);
    }
}

int main(void)
{
    thread ScGuiThread(gui);
    ScGuiThread.join();
}
Вряд-ли в 21 году кому это надо, но задумка прикольная, саморазвитие)
 
Как оказалось, апдейт после нажатия кнопок работает отлично, просто нехер было туда пихать вывод текста по нажатию..
Пример простенькой менюкши с "табами":
C++:
Expand Collapse Copy
void gui()
{
    ScGui::Window("Essence Lite", { 0, 0 }, { 300, 150 });

    while (true)
    {
        static int tabIndex = 0;


        if (ScGui::Update())
        {
            ScGuiStyle::PushStyle({
                12, // red
                NULL // black
                }, false);

            ScGuiStyle::ButtonStyle.LeftBorder = "";
            ScGuiStyle::ButtonStyle.RightBorder = "";
            ScGuiStyle::ButtonStyle.Icon = "";

            if (ScGui::Button("Visuals", false)) tabIndex = 0;
            ScGui::Spacing(1, 0);
            if (ScGui::Button("Misc", true)) tabIndex = 1;

            ScGuiStyle::ResetStyle();

            ScGui::Separator(SCGUIAXIS_HORIZONTAL, 25);

            if (tabIndex == 0)
            {
                ScGui::Checkbox("Glow ESP", true, GlowESP);
                ScGui::Checkbox("Health based", true, HealthBased);
            }
            else if (tabIndex == 1)
            {
                ScGui::Checkbox("Bunnyhop", true, BunnyHop);
                ScGui::Button("Save config", true);
                ScGui::Button("Load config", true);
            }
        }

        Sleep(1);
    }
}
1630143136381.png
P.S.: У вас, смертных, ещё нет сепаратора, можете просто вывести 25 тире =)
UPD.: Уже есть. Теперь, для перехода на след. строку необходимо указать "true" вторым аргументом элемента.
 
Последнее редактирование:
Обновление!
Добавил след. штуки:
- TextA (анимированный текст, юзать не советую)
- SliderInt / SliderFloat (есть небольшой баг, если на других элементах тыкнуть влево или вправо, то при "наведении" на слайдер добавится 1 * шаг, который вы поставили) - их работу можно увидеть в видике (ссылка в ответе iDesync'у)
Примеры использования:
ScGui::TextA("Lalala", true, 50);
ScGui::SliderInt("Slider test", true, iValue, 1 /* step */, -10 /* min */, 10 /* max */);

Upd.: Забыл! Ещё добавил Tooltip! (подсказка)
Пример:
C++:
Expand Collapse Copy
ScGui::Checkbox("Glow ESP", false, bGlowESP);
ScGui::Tooltip("Applies glow effect to enemies", true);

Upd.2: Обновил пример, т.к. были некоторые изменения во внутрянке!
 
Последнее редактирование:
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Выглядит хайпово ставлю классы
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Всё топ, но мерцает
 
(кому не всё равно...)
Обновление! Добавил возможность кастомизации стилей.
Пример:
C++:
Expand Collapse Copy
ScGuiStyle::PushStyle({
    FOREGROUND_BLUE,
    NULL,
    {
        "@"
    },
    {
        "/",
        "",
        "!"
    },
    {
        "/",
        "",
        "+",
        "-"
    }
    }, false);
ScGuiStyle::PushStyle() принимает 2 параметра (или аргумента, кому как угодно): SCGUISTYLE (структуру ниже прикреплю) и bool IgnoreConsoleParams.
IgnoreConsoleParams true если хотите, чтоб консолька не красилась. Нужно на случай, если захотите просто поменять элементы.
Сбросить стили в рантайме можно при помощи ScGuiStyle::ResetStyle();
C++:
Expand Collapse Copy
struct SCGUISTYLE
{
    WORD ForegroundColor;
    WORD BackgroundColor;
    SCGUICURSORSTYLE CursorStyle;
    SCGUIBUTTONSTYLE ButtonStyle;
    SCGUICHECKBOXSTYLE CheckboxStyle;
};
C++:
Expand Collapse Copy
struct SCGUICURSORSTYLE
{
    string Icon = ">";
};

struct SCGUIBUTTONSTYLE
{
    string LeftBorder = "[";
    string RightBorder = "]";
    string Icon = "#";
};

struct SCGUICHECKBOXSTYLE
{
    string LeftBorder = "[";
    string RightBorder = "]";
    string ToggledIcon = "+";
    string NotToggledIcon = "-";
};
Апдейт после нажатия кнопки так и не пофиксил, да..
нахуя тип string если у тебя 1 символ?
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Назад
Сверху Снизу