Исходник [gui] button animation

Участник
Статус
Оффлайн
Регистрация
6 Апр 2021
Сообщения
338
Реакции[?]
207
Поинты[?]
113K
You can see how the animation looks like here:

C++:
// Warning: gheto code

// vars
/* for animation */
static int e_alpha3[ framework::e_maximum ];
static int e_alpha4[ framework::e_maximum ];
static bool clicked{};
static bool finished{true};
static bool dischanrged{ false };
static bool reverse{ false };

if ( !framework::g_framework->e_framework.e_colorpicker_open && object_handling::g_object_handling->is_possible( ) &&
     input::g_input->key_pressed( VK_LBUTTON ) && input::g_input->mouse_pointer( { e_pos.x, e_pos.y + 17 }, { 173, 20 } ) ) {
    reverse = false;
    dischanrged = false;
    finished = false;
    clicked = !clicked;
}

auto run_animation = [ ]( int group_num, bool state ) -> void {
    if ( state ) {
        /* handle animation */
        e_alpha3[ group_num ] -= 4;
        e_alpha4[ group_num ] += 3;
    }
    else {
        e_alpha3[ group_num ] += 4;
        e_alpha4[ group_num ] -= 3;
    }

    /* setup it */
    if ( e_alpha3[ group_num ] > 255 )
        e_alpha3[ group_num ] = 255;

    if ( e_alpha3[ group_num ] < 0 )
        e_alpha3[ group_num ] = 0;

    /* setup it 2 */
    if ( e_alpha4[ group_num ] > 255 ) {
        e_alpha4[ group_num ] = 255;
    }

    if ( e_alpha4[ group_num ] < 0 ) {
        e_alpha4[ group_num ] = 0;
    }

    if ( e_alpha4[ group_num ] == 0 ) {
        dischanrged = true;
    }
        
    /* clamp it */
    std::clamp<int>( e_alpha3[ group_num ], 0, 255 );
    std::clamp<int>( e_alpha4[ group_num ], 0, 255 );
};
run_animation( object_handling::g_object_handling->get_index( ), clicked );

int position;
position = ( ( this->e_pos.x + 219 + ( resize_x / 2 ) ) + 2 ) * ( e_alpha4[ object_handling::g_object_handling->get_index( ) ] / 255.f );
if ( position >= ( ( this->e_pos.x + 219 + ( resize_x / 2 ) ) + 2 ) - 50 ) {
    clicked = false;
    reverse = true;

    if ( dischanrged )
        finished = true;
}

if ( !finished && !dischanrged ) {
    render::g_render->add_rect_filled( this->e_pos.x + ( 180 + ( resize_x / 2 ) ) * ( e_alpha4[ object_handling::g_object_handling->get_index( ) ] / 255.f ),
                                             this->e_pos.y + 38, 50, 2, themes::g_theme->theme.accent, 2 );
}
 
Эксперт
Статус
Оффлайн
Регистрация
7 Сен 2019
Сообщения
2,107
Реакции[?]
984
Поинты[?]
88K
C++:
auto run_animation = [ ]( int group_num, bool state ) -> void {
    if ( state ) {
        /* handle animation */
        e_alpha3[ group_num ] -= 4;
        e_alpha4[ group_num ] += 3;
    }
    else {
        e_alpha3[ group_num ] += 4;
        e_alpha4[ group_num ] -= 3;
    }

    /* setup it */
    if ( e_alpha3[ group_num ] > 255 )
        e_alpha3[ group_num ] = 255;

    if ( e_alpha3[ group_num ] < 0 )
        e_alpha3[ group_num ] = 0;

    /* setup it 2 */
    if ( e_alpha4[ group_num ] > 255 ) {
        e_alpha4[ group_num ] = 255;
    }

    if ( e_alpha4[ group_num ] < 0 ) {
        e_alpha4[ group_num ] = 0;
    }

    if ( e_alpha4[ group_num ] == 0 ) {
        dischanrged = true;
    }
     
    /* clamp it */
    std::clamp<int>( e_alpha3[ group_num ], 0, 255 );
    std::clamp<int>( e_alpha4[ group_num ], 0, 255 );
};
The fuck are you doing buddy? Are you insane or something
 
эксперт в майнкрафт апи
Read Only
Статус
Оффлайн
Регистрация
25 Янв 2023
Сообщения
684
Реакции[?]
287
Поинты[?]
22K
You can see how the animation looks like here:

C++:
auto run_animation = [ ]( int group_num, bool state ) -> void {
    if ( state ) {
        /* handle animation */
        e_alpha3[ group_num ] -= 4;
        e_alpha4[ group_num ] += 3;
    }
    else {
        e_alpha3[ group_num ] += 4;
        e_alpha4[ group_num ] -= 3;
    }

    /* setup it */
    if ( e_alpha3[ group_num ] > 255 )
        e_alpha3[ group_num ] = 255;

    if ( e_alpha3[ group_num ] < 0 )
        e_alpha3[ group_num ] = 0;

    /* setup it 2 */
    if ( e_alpha4[ group_num ] > 255 ) {
        e_alpha4[ group_num ] = 255;
    }

    if ( e_alpha4[ group_num ] < 0 ) {
        e_alpha4[ group_num ] = 0;
    }

    if ( e_alpha4[ group_num ] == 0 ) {
        dischanrged = true;
    }
       
    /* clamp it */
    std::clamp<int>( e_alpha3[ group_num ], 0, 255 );
    std::clamp<int>( e_alpha4[ group_num ], 0, 255 );
};
}
я правильно понимаю что это даблкламп или мои глаза меня обманывают?

код просто пиздец ебаный, комментарии на уровне
Код:
// создадим переменную a со значением 0
int a = 0;
комментарии к коду - bad practice в 99% случаев.программист должен выражать свои хотелки на уровне названий мемберов(extract method pattern/etc)

* я не разбираюсь в ваших анимациях, но почему переменные статичные?ооп идет нахуй?
* я не разбираюсь в ваших анимациях, но почему вы строите анимацию на линейных функциях, когда можно сделать переменную для анимации, инкрементить/декрементить ее клампя в 0-1 и потом мапить ее функцией анимации коих миллион в интернете?
 
Femboy Access
Эксперт
Статус
Оффлайн
Регистрация
11 Ноя 2020
Сообщения
1,334
Реакции[?]
428
Поинты[?]
96K
animations.h:
#pragma once
class animation {
public:
    animation(float i = 0.f) : value(i) {}

    void update(float to_value, float duration = 0.15f);
    float value;
};
animations.cpp:
#include "animations.h"

#include <ctime>
#include <cmath>
#include "../imgui/imgui.h"

inline float ease(float time, float start_value, float change_value, float duration) {
    return change_value * time / duration + start_value;
}

float resolve_value(float clock, float previous_value, float new_value, float duration) {
    float value = ease(clock, previous_value, new_value - previous_value, duration);

    if (std::abs(value) < .001f) {
        value = new_value;
    }

    if (std::fmod(value, 1) < .001f) {
        value = std::floor(value);
    }
    else if (std::fmod(value, 1) > .99f) {
        value = std::ceil(value);
    }

    return value;
}

void animation::update(float to_value, float duration) {
    this->value = resolve_value(ImGui::GetIO().DeltaTime, this->value, to_value, duration);
}
 
эксперт в майнкрафт апи
Read Only
Статус
Оффлайн
Регистрация
25 Янв 2023
Сообщения
684
Реакции[?]
287
Поинты[?]
22K
animations.h:
#pragma once
class animation {
public:
    animation(float i = 0.f) : value(i) {}

    void update(float to_value, float duration = 0.15f);
    float value;
};
animations.cpp:
#include "animations.h"

#include <ctime>
#include <cmath>
#include "../imgui/imgui.h"

inline float ease(float time, float start_value, float change_value, float duration) {
    return change_value * time / duration + start_value;
}

float resolve_value(float clock, float previous_value, float new_value, float duration) {
    float value = ease(clock, previous_value, new_value - previous_value, duration);

    if (std::abs(value) < .001f) {
        value = new_value;
    }

    if (std::fmod(value, 1) < .001f) {
        value = std::floor(value);
    }
    else if (std::fmod(value, 1) > .99f) {
        value = std::ceil(value);
    }

    return value;
}

void animation::update(float to_value, float duration) {
    this->value = resolve_value(ImGui::GetIO().DeltaTime, this->value, to_value, duration);
}
зачем abs/ceil/floor?почему доступ к "value" не инкапсулирован?

не берусь судить создание анимации в следствии того, что не шарю за имгуй, но добавлю, что видел альтернативные варианты создания анимаций в играх с тикрейтом которые выглядят "надежнее":roflanEbalo:.
 
эксперт в майнкрафт апи
Read Only
Статус
Оффлайн
Регистрация
25 Янв 2023
Сообщения
684
Реакции[?]
287
Поинты[?]
22K
sove у тебя есть какие то притензии к моему сообщению?каков смысл реакции?
 
Femboy Access
Эксперт
Статус
Оффлайн
Регистрация
11 Ноя 2020
Сообщения
1,334
Реакции[?]
428
Поинты[?]
96K
зачем abs/ceil/floor?почему доступ к "value" не инкапсулирован?
потому что я пастил
Пожалуйста, авторизуйтесь для просмотра ссылки.


про абс/сейл/флоор - без этого кринжа анимка будет ОООООЧЕНЬ долго идти например с 0.999999 к 1

не стал врапить во всякие гетвалюе потому что мне было лень и я это писал пол года назад для нотифаев в стандофф 2 чит, если буду переписывать - возьму на замет очку
 
эксперт в майнкрафт апи
Read Only
Статус
Оффлайн
Регистрация
25 Янв 2023
Сообщения
684
Реакции[?]
287
Поинты[?]
22K
про абс/сейл/флоор - без этого кринжа анимка будет ОООООЧЕНЬ долго идти например с 0.999999 к 1
тотальный skill issue
в целом, я уже упоминал, что конструкция выглядит ненадежно
 
купить дизайн: yougame.biz/threads/155999
Дизайнер
Статус
Оффлайн
Регистрация
19 Сен 2018
Сообщения
794
Реакции[?]
1,381
Поинты[?]
9K
не стал врапить во всякие гетвалюе потому что мне было лень и я это писал пол года назад для нотифаев в стандофф 2 чит, если буду переписывать - возьму на замет очку
вероятно не стоит брать каждый совет из учебника по ооп за истину и использовать там, где не стоит............
 
эксперт в майнкрафт апи
Read Only
Статус
Оффлайн
Регистрация
25 Янв 2023
Сообщения
684
Реакции[?]
287
Поинты[?]
22K
вероятно не стоит брать каждый совет из учебника по ооп за истину и использовать там, где не стоит............
маня, уж поверь, твое мнение лежит в 10 км от мнения написанного в учебнике про ооп)

не надо тут проверенное временем правило ставить под вопрос надобности.
инкапсуляция - база.
мне на полном серьезе описывать причины и плюсы инкапсуляции в этом контексте?)

другие нормальные разработчики могут не знать о твоих диагнозах и фобиях во время взаимодействия с твоим кодом.тащить отчеты врача и давать читать другим кодерам?попахивает оверхедом.
 
HvH Legend
Пользователь
Статус
Оффлайн
Регистрация
23 Окт 2022
Сообщения
366
Реакции[?]
95
Поинты[?]
25K
You can see how the animation looks like here:

C++:
// Warning: gheto code

// vars
/* for animation */
static int e_alpha3[ framework::e_maximum ];
static int e_alpha4[ framework::e_maximum ];
static bool clicked{};
static bool finished{true};
static bool dischanrged{ false };
static bool reverse{ false };

if ( !framework::g_framework->e_framework.e_colorpicker_open && object_handling::g_object_handling->is_possible( ) &&
     input::g_input->key_pressed( VK_LBUTTON ) && input::g_input->mouse_pointer( { e_pos.x, e_pos.y + 17 }, { 173, 20 } ) ) {
    reverse = false;
    dischanrged = false;
    finished = false;
    clicked = !clicked;
}

auto run_animation = [ ]( int group_num, bool state ) -> void {
    if ( state ) {
        /* handle animation */
        e_alpha3[ group_num ] -= 4;
        e_alpha4[ group_num ] += 3;
    }
    else {
        e_alpha3[ group_num ] += 4;
        e_alpha4[ group_num ] -= 3;
    }

    /* setup it */
    if ( e_alpha3[ group_num ] > 255 )
        e_alpha3[ group_num ] = 255;

    if ( e_alpha3[ group_num ] < 0 )
        e_alpha3[ group_num ] = 0;

    /* setup it 2 */
    if ( e_alpha4[ group_num ] > 255 ) {
        e_alpha4[ group_num ] = 255;
    }

    if ( e_alpha4[ group_num ] < 0 ) {
        e_alpha4[ group_num ] = 0;
    }

    if ( e_alpha4[ group_num ] == 0 ) {
        dischanrged = true;
    }
       
    /* clamp it */
    std::clamp<int>( e_alpha3[ group_num ], 0, 255 );
    std::clamp<int>( e_alpha4[ group_num ], 0, 255 );
};
run_animation( object_handling::g_object_handling->get_index( ), clicked );

int position;
position = ( ( this->e_pos.x + 219 + ( resize_x / 2 ) ) + 2 ) * ( e_alpha4[ object_handling::g_object_handling->get_index( ) ] / 255.f );
if ( position >= ( ( this->e_pos.x + 219 + ( resize_x / 2 ) ) + 2 ) - 50 ) {
    clicked = false;
    reverse = true;

    if ( dischanrged )
        finished = true;
}

if ( !finished && !dischanrged ) {
    render::g_render->add_rect_filled( this->e_pos.x + ( 180 + ( resize_x / 2 ) ) * ( e_alpha4[ object_handling::g_object_handling->get_index( ) ] / 255.f ),
                                             this->e_pos.y + 38, 50, 2, themes::g_theme->theme.accent, 2 );
}
Имба брошка. Теперь пошли новые менюшки делать)
 
Участник
Статус
Оффлайн
Регистрация
23 Апр 2022
Сообщения
695
Реакции[?]
328
Поинты[?]
12K
вероятно не стоит брать каждый совет из учебника по ооп за истину и использовать там, где не стоит............
Есть доля правды, но в данном случае инкапсулировать value хорошая практика ;c
 
Сверху Снизу