﻿1
00:00:04,120 --> 00:00:04,630
‫OK.

2
00:00:04,630 --> 00:00:08,980
‫Portanto, nosso objetivo para este vídeo é implementar a morte para nossos Pons.

3
00:00:08,980 --> 00:00:17,020
‫Então, se eu for atingido algumas vezes da nossa torre, você verá que eu desapareci porque meu tanque

4
00:00:17,020 --> 00:00:17,770
‫morreu.

5
00:00:17,770 --> 00:00:23,650
‫E se eu for habilidoso o suficiente, se eu puder ir em frente e destruir um deles, você verá que ele

6
00:00:23,650 --> 00:00:24,220
‫também desaparece.

7
00:00:24,220 --> 00:00:29,200
‫Então, vamos implementar a morte para esses peões neste vídeo.

8
00:00:29,290 --> 00:00:31,240
‫Olá e bem-vindo de volta.

9
00:00:31,270 --> 00:00:36,790
‫Agora já estamos aplicando dano aos peões quando são atingidos por projéteis.

10
00:00:36,790 --> 00:00:40,600
‫Agora precisamos descobrir como vamos lidar com a morte.

11
00:00:40,600 --> 00:00:45,910
‫Isso significa que precisaremos de algum tipo de função para lidar com a destruição de um determinado ator.

12
00:00:45,910 --> 00:00:49,030
‫Então vamos criar uma função de destruição de handle.

13
00:00:49,030 --> 00:00:55,510
‫Também precisamos de um ator morrer para funcionar, o que pode permitir que o modo de jogo lide com o que acontece quando

14
00:00:55,510 --> 00:01:01,480
‫um ator em nosso mundo morre e vamos chamar esse ator morreu de função quando o valor de saúde chegar

15
00:01:01,480 --> 00:01:03,340
‫a zero para um peão específico.

16
00:01:03,340 --> 00:01:07,630
‫Então, vamos falar um pouco sobre um roteiro de como vamos implementar esse sistema.

17
00:01:07,630 --> 00:01:14,080
‫Sabemos que temos um projétil e ele está chamando aplicar dano e isso resulta na função de receber

18
00:01:14,080 --> 00:01:18,610
‫dano respondendo a essa transmissão de delegado no componente de saúde.

19
00:01:18,610 --> 00:01:21,100
‫Então, precisamos descobrir o que fazer a partir daí.

20
00:01:21,100 --> 00:01:26,230
‫Bem, nosso modo de jogo pode ter uma função para lidar quando um ator morre.

21
00:01:26,230 --> 00:01:30,370
‫Assim, no dano recebido, podemos verificar se a saúde chega a zero.

22
00:01:30,370 --> 00:01:37,210
‫E nesse ponto podemos chamar a função ator morreu no modo de jogo e a partir daí nosso peão pode lidar

23
00:01:37,210 --> 00:01:38,440
‫com sua destruição.

24
00:01:38,440 --> 00:01:44,500
‫Então, em última análise, caberá ao modo de jogo chamar a função de destruição do identificador no ator que

25
00:01:44,500 --> 00:01:45,010
‫morreu.

26
00:01:45,010 --> 00:01:49,660
‫Portanto, temos um plano de jogo, então vamos descrever as etapas a serem seguidas para implementar isso.

27
00:01:49,660 --> 00:01:54,400
‫Primeiro, vamos criar a função handle de destruição e vamos colocá-la na classe base do peão

28
00:01:54,400 --> 00:01:58,900
‫para lidar com a funcionalidade que deve acontecer quando qualquer um de nossos peões morrer.

29
00:01:58,900 --> 00:02:04,090
‫E também implementaremos isso nas classes tanque e torre, já que cada uma terá sua própria funcionalidade

30
00:02:04,090 --> 00:02:09,520
‫única quando morrerem, então criaremos uma função de ator morto e colocaremos isso na classe de modo de

31
00:02:09,520 --> 00:02:13,090
‫jogo para que possamos chame a destruição do handle de lá.

32
00:02:13,090 --> 00:02:18,730
‫Depois disso, vamos chamar a destruição do handle na função ator morreu no modo de jogo e então podemos

33
00:02:18,730 --> 00:02:23,320
‫chamar o ator morreu do componente de saúde quando a saúde chegar a zero.

34
00:02:23,320 --> 00:02:27,640
‫Então vamos começar com o nosso primeiro passo criando a função de destruição do handle.

35
00:02:27,640 --> 00:02:33,430
‫Então, estou aqui na Base Pond H e gostaria de adicionar essa função de destruição de alça.

36
00:02:33,430 --> 00:02:38,740
‫Agora estou planejando chamar isso do modo de jogo, o que significa que precisará ser uma função

37
00:02:38,740 --> 00:02:42,850
‫pública para que eu possa colocar essa função aqui na seção pública.

38
00:02:42,940 --> 00:02:46,840
‫Vai ser nulo e vou chamá-lo de lidar com a destruição.

39
00:02:47,890 --> 00:02:50,710
‫Agora, ele não precisa receber nenhum parâmetro de entrada.

40
00:02:50,860 --> 00:02:55,360
‫Ele simplesmente vai lidar com a destruição deste peão em particular.

41
00:02:55,360 --> 00:03:01,840
‫Então, vamos implementar essa função no arquivo CP do peão base e vou colocá-la aqui embaixo

42
00:03:01,840 --> 00:03:02,770
‫do construtor.

43
00:03:02,770 --> 00:03:09,550
‫Então eu tenho o handle da destruição e vou colocar o nome da classe do peão de base logo antes do nome da

44
00:03:09,550 --> 00:03:10,180
‫função aqui.

45
00:03:10,180 --> 00:03:15,640
‫Agora, isso vai acontecer quando qualquer um dos peões baseados no peão base morrer.

46
00:03:15,640 --> 00:03:21,040
‫Então, vou colocar um a fazer aqui que diz o que vamos fazer na função de destruição de alças.

47
00:03:21,040 --> 00:03:26,800
‫Eu gostaria de lidar com todos os efeitos visuais e sonoros aqui que têm a ver com a morte do peão.

48
00:03:26,800 --> 00:03:32,860
‫Então, vou apenas dizer efeitos sonoros de barra visual e vamos deixar por isso mesmo e vamos

49
00:03:32,860 --> 00:03:38,320
‫nos certificar de implementar isso quando chegarmos aos efeitos especiais e sons nesta seção do

50
00:03:38,320 --> 00:03:38,920
‫curso.

51
00:03:38,920 --> 00:03:44,890
‫Agora temos destruição de alças aqui, mas eu gostaria de colocar também uma função de destruição de alças

52
00:03:44,890 --> 00:03:50,050
‫nas classes tanque e torre para lidar com o que acontece quando esses peões morrem.

53
00:03:50,050 --> 00:03:54,670
‫E a implementação mais simples de destruição talvez seja para nossa torre.

54
00:03:54,670 --> 00:04:00,760
‫Então vamos entrar na Torre H e adicionaremos uma função pública aqui chamada manipular destruição.

55
00:04:00,760 --> 00:04:09,130
‫Então, vou dizer void handle destroy e vou implementar isso e a torre CP logo abaixo da função

56
00:04:09,130 --> 00:04:10,060
‫tick.

57
00:04:10,060 --> 00:04:17,440
‫Então, aqui está o carrapato, aqui está o identificador de destruição e eu vou prefixar o nome da função com uma torre

58
00:04:17,440 --> 00:04:18,130
‫assim.

59
00:04:18,130 --> 00:04:24,280
‫Agora, na função de destruição de alças para a torre, eu gostaria de chamar a super versão para que a destruição

60
00:04:24,280 --> 00:04:29,800
‫de alças no peão base seja chamada e tenhamos esses efeitos visuais e sonoros quando uma torre morrer.

61
00:04:29,800 --> 00:04:35,650
‫Então, eu vou dizer super lidar com destruição apenas para ter certeza de que isso seja chamado.

62
00:04:35,650 --> 00:04:39,040
‫E depois disso, vou simplesmente destruir a torre.

63
00:04:39,040 --> 00:04:40,390
‫Agora vimos como isso funciona.

64
00:04:40,390 --> 00:04:45,820
‫Nós simplesmente chamamos a função destroy, e isso vai lidar com a destruição da torre.

65
00:04:45,820 --> 00:04:52,960
‫Então eu posso salvar isso e fechar os arquivos de torre e CP e agora posso colocar uma função de destruição

66
00:04:52,960 --> 00:04:54,910
‫de alça na classe tanque.

67
00:04:54,910 --> 00:05:01,570
‫Então eu vou para o tanque e declarar uma função pública aqui sob a função tick chamada de destruição

68
00:05:01,570 --> 00:05:02,620
‫de controle.

69
00:05:03,640 --> 00:05:10,870
‫E eu vou para o Tank CP e implemento isso logo abaixo do tic aqui, não esquecendo de prefixar o

70
00:05:10,870 --> 00:05:13,360
‫nome da função com um tanque.

71
00:05:13,510 --> 00:05:17,950
‫Agora, assim como na classe da torre, gostaríamos de chamar a destruição do super handle.

72
00:05:19,300 --> 00:05:22,120
‫E assim conseguiremos esses efeitos visuais e sonoros.

73
00:05:22,150 --> 00:05:24,910
‫Agora para o tanque, vamos fazer algo um pouco diferente.

74
00:05:24,940 --> 00:05:27,700
‫Eu gostaria de esconder o tanque em vez de destruí-lo.

75
00:05:27,700 --> 00:05:33,730
‫E então podemos desabilitar sua funcionalidade TIC para que ela ainda exista no mundo e ainda a tenhamos.

76
00:05:33,730 --> 00:05:35,740
‫Então ainda temos essa visão da câmera.

77
00:05:35,770 --> 00:05:38,610
‫Só que não poderemos vê-lo ou movê-lo.

78
00:05:38,620 --> 00:05:47,710
‫Então para esconder o tanque podemos chamar uma função chamada set ator hidden in game e isso vai levar um booleano.

79
00:05:47,710 --> 00:05:51,400
‫E se passarmos de verdade, esconderemos efetivamente o tanque.

80
00:05:51,430 --> 00:05:55,420
‫Agora eu também gostaria de desabilitar o ticking e há uma função para isso também.

81
00:05:55,420 --> 00:05:58,810
‫É chamado de set ator tic ativado.

82
00:05:59,770 --> 00:06:05,260
‫E para isso vou passar em false, que vai desabilitar o ticking para o tanque.

83
00:06:05,260 --> 00:06:08,800
‫Então, isso cuida da nossa função de destruição de alças.

84
00:06:08,800 --> 00:06:11,590
‫Portanto, temos nossa função de destruição de alças.

85
00:06:11,620 --> 00:06:16,020
‫Nosso próximo passo é criar uma função de ator morto no modo de jogo.

86
00:06:16,030 --> 00:06:17,440
‫Então vamos implementar isso.

87
00:06:17,440 --> 00:06:25,870
‫Então, estou aqui no modo de jogo de tanques de sintonia e aqui posso criar a função ator morreu agora pretendo chamar o ator

88
00:06:25,870 --> 00:06:32,200
‫morreu da classe do componente de saúde, o que significa que isso também precisa ser uma função pública.

89
00:06:32,440 --> 00:06:37,590
‫Então, vou adicionar uma seção pública e criar a função ator morreu.

90
00:06:37,600 --> 00:06:40,930
‫Agora isso será anulado e eu vou chamá-lo de ator morreu.

91
00:06:41,170 --> 00:06:48,460
‫E isso pode simplesmente levar um ponteiro de ator chamado Dead Actor e agora podemos implementar o ator morreu no modo de jogo

92
00:06:48,460 --> 00:06:49,740
‫de tanques de sintonia.

93
00:06:50,110 --> 00:06:58,690
‫CP Então, vou colocá-lo aqui e prefixar o nome com um modo de jogo de tanques de sintonia e agora temos uma função

94
00:06:58,690 --> 00:07:00,220
‫de ator morto.

95
00:07:00,220 --> 00:07:05,890
‫Agora eu gostaria de verificar se o ator morto é o tanque, o que significa que vou precisar de uma

96
00:07:05,890 --> 00:07:07,030
‫variável para o tanque.

97
00:07:07,030 --> 00:07:09,460
‫Então, de volta ao modo de jogo de tanques de sintonia.

98
00:07:09,460 --> 00:07:16,540
‫Eu vou fazer uma seção privada e vou adicionar uma variável de tanque que vou declarar para

99
00:07:16,540 --> 00:07:17,290
‫frente.

100
00:07:17,290 --> 00:07:23,290
‫E é um ponteiro de tanque do tipo A e eu vou simplesmente chamar este tanque e vou precisar inicializá-lo com

101
00:07:23,290 --> 00:07:27,760
‫o endereço do tanque do tanque, e posso fazer isso e começar a jogar.

102
00:07:27,760 --> 00:07:33,640
‫Agora vimos que começar a jogar é uma função protegida e vamos mantê-la protegida aqui no modo de

103
00:07:33,640 --> 00:07:36,400
‫jogo para que possamos substituir, começar, jogar.

104
00:07:36,400 --> 00:07:44,110
‫Então eu vou dizer virtual void, begin, play, override, e eu posso implementá-lo aqui em tune tanks, modo de

105
00:07:44,110 --> 00:07:44,580
‫jogo.

106
00:07:44,860 --> 00:07:45,610
‫Sim.

107
00:07:45,640 --> 00:07:52,840
‫Portanto, será anulado o início do jogo e vou usar os tanques de sintonia, o nome da classe do modo de jogo.

108
00:07:52,990 --> 00:07:56,110
‫E a primeira coisa que vou fazer é chamar super begin play.

109
00:07:57,550 --> 00:08:03,040
‫Dessa forma, obtemos a funcionalidade dos pais e posso obter o peão do jogador usando a estática do jogo.

110
00:08:03,040 --> 00:08:10,660
‫Então, vou incluir primeiro as estáticas de jogabilidade e isso está nas estáticas de jogabilidade kismet slash, como

111
00:08:10,660 --> 00:08:11,680
‫já vimos.

112
00:08:11,800 --> 00:08:17,290
‫E aqui eu posso pegar o Tank e atribuir a ele o valor das estáticas de jogo da juventude.

113
00:08:18,230 --> 00:08:19,550
‫Palma do guitarrista.

114
00:08:20,360 --> 00:08:26,390
‫Agora, isso leva um objeto de contexto mundial para o qual podemos usar isso, e vou usar zero como

115
00:08:26,390 --> 00:08:30,200
‫o índice do jogador, pois nosso tanque sempre será o jogador zero.

116
00:08:30,200 --> 00:08:37,430
‫Agora sabemos que o jet player -- retorna um ponteiro A -- e o tanque é do tipo tanque A, uma classe filha.

117
00:08:37,430 --> 00:08:43,910
‫E vimos que precisamos converter para isso uma classe de tanque se quisermos armazenar esse resultado em um ponteiro de tanque

118
00:08:43,910 --> 00:08:44,510
‫A.

119
00:08:44,510 --> 00:08:47,450
‫Então, primeiro vou incluir o cabeçalho do tanque.

120
00:08:47,450 --> 00:08:53,330
‫Então eu vou dizer para incluir o tanque H e então vou lançar para um tanque.

121
00:08:53,390 --> 00:09:00,440
‫Então eu vou dizer cast to a tank e estou castando o valor retornado de get player --.

122
00:09:00,440 --> 00:09:02,900
‫Então eu vou colocar isso entre parênteses aqui.

123
00:09:03,260 --> 00:09:08,720
‫E agora teremos um ponteiro para o jogador -- na forma de um ponteiro de tanque A.

124
00:09:08,720 --> 00:09:14,090
‫Agora que temos o tanque, podemos verificar se nosso ator morto é o tanque.

125
00:09:14,090 --> 00:09:21,800
‫Então, podemos dizer que se o ator morto duplo é igual a tanque agora tanque pode ser nulo.

126
00:09:21,800 --> 00:09:28,940
‫E tudo bem, porque se Tank for nulo e o ator morto se referir ao próprio tanque, isso falhará na

127
00:09:28,940 --> 00:09:34,130
‫verificação de if e não tentaremos acessar um ponteiro nulo porque não chegaremos ao

128
00:09:34,130 --> 00:09:35,060
‫interior disso.

129
00:09:35,060 --> 00:09:41,900
‫Agora, se o ator morto é de fato o tanque, então eu gostaria de chamar a função de destruição da alça do tanque.

130
00:09:41,900 --> 00:09:44,870
‫Então, vamos chamar a destruição do manípulo do tanque.

131
00:09:45,680 --> 00:09:52,100
‫Agora, depois de chamar a função de destruição da alça, também gostaria de desabilitar a entrada para o pod do

132
00:09:52,100 --> 00:09:58,550
‫tanque para que eu possa obter o tanque e chamar a função interna que o tanque herda chamada de entrada de desativação.

133
00:09:59,540 --> 00:10:03,200
‫Agora, desativar a entrada requer um controlador de jogador A.

134
00:10:03,200 --> 00:10:10,430
‫Agora sabemos que a classe tank, se entrarmos aqui no tanque H, tem essa variável player controller ref, que é um

135
00:10:10,430 --> 00:10:17,270
‫ponteiro para um player controller, e é por isso que estou começando a pensar que ref é um nome muito

136
00:10:17,270 --> 00:10:19,160
‫ruim para essa variável .

137
00:10:19,160 --> 00:10:21,320
‫Como não é uma referência, é um ponteiro.

138
00:10:21,320 --> 00:10:24,260
‫Eu quase prefiro chamá-lo de controlador de jogador de tanque.

139
00:10:24,350 --> 00:10:27,200
‫Então, na verdade, por que não vamos em frente e renomeamos isso?

140
00:10:27,200 --> 00:10:33,530
‫Isso é algo que os desenvolvedores costumam fazer quando percebem que deram uma variável, um nome ruim.

141
00:10:33,530 --> 00:10:36,290
‫Portanto, este código tem uma maneira de fazer isso facilmente.

142
00:10:36,290 --> 00:10:42,350
‫Eu posso destacar essa variável e pressionar a tecla F2 e está pedindo para eu renomeá-la.

143
00:10:42,590 --> 00:10:45,710
‫Vou chamar este controlador de jogador de tanque.

144
00:10:46,100 --> 00:10:47,480
‫Agora verifique isso.

145
00:10:47,480 --> 00:10:49,790
‫Chama-se Tank Player Controller aqui.

146
00:10:49,790 --> 00:10:54,350
‫Se eu for para o Tank CP, verei que ele é renomeado aqui também.

147
00:10:54,350 --> 00:11:00,530
‫Então eu não tive que ir procurá-lo e encontrar todas as instâncias de player, controller, ref.

148
00:11:00,530 --> 00:11:06,050
‫Eu posso procurar pelo controlador do jogador do tanque e ver que ele mudou em todos os lugares em que é usado aqui.

149
00:11:06,050 --> 00:11:08,960
‫Então, essa é uma boa habilidade de refatoração para se ter.

150
00:11:08,960 --> 00:11:15,650
‫De qualquer forma, de volta aqui no modo de jogo de tanques de sintonia, eu preciso desabilitar a entrada para o tanque e isso

151
00:11:15,650 --> 00:11:17,180
‫requer um controlador de jogador.

152
00:11:17,360 --> 00:11:23,360
‫Então, primeiro vou verificar se o controlador do jogador do tanque é válido, dizendo se o tanque e eu

153
00:11:23,360 --> 00:11:25,550
‫preciso acessar esse controlador do jogador.

154
00:11:25,550 --> 00:11:30,440
‫Mas lembre-se que no tanque, nossa variável do controlador do jogador é privada.

155
00:11:30,440 --> 00:11:36,860
‫Agora podemos expor isso e torná-lo público, ou podemos fazer uma função getter pública para essa variável.

156
00:11:36,860 --> 00:11:40,340
‫Eu prefiro fazer um getter público, pois essa é a melhor prática de programação.

157
00:11:40,340 --> 00:11:46,610
‫Então, aqui na seção pública, vou criar um getter público para o controlador do jogador de tanque.

158
00:11:46,610 --> 00:11:53,300
‫Agora ele retornará um ponteiro de controlador de jogador A e esta função será chamada de

159
00:11:53,630 --> 00:11:55,340
‫get tank player.

160
00:11:55,340 --> 00:12:02,900
‫Os getters do controlador são normalmente o nome da variável com get na frente, e eles também são normalmente feitos

161
00:12:02,900 --> 00:12:09,830
‫com custo, pois essa função não foi projetada para alterar nada nesta classe, ela apenas retornará o controlador

162
00:12:09,830 --> 00:12:10,970
‫do player.

163
00:12:10,970 --> 00:12:16,760
‫Então, vamos dizer retornar o controle do jogador do tanque e isso é tudo que vai fazer.

164
00:12:16,760 --> 00:12:22,760
‫Agora que temos uma função getter pública para o controlador do jogador do tanque, podemos acessar o

165
00:12:22,760 --> 00:12:25,640
‫controlador do jogador aqui no modo de jogo.

166
00:12:25,880 --> 00:12:33,080
‫Então, vamos dizer que se o tanque pega um controlador de jogador de tanque e faz essa chamada de função aqui.

167
00:12:33,080 --> 00:12:38,450
‫E se chegarmos ao interior desta declaração if, então o controlador do jogador é válido para que

168
00:12:38,450 --> 00:12:45,590
‫possamos mover esta chamada para a entrada de desativação do tanque aqui e vamos passar para a entrada desabilitada o controlador do jogador

169
00:12:45,590 --> 00:12:46,400
‫do tanque.

170
00:12:48,400 --> 00:12:51,950
‫Então, vamos chamar tank get player controller aqui também.

171
00:12:51,970 --> 00:12:57,910
‫Agora, enquanto estamos acessando o controlador do player, eu também gostaria de fazer com que os controladores do

172
00:12:57,910 --> 00:13:03,640
‫player mostrassem a variável de membro booleana do cursor do mouse e defina isso como false.

173
00:13:03,640 --> 00:13:08,830
‫Portanto, estamos desabilitando a entrada e também garantindo que o cursor do mouse não seja exibido.

174
00:13:08,830 --> 00:13:13,400
‫Então, isso cuida de lidar com a funcionalidade para quando o tanque morrer.

175
00:13:13,420 --> 00:13:19,660
‫Agora, no caso de o ator morto não ser o tanque, eu gosto de verificar se é uma instância

176
00:13:19,660 --> 00:13:21,010
‫da classe torre.

177
00:13:21,010 --> 00:13:23,200
‫Então eu vou adicionar um outro se aqui.

178
00:13:23,320 --> 00:13:26,410
‫Então, qual será a condicional para este elseif aqui?

179
00:13:26,440 --> 00:13:33,640
‫Bem, eu gostaria de ver se o ator morto pode ser escalado para uma torre A, o que significa que vou precisar incluir

180
00:13:34,360 --> 00:13:35,800
‫a classe da torre.

181
00:13:35,890 --> 00:13:37,300
‫Então inclua a torre.

182
00:13:38,170 --> 00:13:40,270
‫E então eu vou tentar lançar.

183
00:13:40,270 --> 00:13:44,770
‫Então eu vou dizer elenco, que leva colchetes e parênteses.

184
00:13:44,770 --> 00:13:50,410
‫E o que estamos lançando também é uma torre e o que estamos lançando está morto.

185
00:13:50,410 --> 00:13:53,410
‫Ator tentará lançar ator morto.

186
00:13:53,410 --> 00:13:59,410
‫Agora podemos realmente pegar o resultado dessa conversão e atribuí-lo e criar uma variável local.

187
00:13:59,410 --> 00:14:09,310
‫Aqui na condicional podemos dizer um ponteiro de torre e podemos chamar essa torre destruída e atribuir a ela o

188
00:14:09,310 --> 00:14:11,470
‫valor retornado desse elenco.

189
00:14:11,470 --> 00:14:18,250
‫E se fizermos isso, teremos acesso a esse ator destruído, que é nosso ator morto lançado em uma

190
00:14:18,250 --> 00:14:18,660
‫torre.

191
00:14:18,670 --> 00:14:22,630
‫Agora, se isso for bem-sucedido, então iremos para dentro do elseif.

192
00:14:22,630 --> 00:14:24,670
‫E então podemos levar nossos destruídos.

193
00:14:25,490 --> 00:14:31,430
‫Tower e podemos simplesmente chamar a destruição do punho.

194
00:14:32,870 --> 00:14:39,800
‫Então agora temos uma função de ator morto aqui no modo de jogo que chama manipular destruição e também

195
00:14:39,800 --> 00:14:43,910
‫lida com mais algumas funcionalidades relacionadas à morte para o tanque.

196
00:14:44,180 --> 00:14:45,980
‫Então, isso cuida do passo dois.

197
00:14:45,980 --> 00:14:52,220
‫A criação de uma função ator morreu e, enquanto estávamos nisso, também chamamos a destruição do identificador na

198
00:14:52,220 --> 00:14:53,540
‫função ator morreu.

199
00:14:53,540 --> 00:14:58,150
‫Portanto, nosso último passo é chamar o ator morto quando a saúde chegar a zero.

200
00:14:58,160 --> 00:15:04,310
‫Agora para chamar essa função que existe no modo de jogo, nosso componente health vai precisar de uma variável

201
00:15:04,340 --> 00:15:07,250
‫que armazene o endereço do modo de jogo.

202
00:15:07,250 --> 00:15:10,340
‫Então vamos para nossa classe de componentes de saúde.

203
00:15:10,340 --> 00:15:16,100
‫Aqui estão os componentes de saúde, e vou adicionar uma variável privada aqui na parte inferior.

204
00:15:16,100 --> 00:15:25,730
‫E isso será do tipo A ponteiro de modo de jogo de tanques de sintonia e chamaremos isso de modo de jogo de tanques de sintonia.

205
00:15:25,730 --> 00:15:31,010
‫Agora vou encaminhar para declarar isso para não ter que incluir seu arquivo de cabeçalho aqui e então precisamos

206
00:15:31,010 --> 00:15:32,480
‫acessar o modo de jogo.

207
00:15:32,480 --> 00:15:38,990
‫Então vamos para o componente de saúde CP e se eu rolar para cima, vejo a função de início de jogo aqui e esse é

208
00:15:38,990 --> 00:15:41,690
‫o lugar perfeito para obter o modo de jogo.

209
00:15:41,690 --> 00:15:44,840
‫Novamente, colocá-lo no construtor é muito cedo.

210
00:15:44,840 --> 00:15:50,530
‫Precisamos ter certeza de que o modo de jogo foi construído e existe antes de tentarmos acessá-lo.

211
00:15:50,540 --> 00:15:57,200
‫Agora, aqui está uma função útil na estática do jogo chamada Get Game Mode e diz que retorna a base do modo

212
00:15:57,200 --> 00:16:01,610
‫de jogo atual ou nula se não puder ser recuperada, como no cliente.

213
00:16:01,850 --> 00:16:07,730
‫Agora no cliente tem a ver com programação multiplayer e não precisamos nos preocupar com isso.

214
00:16:07,730 --> 00:16:14,930
‫Estamos rodando na única máquina para nosso jogo, então vamos rolar para baixo e veremos que uma base de modo

215
00:16:14,930 --> 00:16:18,230
‫de jogo pega um objeto de contexto mundial.

216
00:16:18,230 --> 00:16:24,080
‫Este é apenas um objeto no mundo e vimos como lidar com objetos de contexto do mundo.

217
00:16:24,080 --> 00:16:29,030
‫Então isso existe na jogabilidade estática h, então vamos incluir isso.

218
00:16:29,030 --> 00:16:35,330
‫E aqui nos componentes de saúde, o CP colará nossa inclusão para estatísticas de jogo e, em seguida, chamaremos o modo

219
00:16:35,330 --> 00:16:37,490
‫de jogo aqui e começaremos a jogar.

220
00:16:37,790 --> 00:16:40,670
‫Então vamos dizer tanques de sintonia, modo de jogo.

221
00:16:42,030 --> 00:16:44,380
‫E defina isso para o valor de você.

222
00:16:44,400 --> 00:16:50,940
‫As estáticas de jogabilidade obtêm o modo de jogo e para o objeto de contexto do mundo.

223
00:16:50,940 --> 00:16:54,750
‫Vou passar nessa e agora temos o modo de jogo.

224
00:16:54,750 --> 00:17:01,080
‫Mas é claro que obter o modo de jogo, retorna uma base de modo de jogo e estamos tentando armazená-lo

225
00:17:01,080 --> 00:17:06,810
‫na classe filha, um modo de jogo de tanques de sintonia, o que significa que precisaremos lançar.

226
00:17:06,810 --> 00:17:07,380
‫Isso mesmo.

227
00:17:07,380 --> 00:17:17,580
‫Então, precisamos dizer cast para um modo de jogo de tanques de ajuste e estamos lançando o resultado do modo de jogo get.

228
00:17:17,580 --> 00:17:20,430
‫Então eu vou colocar isso entre parênteses lá.

229
00:17:20,430 --> 00:17:22,410
‫E estamos usando o modo de jogo Tune Tanks.

230
00:17:22,410 --> 00:17:24,840
‫Então, vou incluir esse arquivo de cabeçalho no topo.

231
00:17:24,840 --> 00:17:26,970
‫Então eu vou dizer incluir.

232
00:17:28,960 --> 00:17:32,120
‫Modo de jogo Tune Tanks.

233
00:17:33,100 --> 00:17:36,960
‫Então temos o modo de jogo aqui no componente de saúde.

234
00:17:36,970 --> 00:17:44,080
‫Estamos prontos para descer aqui em danos sofridos e verificar se nossa saúde chega a zero.

235
00:17:44,140 --> 00:17:52,060
‫E, nesse caso, podemos usar nosso ponteiro de modo de jogo de tanques de ajuste para chamar a função ator

236
00:17:52,060 --> 00:17:59,740
‫morreu passando o ator que morreu e este será seu desafio, então na classe do componente de saúde em danos

237
00:17:59,740 --> 00:18:06,910
‫sofridos você verificará para ver se o valor da saúde atingiu zero ou ficou abaixo de zero.

238
00:18:06,940 --> 00:18:11,260
‫Se for esse o caso, chame o ator morreu usando o modo de jogo.

239
00:18:11,260 --> 00:18:17,140
‫Como temos um ponteiro para o modo de jogo, não se esqueça de verificar primeiro se esse ponteiro não

240
00:18:17,140 --> 00:18:17,800
‫é nulo.

241
00:18:17,800 --> 00:18:21,940
‫E uma vez que você chama o ator morreu, você vai precisar passar um ator.

242
00:18:21,940 --> 00:18:25,000
‫Você vai passar no ator que morreu.

243
00:18:25,000 --> 00:18:30,370
‫Então pause o vídeo e implemente isso na função de dano sofrido agora.

244
00:18:33,280 --> 00:18:33,670
‫OK.

245
00:18:33,670 --> 00:18:36,720
‫Então já subtraímos o dano da saúde.

246
00:18:36,730 --> 00:18:41,220
‫Agora estamos prontos para verificar se esse valor de integridade atingiu zero.

247
00:18:41,230 --> 00:18:48,610
‫Então eu vou dizer se a saúde for menor ou igual a zero F e se for esse o caso, então é

248
00:18:48,610 --> 00:18:49,450
‫apropriado chamar.

249
00:18:49,480 --> 00:18:55,090
‫O ator morreu agora porque precisamos verificar se o modo de jogo é válido.

250
00:18:55,090 --> 00:19:02,170
‫Eu posso colocar um anúncio aqui neste se verificar e verificar se o modo de jogo de tanques de ajuste é válido.

251
00:19:02,170 --> 00:19:07,060
‫Se for nulo, retornará false aqui e não alcançaremos o interior da instrução if.

252
00:19:07,540 --> 00:19:13,600
‫Portanto, se chegarmos ao interior da instrução if, o modo de jogo dos tanques de ajuste é válido e a saúde chegou a

253
00:19:13,600 --> 00:19:14,050
‫zero.

254
00:19:14,050 --> 00:19:16,780
‫Então podemos dizer tanques de sintonia, modo de jogo.

255
00:19:17,980 --> 00:19:19,900
‫E podemos chamar ator morreu.

256
00:19:20,830 --> 00:19:27,160
‫E isso leva um ator e sabemos que o ator que morreu será o ator danificado.

257
00:19:27,160 --> 00:19:29,950
‫Então vamos passar no ator danificado.

258
00:19:30,130 --> 00:19:33,640
‫E agora podemos compilar isso e olhar para aquilo.

259
00:19:33,640 --> 00:19:35,380
‫Temos uma compilação bem-sucedida.

260
00:19:35,380 --> 00:19:37,180
‫Então, vamos voltar para o editor.

261
00:19:37,180 --> 00:19:40,690
‫E aqui no editor, por que não vamos em frente e testamos a morte?

262
00:19:40,690 --> 00:19:45,790
‫Vamos ver se consigo destruir alguns desses tanques antes de ser destruído.

263
00:19:45,790 --> 00:19:47,680
‫Isso vai ser uma espécie de desafio.

264
00:19:47,710 --> 00:19:48,670
‫Ah, tem um.

265
00:19:48,670 --> 00:19:52,030
‫Matei um deles e peguei o segundo.

266
00:19:52,030 --> 00:19:53,230
‫Ah, e eu morri.

267
00:19:53,650 --> 00:20:01,840
‫Então você pode ver que este jogo é muito mais divertido agora que adicionamos morte e destruição às nossas lagoas.

268
00:20:01,840 --> 00:20:03,550
‫Então isso é ótimo.

269
00:20:03,850 --> 00:20:11,050
‫Ok, então o que eu quero que você faça é dar um grande tapinha nas costas, porque neste vídeo

270
00:20:11,050 --> 00:20:18,010
‫nós lidamos com a Morte do Ator, que envolve bastante interação entre essas classes em nosso jogo.

271
00:20:18,100 --> 00:20:24,370
‫Agora, a forma como a morte é implementada é que a lagoa simplesmente desaparece, o que significa que ainda precisamos de algumas

272
00:20:24,370 --> 00:20:24,940
‫coisas.

273
00:20:25,030 --> 00:20:26,890
‫Precisamos de condições de vitória e derrota.

274
00:20:26,890 --> 00:20:30,490
‫Precisamos de uma maneira de mostrar ao jogador que ele ganhou ou perdeu o jogo.

275
00:20:30,490 --> 00:20:33,220
‫E também precisamos desses efeitos especiais.

276
00:20:33,340 --> 00:20:36,430
‫Precisamos de alguns sons, precisamos de algumas explosões.

277
00:20:36,430 --> 00:20:39,520
‫Essas coisas vão acontecer muito, muito em breve.

278
00:20:39,520 --> 00:20:41,170
‫Então parabéns.

279
00:20:41,170 --> 00:20:46,570
‫Você já percorreu um longo caminho e faltam apenas alguns passos.

280
00:20:46,600 --> 00:20:48,310
‫Vejo vocês no próximo vídeo.

