Weapon no Maya
Por: hellsdrinkers • 6/5/2015 • Trabalho acadêmico • 1.686 Palavras (7 Páginas) • 392 Visualizações
Aula 08 – Arma de fogo de 2 mãos de tiros diferentes.
-Introdução e proposta:
Nessa última aula do módulo, veremos como criar uma arma de fogo de 2 mãos que tenham 2 tipos de
tiro. O tiro primário é uma metralhadora que usará as mesmas partículas da pistola. Já o segundo tiro
será um lançador de mísseis. A mesh da arma utilizada será a vista abaixo (a arma deve ser uma skeletal
mesh):
Arma no UDK:
Salve essa arma no mesmo pacote que você já tinha, ou então cole o pacote novo na pasta:
C:\UDK\UDK-2011-08\UDKGame\Content\UT3\Weapons
-Scripts:
Algumas partes dos scripts desta arma, você já conhece pois criou a pístola da aula 05. Alguma são
novas, devido a aplicação diferenciada da arma. Desta vez usaremos 4 scripts: Weapon, Attachment,
Ammo e Projectile, este último para criar o projétil lançado pelo tiro secundário.
-Criando o Script Weapon:
Passo 01: Extenderemos novamente o script Weapon:
class MyWeap_MachineGun extends UTWeapon;
Passo 02: Aqui criaremos algumas variáveis para controlar os tamanhos dos Muzzles e também para
criar os contadores de munição, já que utilizaremos munições diferentes.
var float MuzzleFlashScale, MuzzleFlashScale1;
var name MuzzleFlashSocket1;
var int AmmoCount0, AmmoCount1, MaxAmmoCount1;
var int FireAmmo, FireAmmo1;
var bool AmmoEmpty, AmmoEmpty1;
Passo 03: Vamos criar uma função que informa a arma para começar contando a munição da
metralhadora:
// faz a arma começar com a munição do primeiro tiro
simulated function PostBeginPlay()
{
super.PostBeginPlay();
AmmoCount = AmmoCount0;
}
Passo 04: Devemos então agora criar um pequeno evento para checar em um tempo muito rápido
(milisegundos) qual tiro está sendo usado, para ver se precisamos mudar a munição contada:
// evento que é calculado a cada 100 milisegundos
event Tick(float DeltaTime)
{
// checa se o tiro sendo usado é o primeiro
if(Instigator.FiringMode == 0)
AmmoCount = AmmoCount0; // altera a munição para a do primeiro tiro
if(AmmoCount0 == 0 && AmmoCount1 >= 1) // checa se a munição do primeiro tiro
está vazia e a do segundo não está
{
AmmoEmpty = true;
AmmoCount = AmmoCount1; // altera a munição para o segundo tiro
}
else
AmmoEmpty = false;
// checa se o tiro sendo usado é o segundo
if(Instigator.FiringMode == 1)
AmmoCount = AmmoCount1; // altera a munição para a do segundo tiro
if(AmmoCount1 == 0 && AmmoCount0 >= 1) // checa se a munição do segundo tiro
está vazia e a do primeiro não está
{
AmmoEmpty1 = true;
AmmoCount = AmmoCount0; // altera a munição para o primeiro tiro
}
else
AmmoEmpty1 = false;
}
Passo 05: Criaremos um evento para checar a quantidade de munição gasta e reposta:
// calcula quanta munição foi gasta e adicionada
function int AddAmmo(int Amount)
{
if(Instigator.FiringMode == 0 || Amount >= 1)
AmmoCount0 = Clamp(AmmoCount0 + Amount,0,MaxAmmoCount);
if(Instigator.FiringMode == 1 || Amount >= 1)
AmmoCount1 = Clamp(AmmoCount1 + Amount,0,MaxAmmoCount1);
// checa se o cheat de munição infinita está ativado
if (UTInventoryManager(InvManager) == None ||
UTInventoryManager(InvManager).bInfiniteAmmo)
{
if(AmmoCount0 <= 0)
AmmoCount0 = MaxAmmoCount;
if(AmmoCount1 <= 0)
AmmoCount1 = MaxAmmoCount1;
}
return AmmoCount;
}
simulated function FireAmmunition()
{
// checa se o tiro sendo usado é o primeiro
if(Instigator.FiringMode == 0)
{
if(AmmoEmpty == true) // checa se a munição do primiro tiro está
vazia
PlayEmptySound(); // ativa o som de arma vazia
else
{
super.FireAmmunition();
}
}
// checa se o tiro sendo usado é o segundo
...