Пятница, 29.03.2024, 17:13
Приветствую Вас Гость

Меню сайта
Форма входа
Категории раздела
Уроки по C# [2]
Здесь собраны простенькие уроки по языку С# от Wedge Team.
Уроки по C++ [1]
Здесь собраны уроки по программированию для Half-Life 2 на С++.
Уроки по Valve Hammer Editor [0]
Здесь собраны уроки по левел-дизайнингу в Valve Hammer Editor от Wedge Team и не только.
Уроки по Photoshop [0]
Здесь собраны уроки по фотошопу от Wedge Team.
Уроки по 3D Max [0]
Здесь собраны уроки по 3DMax.
Мини-чат
200
Главная » Статьи » Уроки по C++

Кровь на экране аля Wolfenstein
Кровь на экране аля Wolfenstein.
Сегодня я научу вас делать кровавый экран, когда у вас становиться мало жизни при том кровь становиться более четкой с каждым уменьшением на 10HP здоровья . Но этот код требует доработки т.к если перекрывать дисплей другим оверлаем то кровь исчезает. Ладно меньше слов, больше дела.
Создаем файл hud_hull.cpp в Client->Source Files->HL2 DLL. В нем пишем следующее:
Code


#include "cbase.h"

#include "hud.h"

#include "hud_hull.h"

#include "hud_macros.h"

#include "iclientmode.h"

#include <vgui_controls/AnimationController.h>

#include <vgui/ISurface.h>

#include <vgui/ILocalize.h>
#include "materialsystem/IMaterialSystem.h"
#include "materialsystem/IMaterialVar.h"
#include "materialsystem/imaterialsystemhardwareconfig.h"
#include "rendertexture.h"
#include "view_scene.h"
#include "viewrender.h"

using namespace vgui;

   

#include "tier0/memdbgon.h"

   

DECLARE_HUDELEMENT( CHudHull );

   

#define HULL_INIT 80

//------------------------------------------------------------------------

// Purpose: Constructor

//------------------------------------------------------------------------

CHudHull::CHudHull( const char *pElementName ) : CHudElement( pElementName ), BaseClass( NULL, "HudHull" )

{

vgui::Panel *pParent = g_pClientMode->GetViewport();

SetParent( pParent );

SetHiddenBits( HIDEHUD_HEALTH );

}

//------------------------------------------------------------------------

// Purpose:  

//------------------------------------------------------------------------

void CHudHull::Init( void )

{

m_flHull = HULL_INIT;

m_nHullLow = -1;

SetBgColor(Color(0,0,0,128));

}

//------------------------------------------------------------------------

// Purpose:  

//-----------------------------------------------------------------------

void CHudHull::Reset( void )

{

Init();

}

   

//------------------------------------------------------------------------

// Purpose:  

//------------------------------------------------------------------------

void CHudHull::OnThink( void )

{

float newHull = 0;

C_BasePlayer *local = C_BasePlayer::GetLocalPlayer();

if ( !local)  

return;

newHull = local->GetHealth();

if ( newHull == m_flHull )

{

return;

}
//Присваиваем pMaterial* свои текстурки

{  

IMaterial *pMaterial = materials->FindMaterial( "HUDoverlays/blood_display", TEXTURE_GROUP_OTHER, true );
IMaterial *pMaterial1 = materials->FindMaterial( "HUDoverlays/blood_display_20", TEXTURE_GROUP_OTHER, true );
IMaterial *pMaterial2 = materials->FindMaterial( "HUDoverlays/blood_display_30", TEXTURE_GROUP_OTHER, true );
IMaterial *pMaterial3 = materials->FindMaterial( "HUDoverlays/blood_display_40", TEXTURE_GROUP_OTHER, true );
IMaterial *pMaterial4 = materials->FindMaterial( "HUDoverlays/blood_display_50", TEXTURE_GROUP_OTHER, true );
IMaterial *pMaterial5 = materials->FindMaterial( "HUDoverlays/blood_display_60", TEXTURE_GROUP_OTHER, true );
IMaterial *pMaterial6 = materials->FindMaterial( "HUDoverlays/blood_display_70", TEXTURE_GROUP_OTHER, true );
IMaterial *pMaterial7 = materials->FindMaterial( "HUDoverlays/blood_display_80", TEXTURE_GROUP_OTHER, true );
IMaterial *pMaterial8 = materials->FindMaterial( "HUDoverlays/blood_display_90", TEXTURE_GROUP_OTHER, true );
IMaterial *pMaterial9 = materials->FindMaterial( "HUDoverlays/blood_display_95", TEXTURE_GROUP_OTHER, true );
//////////////////Присваиваем к каждым значениям свои материи///////////////////////////////
/////////////////IF 10 HP//////////////
if (newHull == 10)
{
view->SetScreenOverlayMaterial( pMaterial );  
}
if (newHull > 10)
{
view->SetScreenOverlayMaterial( pMaterial1 );  
}
/////////////////////////////////////
if (newHull == 20)
{
view->SetScreenOverlayMaterial( pMaterial1 );  
}
if (newHull > 20)
{
view->SetScreenOverlayMaterial( pMaterial2 );  
}
/////////////////////////////////////
if (newHull == 30)
{
view->SetScreenOverlayMaterial( pMaterial2 );  
}
if (newHull > 30)
{
view->SetScreenOverlayMaterial( pMaterial3 );  
}
/////////////////////////////////////////////
if (newHull == 40)
{
view->SetScreenOverlayMaterial( pMaterial3 );  
}
if (newHull > 40)
{
view->SetScreenOverlayMaterial( pMaterial4 );  
}
/////////////////////////////////////////////
if (newHull == 50)
{
view->SetScreenOverlayMaterial( pMaterial4 );  
}
if (newHull > 50)
{
view->SetScreenOverlayMaterial( pMaterial5 );  
}
/////////////////////////////////////////////
if (newHull == 60)
{
view->SetScreenOverlayMaterial( pMaterial5 );  
}
if (newHull > 60)
{
view->SetScreenOverlayMaterial( pMaterial6 );  
}
/////////////////////////////////////////////
if (newHull == 70)
{
view->SetScreenOverlayMaterial( pMaterial6 );  
}
if (newHull > 70)
{
view->SetScreenOverlayMaterial( pMaterial7 );  
}
/////////////////////////////////////////////
if (newHull == 80)
{
view->SetScreenOverlayMaterial( pMaterial7 );  
}
if (newHull > 80)
{
view->SetScreenOverlayMaterial( pMaterial8 );  
}
/////////////////////////////////////////////
if (newHull == 90)
{
view->SetScreenOverlayMaterial( pMaterial8 );  
}
if (newHull > 90)
{
view->SetScreenOverlayMaterial( pMaterial9 );  
}
/////////////////////////////////////////////
if (newHull == 95)
{
view->SetScreenOverlayMaterial( pMaterial9 );  
}
if (newHull > 95)
{
view->SetScreenOverlayMaterial( NULL );  
}
/////////////////////////////////////////////
if (newHull == 100)
{
view->SetScreenOverlayMaterial( NULL );  
}
m_flHull = newHull;

}
}
//------------------------------------------------------------------------

// Purpose: draws the power bar

//------------------------------------------------------------------------

void CHudHull::Paint()

{
///Нужно чтоб все рисовалось
}  

Теперь там же создаем h файл. В нем пишем:
Code


#if !defined( HUD_HULL_H )

   

#define HUD_HULL_H

#ifdef _WIN32

#pragma once

#endif

   

#include "hudelement.h"

#include "hud_numericdisplay.h"

   

//#include  

//-----------------------------------------------------------------------------

// Purpose: Shows the hull bar

//-----------------------------------------------------------------------------

   

class CHudHull : public CHudElement, public vgui::Panel

   

{

   

DECLARE_CLASS_SIMPLE( CHudHull, vgui::Panel );

   

public:

CHudHull( const char *pElementName );

virtual void Init( void );

virtual void Reset( void );

virtual void OnThink( void );

protected:

virtual void Paint();

private:

float m_flHull;

int m_nHullLow;

};  

   

#endif // HUD_SUITPOWER_H  

Ну вот и все. Компилим и наслаждаемся. Код на сайте был подчищен от ненужных функций.
Ссыль на материалы.

Источник: http://hell494.ucoz.ru
Категория: Уроки по C++ | Добавил: HellMapper (17.04.2011)
Просмотров: 494 | Теги: MOD, C++, source, hl2, Half-Life 2, MOD & Maps, Half-life 2 Episode 2, Episode Two | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск
Друзья сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0