Исходник Gamesense health bar

zzz
Участник
Участник
Статус
Оффлайн
Регистрация
25 Сен 2017
Сообщения
940
Реакции
307
****:
Expand Collapse Copy
              constexpr auto k_max_hp = 100;

              const auto bbox_x = bbox.mins( ).x( ), bbox_y = bbox.mins( ).y( ),
                bbox_h = bbox.maxs( ).y( ) - bbox.mins( ).y( );
          
            const auto hp = std::clamp( record.m_hp, 0, csgo::k_max_hp );

            constexpr auto bar_w = 2.f, stroke = 1.f, pad = 1.f;

            const auto outlined_bar_w = stroke * 2.f + bar_w + pad;
            const auto bar_x = bbox_x - outlined_bar_w;

            const auto bar_h = static_cast< int >(
                std::round( hp * bbox_h / static_cast< float >( csgo::k_max_hp ) ) );

            m_draw_buffer->outlined_rect( bar_x, bbox_y,
                bar_w, bbox_h, sdk::col_t( 0, 0, 0, 120 * alpha_modifier ) );

            m_draw_buffer->filled_rect( bar_x - stroke, bbox_y - stroke,
                bar_w + ( stroke * 2.f ), bbox_h + ( stroke * 2.f ), sdk::col_t( 0, 0, 0, 220 * alpha_modifier ) );

            const auto hayasaka = ( std::clamp< float >( hp, 25, 75 ) - 25.f ) / 50.f;

            auto col = sdk::col_t( 120.f + 135.f * ( 1.f - hayasaka ), 50.f + 175.f * hayasaka, 80 );

            if ( dormant )
                col = sdk::col_t::from_hsba( col.hue( ), 0.f, col.brightness( ),
                    static_cast< float >( col.a( ) / sdk::col_t::k_lim ) * alpha_modifier );

            m_draw_buffer->filled_rect( bar_x, bbox_y + bbox_h - bar_h, bar_w, bar_h, col );

            if ( hp != csgo::k_max_hp )
                m_small_fonts_8->draw( bar_x, bbox_y + ( bbox_h - bar_h ) - outlined_bar_w, sdk::col_t( 255, 255, 255, 200 * alpha_modifier ),
                    std::to_string( hp ), sdk::e_align::center | sdk::e_align::outline );

health bar как в GAMESENSE
демонстрация:
hmqAXwy.png


special thanks to: @sove @sovvve @enQ @lxrdjustice @Zodiak @esoterik
 
Последнее редактирование:
дайте пожалупста код для
filled_rect
у меня крашит из дампа
 
думаю достаточно неплохой, а главное полезный пост
все таки как минимум, по моему мнению, пастеры отсюда смогут взять нормальную калькуляцию цвета в зависимости от hp,
а то всякие пастульки имеют такие ужасные цвета, что совсем не круто
 
Последнее редактирование модератором:
все понравилось все подходит всем спасибо
 
****:
Expand Collapse Copy
              constexpr auto k_max_hp = 100;

              const auto bbox_x = bbox.mins( ).x( ), bbox_y = bbox.mins( ).y( ),
                bbox_h = bbox.maxs( ).y( ) - bbox.mins( ).y( );
         
            const auto hp = std::clamp( record.m_hp, 0, csgo::k_max_hp );

            constexpr auto bar_w = 2.f, stroke = 1.f, pad = 1.f;

            const auto outlined_bar_w = stroke * 2.f + bar_w + pad;
            const auto bar_x = bbox_x - outlined_bar_w;

            const auto bar_h = static_cast< int >(
                std::round( hp * bbox_h / static_cast< float >( csgo::k_max_hp ) ) );

            m_draw_buffer->outlined_rect( bar_x, bbox_y,
                bar_w, bbox_h, sdk::col_t( 0, 0, 0, 120 * alpha_modifier ) );

            m_draw_buffer->filled_rect( bar_x - stroke, bbox_y - stroke,
                bar_w + ( stroke * 2.f ), bbox_h + ( stroke * 2.f ), sdk::col_t( 0, 0, 0, 220 * alpha_modifier ) );

            const auto hayasaka = ( std::clamp< float >( hp, 25, 75 ) - 25.f ) / 50.f;

            auto col = sdk::col_t( 120.f + 135.f * ( 1.f - hayasaka ), 50.f + 175.f * hayasaka, 80 );

            if ( dormant )
                col = sdk::col_t::from_hsba( col.hue( ), 0.f, col.brightness( ),
                    static_cast< float >( col.a( ) / sdk::col_t::k_lim ) * alpha_modifier );

            m_draw_buffer->filled_rect( bar_x, bbox_y + bbox_h - bar_h, bar_w, bar_h, col );

            if ( hp != csgo::k_max_hp )
                m_small_fonts_8->draw( bar_x, bbox_y + ( bbox_h - bar_h ) - outlined_bar_w, sdk::col_t( 255, 255, 255, 200 * alpha_modifier ),
                    std::to_string( hp ), sdk::e_align::center | sdk::e_align::outline );

health bar как в GAMESENSE
демонстрация:
hmqAXwy.png


special thanks to: @sove @sovvve @enQ @lxrdjustice @Zodiak @esoterik
static_cast< float >( csgo::k_max_hp )
А слабо сразу сделать статик флоат?
 
static_cast< float >( csgo::k_max_hp )
А слабо сразу сделать статик флоат?
m_iHealth в данной игре измеряется в инте, поэтому константа соответственно хранится тоже в инте
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
****:
Expand Collapse Copy
              constexpr auto k_max_hp = 100;

              const auto bbox_x = bbox.mins( ).x( ), bbox_y = bbox.mins( ).y( ),
                bbox_h = bbox.maxs( ).y( ) - bbox.mins( ).y( );
         
            const auto hp = std::clamp( record.m_hp, 0, csgo::k_max_hp );

            constexpr auto bar_w = 2.f, stroke = 1.f, pad = 1.f;

            const auto outlined_bar_w = stroke * 2.f + bar_w + pad;
            const auto bar_x = bbox_x - outlined_bar_w;

            const auto bar_h = static_cast< int >(
                std::round( hp * bbox_h / static_cast< float >( csgo::k_max_hp ) ) );

            m_draw_buffer->outlined_rect( bar_x, bbox_y,
                bar_w, bbox_h, sdk::col_t( 0, 0, 0, 120 * alpha_modifier ) );

            m_draw_buffer->filled_rect( bar_x - stroke, bbox_y - stroke,
                bar_w + ( stroke * 2.f ), bbox_h + ( stroke * 2.f ), sdk::col_t( 0, 0, 0, 220 * alpha_modifier ) );

            const auto hayasaka = ( std::clamp< float >( hp, 25, 75 ) - 25.f ) / 50.f;

            auto col = sdk::col_t( 120.f + 135.f * ( 1.f - hayasaka ), 50.f + 175.f * hayasaka, 80 );

            if ( dormant )
                col = sdk::col_t::from_hsba( col.hue( ), 0.f, col.brightness( ),
                    static_cast< float >( col.a( ) / sdk::col_t::k_lim ) * alpha_modifier );

            m_draw_buffer->filled_rect( bar_x, bbox_y + bbox_h - bar_h, bar_w, bar_h, col );

            if ( hp != csgo::k_max_hp )
                m_small_fonts_8->draw( bar_x, bbox_y + ( bbox_h - bar_h ) - outlined_bar_w, sdk::col_t( 255, 255, 255, 200 * alpha_modifier ),
                    std::to_string( hp ), sdk::e_align::center | sdk::e_align::outline );

health bar как в GAMESENSE
демонстрация:
hmqAXwy.png


special thanks to: @sove @sovvve @enQ @lxrdjustice @Zodiak @esoterik
fake / wrong reversed, this is not skeet's at all only the color is 1:1 the same but not the way it works
skeet doesnt show hp amount until gun lethality lol (example on scout if he has 94hp it wont show up)
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
ну тогда оно тем более бесполезно
к тому же это можно и проще сделать, а не делать говно-формулы и ограничивать половину значений
 
Последнее редактирование модератором:
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
ок сделай, раз ты такой крутой кодер


Код:
Expand Collapse Copy
float health_step = data->health / 100.f;
bar_clr = std::lerp(green_clr, red_clr, 1.f - health);

это псевдо, но гораздо лучше, чем
Код:
Expand Collapse Copy
            const auto hayasaka = ( std::clamp< float >( hp, 25, 75 ) - 25.f ) / 50.f;

            auto col = sdk::col_t( 120.f + 135.f * ( 1.f - hayasaka ), 50.f + 175.f * hayasaka, 80 );
 
Код:
Expand Collapse Copy
float health_step = data->health / 100.f;
bar_clr = std::lerp(green_clr, red_clr, 1.f - health);

это псевдо, но гораздо лучше, чем
Код:
Expand Collapse Copy
            const auto hayasaka = ( std::clamp< float >( hp, 25, 75 ) - 25.f ) / 50.f;

            auto col = sdk::col_t( 120.f + 135.f * ( 1.f - hayasaka ), 50.f + 175.f * hayasaka, 80 );
функция была инлайнута для того, чтобы в независимости от имплементации lerp любой желающий смог перенести данный код себе, очевидно что с лерпом код будет более опрятным и читабельным
 
Последнее редактирование:
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
и? это тоже можно исправить
тебе ничего не мешает сделать лерп от 120 до 255 и так далее
не знаю к чему ты вообще это написал, весь смысл треда в этой функции.
ты лишь скинул код, который во всех пастульках является причиной ужасного болотного цвета на ~68hp
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
не знаю к чему ты вообще это написал, весь смысл треда в этой функции.
потому что тред залупа, причем не смешная
было бы что то рофельное, то я бы замолчал

ты лишь скинул код, который во всех пастульках является причиной ужасного болотного цвета на ~68hp
извини не знал что это делает цвет болотным
 
now why have you done this
 
думаю достаточно неплохой, а главное полезный пост
все таки как минимум, по моему мнению, пастеры отсюда смогут взять нормальную калькуляцию цвета в зависимости от hp,
а то всякие пастульки имеют такие ужасные цвета, что совсем не круто
это все равно не 1:1 как скит, у скита хардкод цвета с 3 if условиями...
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Назад
Сверху Снизу