‫Então vamos criar uma função de fogo e vamos associar esta função com o botão esquerdo do
‫mouse.
‫E aqui você pode ver que estou desenhando esferas de depuração na ponta do barril da nossa torre apenas para provar que
‫esse mapeamento de ação está funcionando.
‫Sempre que clico com o botão esquerdo do mouse, algo está acontecendo.
‫Ei, bem-vindo de volta.
‫Neste vídeo, vamos falar sobre a criação de uma função de fogo ou uma função que podemos
‫usar quando queremos gerar nossos projéteis.
‫Então, vamos criar uma função fire e vamos vinculá-la a um mapeamento de ação.
‫Agora, estamos usando mapeamentos de eixos.
‫Um mapeamento de ação é semelhante.
‫Vamos falar sobre isso agora.
‫Aqui está uma seção de uma captura de tela do mapeamento de ação de fogo que temos em nossas configurações de projeto.
‫Você verá que temos o botão esquerdo do mouse atribuído ao mapeamento de ação de fogo.
‫Agora, um mapeamento de ação é muito parecido com um mapeamento de eixo.
‫Você pode atribuir uma tecla ou um botão a ele.
‫E assim como um mapeamento de eixo, ele requer uma função que pode ser vinculada ao mapeamento de ação.
‫Agora, mapeamentos de eixo disparam cada quadro do jogo.
‫Eles são como a função tic e o valor float passado em mudanças dependendo de quais botões estão
‫sendo pressionados.
‫Os mapeamentos de ação são um pouco diferentes.
‫Uma função de retorno de chamada vinculada a um mapeamento de ação não recebe parâmetros de entrada, e tudo o que acontece é que quando
‫você pressiona o botão, a função é chamada.
‫O que acontece dentro da função depende de nós como desenvolvedores.
‫Agora, os mapeamentos de ação são únicos.
‫Eles não acontecem a cada frame.
‫Eles só acontecem uma vez quando você pressiona o botão.
‫Portanto, se você soltar o botão e pressioná-lo novamente, a função será chamada mais uma vez.
‫Agora, quando ligamos funções aos mapeamentos de eixo, usamos o eixo de ligação para mapeamentos de ação, usamos
‫uma função chamada ação de ligação e recebe entradas semelhantes ao eixo de ligação.
‫Leva o nome do mapeamento de ação como um literal de string.
‫Também requer um ponteiro para a classe.
‫Estamos vinculando a função na qual podemos usar isso, e é preciso, é claro, uma função de retorno de chamada.
‫Agora, um parâmetro adicional que o eixo de ligação não requer como uma constante de enumeração especificando se queremos
‫ou não que essa função seja chamada quando pressionamos o botão ou quando soltamos o
‫botão.
‫Portanto, existem duas opções para este parâmetro de entrada, a constante enum, i. e. pressionado e a constante enum,
‫i. e. lançado.
‫Isso significa que podemos chamar a ação de ligação passando em i. e. pressionado se quisermos vincular uma função de retorno de chamada
‫para quando pressionamos o botão e, em vez disso, se usamos i. e. liberado então nossa função de retorno de
‫chamada seria chamada quando o botão fosse liberado para nossa função de fogo.
‫Estamos preocupados com quando apertamos o botão.
‫Então, vamos fazer uma função de fogo e vinculá-la ao mapeamento de ação de fogo.
‫Agora estou aqui na base spawn e a razão pela qual estou aqui na base pond é porque esta função de fogo
‫é algo que podemos usar na classe tanque e na classe torre.
‫Então, se o colocarmos aqui no tanque base, tanto o tanque quanto a torre herdarão essa função.
‫E como tanto o tanque quanto a torre vão disparar projéteis, eles podem simplesmente herdar a
‫função e usá-la.
‫Agora, como gostaria de acessar a função em ambas as classes filhas, posso colocar essa função aqui
‫na seção protegida, assim como girar a torre.
‫Então, sob rotação da torre, vou criar uma função void chamada fogo que não recebe entradas e podemos seguir
‫em frente e definir a função de fogo com base no CPP.
‫Então, aqui é baseado no CPP e logo abaixo da torre de rotação, vou colocar a função de fogo e precisamos
‫qualificar totalmente esse nome de função e dar a ela um corpo de função.
‫Então agora temos uma função de fogo.
‫Agora, o próximo passo é vincular isso a um mapeamento de ação.
‫Agora, queremos apenas vincular esta função na classe tank porque o tank é a única classe que receberá
‫a entrada do usuário.
‫Chamaremos a função fire na classe tower mais tarde, mas isso será resultado do
‫código que criamos e não da entrada do usuário.
‫Então, estamos aqui no Tank CP e vamos vincular isso e configurar o componente de entrada do jogador, assim como
‫usamos o eixo de vinculação.
‫Então, vamos usar o componente de entrada do player.
‫Portanto, o componente de entrada do jogador e a função serão a ação de ligação.
‫Agora, a primeira entrada será a string literal, que vamos envolver em uma macro de texto como de
‫costume.
‫E esse mapeamento de ação é chamado de fogo.
‫Agora, o próximo parâmetro será a constante enum que determina se queremos ou não que essa
‫função seja chamada quando pressionamos o botão versus quando soltamos o botão.
‫E vamos usar, sublinho pressionado.
‫Como gostaríamos que nossa função fosse chamada quando pressionamos o botão.
‫Agora, o próximo é o objeto de classe de usuário que será este.
‫E, finalmente, temos nossa função de retorno de chamada para que possamos dizer um incêndio de tanque.
‫E agora nossa função de fogo está vinculada ao mapeamento de ação de fogo.
‫Portanto, sabemos que nossa função de fogo está vinculada ao mapeamento de ação de fogo, mas gostaríamos de alguma confirmação
‫visual e esse é o seu desafio.
‫Então, na função fire, eu gostaria que você desenhasse uma esfera de depuração.
‫Já vimos como fazer isso, então vá em frente e preencha os parâmetros com os valores que
‫você achar apropriados.
‫Use a localização do ponto de desova do projétil.
‫Agora, o ponto de geração do projétil é um componente de cena de uso e você viu que os componentes têm uma
‫função chamada obter localização do componente.
‫Isso retorna um vetor F.
‫Isto é o que você pode usar para obter a localização do ponto de desova do projétil.
‫Agora quando você chamar draw debug sphere, use uma duração de cerca de 3 segundos para que possamos ver essa esfera por
‫um tempo antes que ela desapareça.
‫Pause o vídeo e faça isso agora.
‫OK.
‫Então estou de volta aqui em Bass Pond e aqui em Bass Pond.
‫CP Vou incluir auxiliares de depuração de desenho.
‫Então temos acesso para desenhar a esfera de depuração.
‫Então, eu vou dizer para incluir auxiliares de depuração de desenho.
‫E agora aqui embaixo na função fire, podemos desenhar a esfera de depuração.
‫Agora, a primeira coisa que quero fazer é obter a localização do ponto de desova do projétil.
‫Agora eu posso criar um vetor f local para isso e posso chamar esse local do ponto de desova do projétil
‫e inicializá-lo usando o ponto de desova do projétil.
‫E chamando get local do componente.
‫Então agora eu tenho a localização do ponto de desova do projétil e é isso que posso usar ao chamar a esfera de depuração
‫de desenho.
‫Então eu vou chamar desenhar esfera de depuração.
‫E para a primeira entrada, precisamos do mundo e sabemos que podemos obter o mundo usando get world next.
‫Precisamos do centro da esfera que será o local do nosso ponto de geração de projéteis.
‫Então isso será o que eu passo como o segundo parâmetro.
‫E em seguida precisamos do raio da esfera.
‫Agora eu vou ter uma pequena esfera.
‫Vou dar um raio de digamos 25 F para o número de segmentos que vou usar apenas 12 e para a cor
‫posso usar a cor F.
‫Leia Agora quatro desenham linhas persistentes.
‫Nós vamos ter nossas linhas esperando por 3 segundos para que possamos tornar isso falso porque não queremos que
‫elas persistam para sempre.
‫Vamos dar a esta esfera de depuração uma vida útil de três F Então vamos em frente e compilar isso agora e eu vou
‫apertar play e clicar e agora podemos ver nossa esfera de depuração e é claro que ela desaparece
‫após 3 segundos.
‫Agora, esta é uma boa confirmação de que nosso mapeamento de ação está funcionando e também está nos dando
‫a verificação da localização do ponto de desova do projétil.
‫Então, uma vez que realmente começamos a gerar projéteis, sabemos que eles vão aparecer no local
‫correto, conforme indicado pela esfera de depuração.
‫Então isso é ótimo.
‫Então, neste vídeo, criamos uma função de fogo e a vinculamos ao mapeamento de ação de fogo.
‫E para provar que estava funcionando, desenhamos uma esfera de depuração no ponto de geração de projéteis sempre que clicamos com o
‫botão esquerdo do mouse para que tenhamos uma função de disparo, estamos quase prontos para iniciar a geração de projéteis.
‫E também colocamos essa função na classe pong base.
‫Dessa forma, nossa torre também pode usá-lo.
‫Então, no próximo vídeo, vamos discutir como nossa torre vai usar essa função.
‫Vejo você em breve.