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

keep silence
Участник
Статус
Оффлайн
Регистрация
17 Дек 2018
Сообщения
546
Реакции[?]
201
Поинты[?]
0
1630143259862.png
Представляю вашему вниманию главного конкурента всяких ваших имгуев (шутка) - ScGui!
Да, мне было очень скучно. По-моему, небольшой потенциал в этой штуке есть, и я всё же попытаюсь довести её до ума.

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

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


Пример:​
C++:
#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();
}
 

Вложения

Последнее редактирование:
Забаненный
Статус
Оффлайн
Регистрация
6 Дек 2019
Сообщения
643
Реакции[?]
322
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Посмотреть вложение 168750
Представляю вашему вниманию, пожалуй, самый говняный говнокод из всех говнокодов - ScGui!
Мне было очень скучно, и я решил скостылить имгуй на ультра минималках. По-моему, потенциал в этой штуке есть, но не в моих руках..
Но! Я всё же попытаюсь довести эту штуку до ума.

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


Пример:​
C++:
#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
 
keep silence
Участник
Статус
Оффлайн
Регистрация
17 Дек 2018
Сообщения
546
Реакции[?]
201
Поинты[?]
0
Щас пытаюсь сделать стили более удобными, а пока что вот такой простенький результат получается:
Снимок.PNG
 
feel irl
Участник
Статус
Оффлайн
Регистрация
21 Дек 2018
Сообщения
677
Реакции[?]
294
Поинты[?]
16K
Подсказка:
Делай так что бы оно подключалось и работало в две строчки.
Это намного лучше будет, ибо меньше проблем с установкой в проект и так далее.
Идея интересная, я пытался делать что-то типа такого, но забросил.
Надеюсь ты, осуществишь это нормально и сделаешь всё норм.

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

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

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

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

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


Пример:​
C++:
#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
 
Последнее редактирование:
Пользователь
Статус
Оффлайн
Регистрация
10 Ноя 2019
Сообщения
839
Реакции[?]
135
Поинты[?]
0
Посмотреть вложение 168750
Представляю вашему вниманию, пожалуй, самый говняный говнокод из всех говнокодов - ScGui!
Мне было очень скучно, и я решил скостылить имгуй на ультра минималках. По-моему, потенциал в этой штуке есть, но не в моих руках..
Но! Я всё же попытаюсь довести эту штуку до ума.

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

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


Пример:​
C++:
#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 году кому это надо, но задумка прикольная, саморазвитие)
 
keep silence
Участник
Статус
Оффлайн
Регистрация
17 Дек 2018
Сообщения
546
Реакции[?]
201
Поинты[?]
0
keep silence
Участник
Статус
Оффлайн
Регистрация
17 Дек 2018
Сообщения
546
Реакции[?]
201
Поинты[?]
0
Как оказалось, апдейт после нажатия кнопок работает отлично, просто нехер было туда пихать вывод текста по нажатию..
Пример простенькой менюкши с "табами":
C++:
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" вторым аргументом элемента.
 
Последнее редактирование:
Легенда форума
Статус
Оффлайн
Регистрация
10 Дек 2018
Сообщения
4,374
Реакции[?]
2,279
Поинты[?]
184K
Крутая идея. Мне интересно как это работает, дай медию, пожалуйста)
 
keep silence
Участник
Статус
Оффлайн
Регистрация
17 Дек 2018
Сообщения
546
Реакции[?]
201
Поинты[?]
0
keep silence
Участник
Статус
Оффлайн
Регистрация
17 Дек 2018
Сообщения
546
Реакции[?]
201
Поинты[?]
0
Обновление!
Добавил след. штуки:
- 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++:
ScGui::Checkbox("Glow ESP", false, bGlowESP);
ScGui::Tooltip("Applies glow effect to enemies", true);
Upd.2: Обновил пример, т.к. были некоторые изменения во внутрянке!
 
Последнее редактирование:
Дизайнер со стажем 30 лет Говард подтвердит
Забаненный
Статус
Оффлайн
Регистрация
13 Май 2021
Сообщения
235
Реакции[?]
101
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Выглядит хайпово ставлю классы
 
контора пидорасов
Забаненный
Статус
Оффлайн
Регистрация
1 Июл 2021
Сообщения
191
Реакции[?]
42
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Всё топ, но мерцает
 
bruh
Участник
Статус
Оффлайн
Регистрация
15 Апр 2017
Сообщения
1,299
Реакции[?]
365
Поинты[?]
0
(кому не всё равно...)
Обновление! Добавил возможность кастомизации стилей.
Пример:
C++:
ScGuiStyle::PushStyle({
    FOREGROUND_BLUE,
    NULL,
    {
        "@"
    },
    {
        "/",
        "",
        "!"
    },
    {
        "/",
        "",
        "+",
        "-"
    }
    }, false);
ScGuiStyle::PushStyle() принимает 2 параметра (или аргумента, кому как угодно): SCGUISTYLE (структуру ниже прикреплю) и bool IgnoreConsoleParams.
IgnoreConsoleParams true если хотите, чтоб консолька не красилась. Нужно на случай, если захотите просто поменять элементы.
Сбросить стили в рантайме можно при помощи ScGuiStyle::ResetStyle();
C++:
struct SCGUISTYLE
{
    WORD ForegroundColor;
    WORD BackgroundColor;
    SCGUICURSORSTYLE CursorStyle;
    SCGUIBUTTONSTYLE ButtonStyle;
    SCGUICHECKBOXSTYLE CheckboxStyle;
};
C++:
struct SCGUICURSORSTYLE
{
    string Icon = ">";
};

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

struct SCGUICHECKBOXSTYLE
{
    string LeftBorder = "[";
    string RightBorder = "]";
    string ToggledIcon = "+";
    string NotToggledIcon = "-";
};
Апдейт после нажатия кнопки так и не пофиксил, да..
нахуя тип string если у тебя 1 символ?
 
контора пидорасов
Забаненный
Статус
Оффлайн
Регистрация
1 Июл 2021
Сообщения
191
Реакции[?]
42
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Сверху Снизу