Дядя Миша писал: Ну очевидно взять код фонарика за основу и накопипастить его код в индикаторы здоровья и батареи.
Я именно так и сделал когда-то NeonGameWorld Посмотри как рисуется фонарик (не луч, а именно фонарик). Там два спрайта, пустой и полный. Пустой рисуется всегда, а полный поверх него на определённое кол-во единиц длины, которые зависят от уровня заряда. Надо всего лишь изменить координаты и имена спрайтов, а уровень заряда поменять на уровень здоровья и брони. Копипаста.
nt CHudHealth::Draw(float flTime)
{
int r, g, b;
int a = 0, x, y;
int HealthWidth;
if ( (gHUD.m_iHideHUDDisplay & HIDEHUD_HEALTH) || gEngfuncs.IsSpectateOnly() )
return 1;
if ( !m_hSprite )
m_hSprite = LoadSprite(PAIN_NAME);
// Has health changed? Flash the health #
if (m_fFade)
{
m_fFade -= (gHUD.m_flTimeDelta * 20);
if (m_fFade <= 0)
{
a = MIN_ALPHA;
m_fFade = 0;
}
// Fade the health number back to dim
a = MIN_ALPHA + (m_fFade/FADE_TIME) * 128;
}
else
a = MIN_ALPHA;
// If health is getting low, make it bright red
if (m_iHealth <= 15)
a = 255;
GetPainColor( r, g, b );
ScaleColors(r, g, b, a );
// Only draw health if we have the suit.
if (gHUD.m_iWeaponBits & (1<<(WEAPON_SUIT)))
{
HealthWidth = gHUD.GetSpriteRect(gHUD.m_HUD_number_0).right - gHUD.GetSpriteRect(gHUD.m_HUD_number_0).left;
int CrossWidth = gHUD.GetSpriteRect(m_HUD_cross).right - gHUD.GetSpriteRect(m_HUD_cross).left;
y = (ScreenHeight - gHUD.m_iFontHeight - gHUD.m_iFontHeight / 2)-100;
x = CrossWidth /2;
int spr_width;
int spr_height;
int spr_width_r;
spr_width=spr_sizes.right-spr_sizes.left;
spr_height=spr_sizes.bottom-spr_sizes.top;
spr_width_r=spr_sizes_r.right-spr_sizes_r.left;
//Вычисляем соотношение высоты по здоровью
int cf;
float pr;
int zz;
float xx;
pr = ( ( float ) spr_height/100 ) * ( float ) m_iHealth;
cf = ( int ) pr;
xx = ( float ) spr_width_r;
zz = ( int ) xx;
spr_sizes.bottom-=(spr_height-cf); //СРЕЗ! !!временно уберем++оставим
SPR_Set(gHUD.GetSprite(m_HUD_cross), 200, 200, 230);
SPR_DrawAdditive(0, x, y, &spr_sizes);
SPR_Set(gHUD.GetSprite(m_HUD_cross_red), 255, 50, 50);
SPR_DrawAdditive(0, x, y, &spr_sizes_r);
__________________
Спасибо тем кто помогает...
И тем кто бред этот читает...
Спасибо Дяде Мише за Xash двиг...
Благодаря ему, чуть больше я постиг...
Ну чайник я, и мало очень знаю С++...
Зато леплю я карты и играю блюз...