-
Notifications
You must be signed in to change notification settings - Fork 0
/
interacao_script.cs
378 lines (320 loc) · 11.3 KB
/
interacao_script.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
using UnityEngine;
using System.Collections;
public class interacao_script : MonoBehaviour {
// variavel da distancia maxima de interacao com portas e elevadores
public float distancia1Interacao = 2.0f;
// variavel da distancia maxima de interacao com portas de armarios
public float distancia2Interacao = 2.5f;
// variavel da distancia maxima de interacao com notas
public float distancia3Interacao = 1.0f;
// variavel da distancia maxima de interacao com computador
public float distancia4Interacao = 1.5f;
// variavel que armazena o valor a ser mudado no campo de visao da camera principal para ocorrer o zoom
public float zoom = 30f;
// variavel que armazena o valor padrao do campo de visao da camera principal
public float normal = 60f;
// variavel para suavizar a transicao da camera com zoom e sem zoom
public float smooth = 5f;
// variavel para manipular a exibicao do aviso de porta trancada na HUD
public GameObject avisoTrancado;
// variavel para manipular a exibicao do aviso do elevador na HUD
public GameObject avisoElevador;
// temporizador para a exibicao de aviso na HUD
private float timerAviso = 0.0f;
// variavel para o elemento com a imagem de fundo das notas
public GameObject notaImagem;
// variaveis para cada elemento diferente da HUD com o texto especifico de cada nota
public GameObject nota1;
public GameObject nota2;
public GameObject nota3;
public GameObject nota4;
public GameObject nota5;
// variavel para manipular a exibicao do aviso de como fechar notas
public GameObject avisoNota;
// variavel de controle de visualizacao de notas
public bool verNota;
// variavel de temporizador de tempo minimo de exibicao de uma nota na HUD
private float timerNotamin = 0.0f;
// variavel para ativar e desativar avisos de interacao na HUD
public GameObject avisoInteracao;
// variavel de temporizador de tempo minimo de exibicao de avisoInteracao na HUD
private float timerInter = 0.0f;
// variavel que armazena a posicao do ray da camera do jogador a cada frame
Ray ray1;
// Use this for initialization
void Start () {
// reset de variaveis
distancia1Interacao = 2.0f;
distancia2Interacao = 2.5f;
distancia3Interacao = 1.0f;
distancia4Interacao = 1.5f;
zoom = 30f;
normal = 60f;
smooth = 5f;
timerNotamin = 0.0f;
timerInter = 0.0f;
// define o estado de visualizacao de nota
verNota = false;
// desabilita os elementos das notas
notaImagem.SetActive (false);
nota1.SetActive (false);
nota2.SetActive (false);
nota3.SetActive (false);
nota4.SetActive (false);
nota5.SetActive (false);
avisoNota.SetActive (false);
// desabilita os avisos na HUD
avisoTrancado.SetActive (false);
avisoElevador.SetActive (false);
avisoInteracao.SetActive (false);
}
// Update is called once per frame
void Update () {
/* COMANDO DE AVISO DE INTERACAO */
// armazena a posicao do ray da camera do jogador a cada frame
ray1.origin = transform.position;
ray1.direction = transform.forward;
// variavel que recebe informacao do raycast declarado
RaycastHit hit1;
// possivel interacao com portas
if(Physics.Raycast(ray1, out hit1, distancia1Interacao))
{
// PORTAS
if(hit1.collider.CompareTag("Door"))
{
// ativa aviso de possivel interacao na HUD
avisoInteracao.SetActive (true);
timerInter = 0.1f;
}
// PORTAS TRANCADAS
else if(hit1.collider.CompareTag("DoorL"))
{
// ativa aviso de possivel interacao na HUD
avisoInteracao.SetActive (true);
timerInter = 0.1f;
}
}
// possivel interacao com portas de armarios
if(Physics.Raycast(ray1, out hit1, distancia2Interacao))
{
// PORTAS DE ARMARIOS
if(hit1.collider.CompareTag("DoorA"))
{
// ativa aviso de possivel interacao na HUD
avisoInteracao.SetActive (true);
timerInter = 0.1f;
}
// PORTAS DE ARMARIOS
else if(hit1.collider.CompareTag("DoorAr"))
{
// ativa aviso de possivel interacao na HUD
avisoInteracao.SetActive (true);
timerInter = 0.1f;
}
}
// possivel interacao com notas
if(Physics.Raycast(ray1, out hit1, distancia3Interacao))
{
// NOTAS
if(hit1.collider.CompareTag("Note"))
{
// ativa aviso de possivel interacao na HUD
avisoInteracao.SetActive (true);
timerInter = 0.1f;
}
}
// possivel interacao com computador
if(Physics.Raycast(ray1, out hit1, distancia4Interacao))
{
// controla que so sera ativado o aviso apos o jogador coletar todas as notas, quando o computador estiver ligado
if(notasUI.notasColetadas == 5)
{
// COMPUTADOR
if(hit1.collider.CompareTag("Keyboard"))
{
// ativa aviso de possivel interacao na HUD
avisoInteracao.SetActive (true);
timerInter = 0.1f;
}
}
}
/* COMANDO DE ZOOM */
// quando o botao direito do mouse eh pressionado (comando de zoom), executa o if
if(Input.GetMouseButton(1))
{
// acessa o componente da camera principal e altera o campo de visao (fieldOfView) para o valor de zoom, de forma suavizada
GetComponent<Camera>().fieldOfView = Mathf.Lerp(GetComponent<Camera>().fieldOfView, zoom, Time.deltaTime * smooth);
}
// quando o botao direito do mouse nao esta pressionado, executa o else
else
{
// acessa o componente da camera principal e altera o campo de visao (fieldOfView) para o valor normal (padrao, sem zoom), de forma suavizada
GetComponent<Camera>().fieldOfView = Mathf.Lerp(GetComponent<Camera>().fieldOfView, normal, Time.deltaTime * smooth);
}
/* COMANDO DE INTERACAO COM PORTAS, NOTAS E ELEVADORES */
// contagem regressiva do temporizador a cada frame (sera usado na linha 111)
timerAviso -= Time.deltaTime;
// contagem regressiva do temporizador de visualizacao minima da nota
timerNotamin -= Time.deltaTime;
// contagem regressiva do temporizador de visualizacao minima do aviso de interacao
timerInter -= Time.deltaTime;
// quando a tecla E eh pressionada (comando de interacao com portas), executa o if
if (Input.GetKeyDown(KeyCode.E))
{
// estabelece uma variavel que armazena a posicao dos rays do objeto (no caso eh usado o da camera)
Ray ray2 = new Ray(transform.position, transform.forward);
// variavel que recebe informacao do raycast declarado
RaycastHit hit2;
// se a interacao do jogador for feita dentro da distancia estabelecida como valida, executa o if
if(Physics.Raycast(ray2, out hit2, distancia1Interacao))
{
// INICIO PORTAS
// analiza se o objeto colidido com o raycast tem a tag de porta, se sim, executa o if
if(hit2.collider.CompareTag("Door"))
{
// obtem o conteudo do script no objeto pai (necessario para correcao do pivot da porta) e executa a mudanca do estado da porta
hit2.collider.transform.parent.GetComponent<porta_scritpt>().ChangeDoorState();
}
// se o objeto colidido tiver tag de porta trancada, executa o else if
else if(hit2.collider.CompareTag("DoorL"))
{
// habilita o aviso de porta trancada na HUD
avisoTrancado.SetActive(true);
// inicia o contador
timerAviso = 2.0f;
}
// FIM PORTAS
// INICIO ELEVADOR
// se o objeto colidido tiver tag de elevador, executa o else if
else if(hit2.collider.CompareTag("Elevator"))
{
// habilita o aviso de elevador na HUD
avisoElevador.SetActive(true);
// inicia o contador
timerAviso = 2.0f;
}
// FIM ELEVADOR
}
// INICIO PORTAS (armario)
// se a interacao do jogador for feita dentro da distancia estabelecida como valida, executa o if
if(Physics.Raycast(ray2, out hit2, distancia2Interacao))
{
// analiza se o objeto colidido com o raycast tem a tag de porta de armario, se sim, executa o if
if(hit2.collider.CompareTag("DoorA"))
{
// obtem o conteudo do script no objeto pai (necessario para correcao do pivot da porta) e executa a mudanca do estado da porta
hit2.collider.transform.parent.GetComponent<porta_scritpt>().ChangeDoorState();
}
// analiza se o objeto colidido com o raycast tem a tag de porta de armario (com o pivot nativo na posicao correta), se sim, executa o else if
else if(hit2.collider.CompareTag("DoorAr"))
{
// obtem o conteudo do script no objeto e executa a mudanca do estado da porta
hit2.collider.GetComponent<porta_scritpt>().ChangeDoorState();
}
}
// FIM PORTAS (armario)
// INICIO NOTAS
// se a interacao do jogador for feita dentro da distancia estabelecida como valida, executa o if
if(Physics.Raycast(ray2, out hit2, distancia3Interacao))
{
// analiza se o objeto colidido com o raycast tem a tag de notas, se sim, executa o if
if(hit2.collider.CompareTag("Note"))
{
// modifica o estado da variavel de controle
verNota = true;
// acessa o objeto colidido e desativa ele de cena
hit2.collider.gameObject.SetActive(false);
// adiciona uma nota ao contador de notas que esta no script de notas da HUD
notasUI.notasColetadas++;
// inicia o contador
timerNotamin = 2.0f;
}
}
// FIM NOTAS
//INICIO COMPUTADOR
if(Physics.Raycast(ray2, out hit2, distancia4Interacao))
{
if(notasUI.notasColetadas == 5)
{
if(hit2.collider.CompareTag("Keyboard"))
{
hit2.collider.GetComponent<AudioSource>().Play();
computador_script.videoEncontrado = true;
}
}
}
// FIM COMPUTADOR
}
// INICIO NOTAS
// caso o jogador esteja visualizando uma nota, executa
if(verNota)
{
// ativa a imagem de fundo da visualizacao de nota e o aviso de como fechar a nota
notaImagem.SetActive (true);
avisoNota.SetActive (true);
// confere qual a nota que deve ser exibida
switch (notasUI.notasColetadas){
// exibe a primeira nota
case 1:
nota1.SetActive (true);
break;
// exibe a segunda nota
case 2:
nota2.SetActive (true);
break;
// exibe a terceira nota
case 3:
nota3.SetActive (true);
break;
// exibe a quarta nota
case 4:
nota4.SetActive (true);
break;
// exibe a quinta nota
case 5:
nota5.SetActive (true);
break;
default: break;
}
// executa se jogador quiser fechar a visualizacao da nota (apertando E)
if((Input.GetKeyDown(KeyCode.E)) && (timerNotamin <= 0))
{
// desabilita os elementos das notas
notaImagem.SetActive (false);
nota1.SetActive (false);
nota2.SetActive (false);
nota3.SetActive (false);
nota4.SetActive (false);
nota5.SetActive (false);
avisoNota.SetActive (false);
// modifica o estado da variavel de controle
verNota = false;
}
}
// FIM NOTAS
// INICIO PORTA
// se o aviso de porta trancada estiver ativo e o timer tiver chegado a zero, executa o if
if((avisoTrancado.activeInHierarchy) && (timerAviso <= 0))
{
// desabilita o aviso de porta trancada na HUD
avisoTrancado.SetActive(false);
}
// FIM PORTA
// INICIO ELEVADOR
// se o aviso de elevador estiver ativo e o timer tiver chegado a zero, executa o if
if((avisoElevador.activeInHierarchy) && (timerAviso <= 0))
{
// desabilita o aviso de porta trancada na HUD
avisoElevador.SetActive(false);
}
// FIM ELEVADOR
// INICIO AVISO INTERACAO
// se o aviso de elevador estiver ativo e o timer tiver chegado a zero, executa o if
if((avisoInteracao.activeInHierarchy) && (timerInter <= 0))
{
// desabilita o aviso de interacao na HUD
avisoInteracao.SetActive(false);
}
// FIM AVISO INTERACAO
}
}