Исходник Animated health bar

  • Автор темы Автор темы ikfakof
  • Дата начала Дата начала
push me to the edge
Олдфаг
Олдфаг
Статус
Оффлайн
Регистрация
22 Мар 2017
Сообщения
2,335
Реакции
1,204
Ну решил я значит запилить себе рич хп бар, делюсь кодом
C++:
Expand Collapse Copy
constexpr float SPEED_FREQ = 255 / 1.0f;

void CEsp::DrawHealthBar( C_CSPlayer* player, Rect2D bbox ) {
   Color col_black = Color ( 0, 0, 0, static_cast< int > ( m_flAlpha[ player->entindex( ) ] ) );
   int player_hp = player->m_iHealth( );
   int player_hp_max = 100;

   static float prev_player_hp[ 65 ];

   if ( prev_player_hp[ player->entindex( ) ] > player_hp )
      prev_player_hp[ player->entindex( ) ] -= SPEED_FREQ * Source::m_pGlobalVars->frametime;
   else
      prev_player_hp[ player->entindex( ) ] = player_hp;

   float x = bbox.left - 10, float y = bbox.top, width = fabsf( bbox.bottom - bbox.top ) - ( ( ( fabsf( bbox.bottom - bbox.top ) * prev_player_hp[ player->entindex( ) ] ) / player_hp_max ) );
   float w = 4, h = fabsf( bbox.bottom - bbox.top );

   Color fill = Color ( static_cast< int > ( ( 130.0f - player_hp * 1.3f ) ), static_cast< int > ( ( player_hp * 2.55f ) ), 10, static_cast< int > ( ( m_flAlpha[ player->entindex( ) ] ) ) );
   Color color = Color ( 255, 255, 255, static_cast< int > ( ( m_flAlpha[ player->entindex( ) ] * 0.85f ) ) );

   Render::Get( )->SetTextFont( FONT_VISITOR );
   Render::Get( )->AddRectFilled( Vector2D( x + 3, y - 1 ), Vector2D( x + w + 3, y + h + 1 ), Color ( 0.0f, 0.0f, 0.0f, m_flAlpha[ player->entindex( ) ] / 357.0f ) );
   Render::Get( )->AddRectFilled( Vector2D( x + 4, y + width ), Vector2D( x + w - 1 + 3, y + h ), fill );

   if ( player_hp != 100 ) 
      Render::Get( )->AddText( Vector2D( x + 3, y + width + 1 ), color, OUTLINED | CENTER_X | CENTER_Y, "%d", player_hp );
}
EDIT: Отрефакторил
Демонстрация работы
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Последнее редактирование:
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
ne nu spasibo opyat za dump ftality
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Годнотаааа
 
Рефакторинг? Не, не слышал.
Вот так лучше наверное (хотя тоже так себе):
C++:
Expand Collapse Copy
void CEsp::DrawHealthBar(C_CSPlayer* player, Rect2D bbox)
{
   int player_index = player->entindex();
   int player_hp = player->m_iHealth( );
   int player_hp_max = 100;

   static float prev_player_hp[65];
   constexpr float SPEED_FREQ = 255 / 1.0f;
   
   Color col_black = Color(0, 0, 0, static_cast<int>(m_flAlpha[player_index]));
   Color fill = Color(static_cast<int>((130.0f - player_hp * 1.3f)), static_cast<int>((player_hp * 2.55f)), 10, static_cast<int>((m_flAlpha[player_index])));
   Color color = Color(255, 255, 255, static_cast<int>((m_flAlpha[player_index] * 0.85f)));
 
   if (prev_player_hp[player_index] > player_hp)
   {
      prev_player_hp[player_index] -= SPEED_FREQ * Source::m_pGlobalVars->frametime;
   }
   else
   {
      prev_player_hp[player_index] = player_hp;
   }
     
   float width;

   float x = bbox.left - 10;
   float y = bbox.top;
   float bboxDifferent = fabsf(bbox.bottom - bbox.top);
   width = bboxDifferent - (((bboxDifferent * prev_player_hp[player_index] ) / player_hp_max));

   float w = 4;
   float h = bboxDifferent;

   Render::Get()->SetTextFont(FONT_VISITOR);
   Render::Get()->AddRectFilled(Vector2D(x + 3, y - 1), Vector2D(x + w + 3, y + h + 1), Color(0.0f, 0.0f, 0.0f, m_flAlpha[player_index] / 357.0f));
   Render::Get()->AddRectFilled(Vector2D(x + 4, y + width), Vector2D(x + w - 1 + 3, y + h), fill);
 
   if ( player_hp != 100 )
   {
      Render::Get()->AddText(
          Vector2D(x + 3, y + width + 1),
          color,
          OUTLINED | CENTER_X | CENTER_Y,
          "%d",
          player_hp);
   }
}

По-хорошему, надо разбить эту функцию, а также избавиться от магических чисел, но так как общей картины кода я не имею, сделать это правильно я не могу.
 
Рефакторинг? Не, не слышал.
Вот так лучше наверное (хотя тоже так себе):
C++:
Expand Collapse Copy
void CEsp::DrawHealthBar(C_CSPlayer* player, Rect2D bbox)
{
   int player_index = player->entindex();
   int player_hp = player->m_iHealth( );
   int player_hp_max = 100;

   static float prev_player_hp[65];
   constexpr float SPEED_FREQ = 255 / 1.0f;
 
   Color col_black = Color(0, 0, 0, static_cast<int>(m_flAlpha[player_index]));
   Color fill = Color(static_cast<int>((130.0f - player_hp * 1.3f)), static_cast<int>((player_hp * 2.55f)), 10, static_cast<int>((m_flAlpha[player_index])));
   Color color = Color(255, 255, 255, static_cast<int>((m_flAlpha[player_index] * 0.85f)));

   if (prev_player_hp[player_index] > player_hp)
   {
      prev_player_hp[player_index] -= SPEED_FREQ * Source::m_pGlobalVars->frametime;
   }
   else
   {
      prev_player_hp[player_index] = player_hp;
   }
   
   float width;

   float x = bbox.left - 10;
   float y = bbox.top;
   float bboxDifferent = fabsf(bbox.bottom - bbox.top);
   width = bboxDifferent - (((bboxDifferent * prev_player_hp[player_index] ) / player_hp_max));

   float w = 4;
   float h = bboxDifferent;

   Render::Get()->SetTextFont(FONT_VISITOR);
   Render::Get()->AddRectFilled(Vector2D(x + 3, y - 1), Vector2D(x + w + 3, y + h + 1), Color(0.0f, 0.0f, 0.0f, m_flAlpha[player_index] / 357.0f));
   Render::Get()->AddRectFilled(Vector2D(x + 4, y + width), Vector2D(x + w - 1 + 3, y + h), fill);

   if ( player_hp != 100 )
   {
      Render::Get()->AddText(
          Vector2D(x + 3, y + width + 1),
          color,
          OUTLINED | CENTER_X | CENTER_Y,
          "%d",
          player_hp);
   }
}

По-хорошему, надо разбить эту функцию, а также избавиться от магических чисел, но так как общей картины кода я не имею, сделать это правильно я не могу.
Индивидуальный код стайл? Не не слышал...
Ты вообще знаешь значение слова рефакторинг? Я вам выкладываю реализацию а не обучение по код стайлу
Если бы я написал все в ловер кейсе ты бы наверное сказал, что это не согласовано, только вот в 2к19 году существует вагон и маленькая тележка различных код стайлов. Если вы думаешь, что нужно юзать сторого 1 то мне не о чём с тобой разговаривать впринципе
 
why do u repost things from other forums?
XDDDDDDDDDD.png
 
О, ебать. Так это я тебе на юц отвечаю в теме xD
 
Индивидуальный код стайл? Не не слышал...
Ты вообще знаешь значение слова рефакторинг? Я вам выкладываю реализацию а не обучение по код стайлу
Если бы я написал все в ловер кейсе ты бы наверное сказал, что это не согласовано, только вот в 2к19 году существует вагон и маленькая тележка различных код стайлов. Если вы думаешь, что нужно юзать сторого 1 то мне не о чём с тобой разговаривать впринципе
Я про код стайл вообще ничего не говорил. Глаза протри, и ещё раз сравни мой и твой вариант. У тебя дохуя дублирования кода, функция огромная, куча магических чисел - это ты называешь так код стайл? Это называется говнокод.
 
Я про код стайл вообще ничего не говорил. Глаза протри, и ещё раз сравни мой и твой вариант. У тебя дохуя дублирования кода, функция огромная, куча магических чисел - это ты называешь так код стайл?

Да, ты прав. В некоторых местах, код выглядит вырвиглазно
 
Я про код стайл вообще ничего не говорил. Глаза протри, и ещё раз сравни мой и твой вариант. У тебя дохуя дублирования кода, функция огромная, куча магических чисел - это ты называешь так код стайл? Это называется говнокод.
Ты отредачил его, и после этого код стайл уже поменялся, если ты не понимаешь о чём я то вот тебе пример
Мое условие
C++:
Expand Collapse Copy
if ( true ) {
    
}
Твоё условие
C++:
Expand Collapse Copy
if (true)
{
    
}
И так с любыми другими аспектами
Я привел пример того как можно сделать анимацию, вы меня судите за то что у меня в отрисовке магические числа. Это так же умно как например говорить что вместо animation fix правильно говорить animation update и т.п
 
Ты отредачил его, и после этого код стайл уже поменялся, если ты не понимаешь о чём я то вот тебе пример
Мое условие
C++:
Expand Collapse Copy
if ( true ) {
  
}
Твоё условие
C++:
Expand Collapse Copy
if (true)
{
  
}
И так с любыми другими аспектами
Я привел пример того как можно сделать анимацию, вы меня судите за то что у меня в отрисовке магические числа. Это так же умно как например говорить что вместо animation fix правильно говорить animation update и т.п


В некоторых местах, ты действительно делаешь лишние мувы
 

Уже лучше, но я бы еще вынес вот это в самый верх
Код:
Expand Collapse Copy
static float prev_player_hp[ 65 ];
А это вообще за пределы функции
Код:
Expand Collapse Copy
constexpr float SPEED_FREQ = 255 / 1.0f;
 
Уже лучше, но я бы еще вынес вот это в самый верх
Код:
Expand Collapse Copy
static float prev_player_hp[ 65 ];
А это вообще за пределы функции
Код:
Expand Collapse Copy
constexpr float SPEED_FREQ = 255 / 1.0f;
Можно конечно, но я бы не засорял глобальное пространство перемеными которые используются только в 1 функции
 
Можно конечно, но я бы не засорял глобальное пространство перемеными которые используются только в 1 функции

Ну в теории это можно использовать и в других функциях, поэтому я подумал, что стоит вынести отдельно.
 
Ну в теории это можно использовать и в других функциях, поэтому я подумал, что стоит вынести отдельно.
Ну пожалуй соглашусь на счёт SPEED_FREQ, его так же можно заюзать например в армор баре
 
Назад
Сверху Снизу