sexta-feira, 11 de novembro de 2011

Desenhando o HUD (UnrealScript)

HUD (Head Up Display) é uma espécie de painel utilizado para mostrar informações durante o jogo usando imagens e textos. Existem duas formas de desenhar o HUD, a mais comum é utilizando uma classe Canvas que possui funções para desenhar os gráficos e textos. A outra opção é utilizando o Scaleform GFx que permite que cenas feitas no editor Flash possam ser importadas para o UDK.

A imagem abaixo mostra as subclasses de HUD encontradas no UDK:


Fiz um exemplo de HUD que desenha uma imagem, um texto e um retangulo. Neste exemplo é desenhado uma barra de energia, a medida que o tempo passa a barra de energia diminui e muda de cor, como pode ser visto nas imagens:




Código do exemplo:
class TesteHUD extends UTHUD;

var CanvasIcon relogioIcon;
var int relogio; 

event PostBeginPlay()
{
   SetTimer( 1, true );
   relogio = 30;
}

function Timer()
{
  relogio--;

  if(relogio <= 0)
  {     
     relogio = 30;
  }
}

function DrawHUD()
{
   super.DrawHUD();    

   Canvas.DrawIcon(relogioIcon, 0, 0);     

   Canvas.Font = class'Engine'.static.GetLargeFont();      
   Canvas.SetDrawColor(255, 255, 255); // Branco
   Canvas.SetPos(70, 15);
   
   Canvas.DrawText(relogio);

   if(relogio < 10)
   {
     Canvas.SetDrawColor(255, 0, 0); // Vermelho
   }
   else if (relogio < 20)
   {
     Canvas.SetDrawColor(255, 255, 0); // Amarelo
   } 
   else 
   {
     Canvas.SetDrawColor(0, 255, 0); // Verde
   }
 
   Canvas.SetPos(200, 15);   
   Canvas.DrawRect(20 * relogio, 30);      

}
defaultproperties
{
 relogioIcon=(Texture=Texture2D'UDKHUD.Time')  
}

Agora, precisamos criar uma subclasse de GameInfo para referenciar a nova classe HUD. Só uma observação, se você estiver utilizando as classes UTGame/UTHUD é preciso definir como true a propriedade bUseClassicHUD na subclasse de UTGame, senão o seu HUD não irá funcionar.
class MeuUTGame extends UTGame;

defaultproperties
{    
   HUDType=class'RomeroScripts.TesteHUD'
   bUseClassicHUD=true
}

Para mais informações sobre HUD:
HUD Technical Guide