diff --git a/computador_script.cs b/computador_script.cs new file mode 100644 index 0000000..8eb2ced --- /dev/null +++ b/computador_script.cs @@ -0,0 +1,51 @@ +using UnityEngine; +using System.Collections; + +public class computador_script : MonoBehaviour { + + // variavel para manipular o elemento que parece a tela do monitor ligado + public GameObject telaMonitor; + + // variavel de controle de quando o jogador interagiu com o computador + public static bool videoEncontrado = false; + + // temporizador para desativar a tela do monitor apos o fim do audio de teclado + public static float timer = 3.0f; + + + // Use this for initialization + void Start () { + + // reset de variaveis + videoEncontrado = false; + timer = 3.0f; + + // desativa a tela do monitor + telaMonitor.SetActive (false); + + } + + // Update is called once per frame + void Update () { + + // quando houver coletado todas as notas e ainda nao interagiu com o computador, executa + if((notasUI.notasColetadas == 5) && (!videoEncontrado)) + { + // ativa a tela do monitor + telaMonitor.SetActive (true); + } + // quando o jogador interagiu com o computador, executa + if(videoEncontrado) + { + // contagem regressiva do temporizador da tela + timer -= Time.deltaTime; + } + // quando o tempo terminar, executa + if(timer <= 0) + { + // desativa a tela do monitor + telaMonitor.SetActive (false); + } + + } +} diff --git a/fantasma_script.cs b/fantasma_script.cs new file mode 100644 index 0000000..255a5bf --- /dev/null +++ b/fantasma_script.cs @@ -0,0 +1,48 @@ +using UnityEngine; +using System.Collections; + +public class fantasma_script : MonoBehaviour { + + // variavel que coleta o nome do objeto em que o script esta anexado + private string nomeObjeto; + + // variavel para definir o alvo do fantasma + public GameObject navTarget; + // variavel para manipulacao do navegador do objeto (fantasma) + NavMeshAgent navAgent; + + + // Use this for initialization + void Start () { + + // armazena o nome do objeto + nomeObjeto = gameObject.name; + // executa apenas quando o fantasma estiver ativo + if(gameObject.activeInHierarchy) + { + // executa apenas quando o objeto tiver o nome de fantasma + if(nomeObjeto == "fantasma") + { + // obtem o conteudo do navmeshagent dentro do objeto para manipulacao + navAgent = GetComponent (); + } + } + + } + + // Update is called once per frame + void Update () { + + // executa apenas quando o fantasma estiver ativo + if(gameObject.activeInHierarchy) + { + // executa apenas quando o objeto tiver o nome de fantasma + if(nomeObjeto == "fantasma") + { + // a cada frame atualiza o destino do navegador do objeto (fantasma) para a posicao do alvo + navAgent.SetDestination (navTarget.transform.position); + } + } + + } +} diff --git a/interacao_script.cs b/interacao_script.cs new file mode 100644 index 0000000..658b0bc --- /dev/null +++ b/interacao_script.cs @@ -0,0 +1,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().fieldOfView = Mathf.Lerp(GetComponent().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().fieldOfView = Mathf.Lerp(GetComponent().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().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().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().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().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 + + + } + +} diff --git a/luz_menu_script.cs b/luz_menu_script.cs new file mode 100644 index 0000000..f23c5a2 --- /dev/null +++ b/luz_menu_script.cs @@ -0,0 +1,93 @@ +using UnityEngine; +using System.Collections; + +public class luz_menu_script : MonoBehaviour { + + // variaveis para estabelecer um tempo randomico entre as piscadas da luz + public float minTimeOn = 2.5f; + public float maxTimeOn = 4.0f; + public float minTimeOff = 0.1f; + public float maxTimeOff = 0.5f; + private float timerOn; + private float timerOff; + + + // variaveis que irao manipular a luz e o som do objeto em que o script esta + private Light l; + public AudioSource somEstatica; + + + // Use this for initialization + void Start () { + + // reset de variaveis + minTimeOn = 1.0f; + maxTimeOn = 2.0f; + minTimeOff = 0.1f; + maxTimeOff = 0.5f; + + // obtem o conteudo da luz do objeto para manipulacao + l = GetComponent (); + + // obtem o conteudo da audio source para manipulacao + somEstatica = GetComponent (); + + + // estabelece um tempo aleatorio entre o valor maximo e minimo estabelecido + timerOn = Random.Range (minTimeOn, maxTimeOn); + timerOff = Random.Range (minTimeOff, maxTimeOff); + + } + + // Update is called once per frame + void Update () { + + // enquanto o jogador nao tiver zerado o jogo, a luz do menu pisca + if(!computador_script.videoEncontrado) + { + // executa quando a luz estiver ligada + if(l.enabled) + { + // contagem regressiva do tempo da luz ligada a cada frame + timerOn -= Time.deltaTime; + + // quando o tempo da luz ligada acaba, executa o if + if(timerOn <= 0) + { + // desliga a luz + l.enabled = false; + + // executa o audio + somEstatica.Play(); + + // estabelece um novo tempo aleatorio + timerOn = Random.Range (minTimeOn, maxTimeOn); + + } + + } + // executa quando a luz estiver desligada + else + { + // contagem regressiva do tempo da luz desligada a cada frame + timerOff -= Time.deltaTime; + + // quando o tempo da luz desligada acaba, executa o if + if(timerOff <= 0) + { + // liga a luz + l.enabled = true; + + // executa o audio + somEstatica.Play(); + + // estabelece um novo tempo aleatorio + timerOff = Random.Range (minTimeOff, maxTimeOff); + + } + } + } + + + } +} diff --git a/luz_script.cs b/luz_script.cs new file mode 100644 index 0000000..8c234d7 --- /dev/null +++ b/luz_script.cs @@ -0,0 +1,51 @@ +using UnityEngine; +using System.Collections; + +public class luz_script : MonoBehaviour { + + // variaveis que definem o som de ligar e desligar da lanterna + public AudioClip soundOn; + public AudioClip soundOff; + // variavel que acessa o componente de luz da lanterna + private Light l; + + // Use this for initialization + void Start () { + // acessa o componente de luz para manipulacao + l = GetComponent (); + } + + // Update is called once per frame + void Update () { + + + if (Input.GetKeyDown(KeyCode.F)) + { + // troca o estado da luz entre ligado e desligado + l.enabled = !l.enabled; + + // se a luz estiver ligada, executa + if(l.enabled == true) + { + // coleta o componente de audio + AudioSource audio = GetComponent(); + // define o audio como o som de ligar + audio.clip = soundOn; + // executa o audio + audio.Play(); + } + // se a luz estiver desligada, executa + else + { + // coleta o componente de audio + AudioSource audio = GetComponent(); + // define o audio como o som de desligar + audio.clip = soundOff; + // executa o audio + audio.Play(); + } + + } + + } +} diff --git a/menuControlador.cs b/menuControlador.cs new file mode 100644 index 0000000..c7f1c70 --- /dev/null +++ b/menuControlador.cs @@ -0,0 +1,275 @@ +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +public class menuControlador : MonoBehaviour { + + // variaveis para ativar e desativar os elementos do jogo + public GameObject jogador; + public GameObject hudUI; + public GameObject menuCamera; + public GameObject menuUI; + public GameObject botaoJogar; + public GameObject botaoContinue; + public GameObject botaoConfiguracoes; + public GameObject configuracaoCamera; + public GameObject configuracaoUI; + public GameObject introUI; + public GameObject introducaoUI; + public GameObject instrucoesUI; + public GameObject luzes; + public GameObject creditosUI; + + // temporizador de visibilidade das instrucoes na tela + private float timerInstrucao = 8.0f; + // controle de quando o jogador clicou para comecar o jogo (apos introducao) + private bool comecarJogo = false; + + + // Use this for initialization + void Start () { + + // define o jogador (FPC) e a hud in game como desativadas + jogador.SetActive (false); + hudUI.SetActive (false); + + // define o menu principal como ativo + menuUI.SetActive (true); + menuCamera.SetActive (true); + + // define o botao de continue como falso + botaoContinue.SetActive (false); + + // define o menu de configuracoes como desativado + configuracaoUI.SetActive (false); + configuracaoCamera.SetActive (false); + + // prepara a tela de introducao e instrucoes e define como desativada + introducaoUI.SetActive (true); + instrucoesUI.SetActive (false); + introUI.SetActive (false); + + // define as luzes como desligadas + luzes.SetActive (false); + + // define a tela de creditos como desativada + creditosUI.SetActive (false); + + } + + // Update is called once per frame + void Update () { + + // executa quando o jogador finalizou o jogo (encontrou todas as notas, o video e passou o tempo de interacao do computador) + if(computador_script.videoEncontrado) + { + // acende as luzes apos o som do teclado parar + if(computador_script.timer <= 0) + { + // define as luzes como ligadas + luzes.SetActive (true); + } + // exibicao dos creditos apos 2 segundos + if(computador_script.timer <= -2) + { + // define o jogador (FPC) e a hud in game como desativadas + jogador.SetActive (false); + hudUI.SetActive (false); + // ativa a camera do menu + menuCamera.SetActive (true); + // ativa os creditos na tela + creditosUI.SetActive (true); + } + // volta ao menu principal de encerramento de jogo apos 15 segundos + if(computador_script.timer <= -17) + { + // habilitando o cursor do mouse + Cursor.lockState = CursorLockMode.None; + Cursor.visible = true; + // desativa os creditos na tela + creditosUI.SetActive (false); + // ativa o menu principal + menuUI.SetActive (true); + // desativa os botoes de jogar, continue e configuraçoes + botaoJogar.SetActive (false); + botaoContinue.SetActive (false); + botaoConfiguracoes.SetActive (false); + } + } + + // executa quando o jogador clicou no botao Comecar na tela de introducao + if(comecarJogo) + { + // contagem regressiva do temporizador de exibicao das instrucoes + timerInstrucao -= Time.deltaTime; + + // executa quando o tempo de exibicao das instrucoes acaba + if(timerInstrucao <= 0) + { + // desativa a tela de introducao e instrucoes + introUI.SetActive (false); + // desativa a camera do menu + menuCamera.SetActive (false); + // ativa o jogador na cena e a hud + jogador.SetActive (true); + hudUI.SetActive (true); + // desativa o controle + comecarJogo = false; + + } + } + + // quando o jogador pressiona ESC + if(Input.GetKeyDown(KeyCode.Escape)) + { + // impede do menu de pause ser acessado sem ser durante o jogo (ou seja, apenas quando o jogador esta ativo pode executar) + if(jogador.activeInHierarchy) + { + // define o jogador (FPC) e a hud in game como desativadas + jogador.SetActive (false); + hudUI.SetActive (false); + + // habilitando o cursor do mouse + Cursor.lockState = CursorLockMode.None; + Cursor.visible = true; + + // ativa o menu de pausa + menuUI.SetActive (true); + menuCamera.SetActive (true); + + // troca o botao de jogar por continue + botaoJogar.SetActive (false); + botaoContinue.SetActive (true); + + } + + } + + } + + // metodo que inicia o jogo quando o jogador clica no botao Jogar no menu principal + public void StartGame () { + + // desativa o menu principal para dar inicio ao jogo + menuUI.SetActive (false); + + // ativa a tela de introducao e instrucoes + introUI.SetActive (true); + introducaoUI.SetActive (true); + instrucoesUI.SetActive (false); + + } + + // metodo que inicia o jogo quando o jogador clica no botao de Comecar na tela de introducao + public void ComecarGame () { + + // desabilitando o cursor do mouse + Cursor.lockState = CursorLockMode.Locked; + Cursor.visible = false; + + // ativa a exibicao das intrucoes do jogo na tela + instrucoesUI.SetActive (true); + introducaoUI.SetActive (false); + + comecarJogo = true; + } + + // metodo que inicia o jogo quando o jogador clica no botao Continue no menu de pausa + public void ContinueGame () { + + // desabilitando o cursor do mouse + Cursor.lockState = CursorLockMode.Locked; + Cursor.visible = false; + + // desativa o menu principal para dar inicio ao jogo + menuUI.SetActive (false); + menuCamera.SetActive (false); + + // ativa o jogador na cena e a hud + jogador.SetActive (true); + hudUI.SetActive (true); + + } + + // metodo que abre o menu de configuracoes do jogo quando o jogador clica no botao Configuracoes no menu principal + public void SettingsGame () { + + // desativa o menu principal + menuUI.SetActive (false); + menuCamera.SetActive (false); + + // ativa o menu de configuracoes + configuracaoUI.SetActive (true); + configuracaoCamera.SetActive (true); + + } + + // metodo ativado toda vez que o jogador muda o valor do Slider de audio no menu de configuracoes + public void MudaVolume () { + + // ajusta o volume do audio de acordo com o valor do Slider + AudioListener.volume = GameObject.FindGameObjectWithTag("Volume").GetComponent().value; + + } + + // metodo ativado toda vez que o jogador muda o valor do Slider de video no menu de configuracoes + public void MudaQualidade () { + + // coleta o valor atual no slider + float quali = GameObject.FindGameObjectWithTag("Qualidade").GetComponent().value; + + // define qual a qualidade selecionada + if(quali >=0 && quali < 1) + { + // Fastest + QualitySettings.SetQualityLevel(0); + } + else if(quali >=1 && quali < 2) + { + // Fast + QualitySettings.SetQualityLevel(1); + } + else if(quali >=2 && quali < 3) + { + // Simple + QualitySettings.SetQualityLevel(2); + } + else if(quali >=3 && quali < 4) + { + // Good + QualitySettings.SetQualityLevel(3); + } + else if(quali >=4 && quali < 5) + { + // Beautiful + QualitySettings.SetQualityLevel(4); + } + else if(quali >=5 && quali < 6) + { + // Fantastic + QualitySettings.SetQualityLevel(5); + } + } + + // metodo que abre novamente o menu principal depois do jogador clicar em Voltar no menu de configuracoes + public void QuitSettings () { + + // desativa o menu de configuracoes + configuracaoUI.SetActive (false); + configuracaoCamera.SetActive (false); + + // ativa o menu principal + menuUI.SetActive (true); + menuCamera.SetActive (true); + + } + + // metodo que encerra o jogo quando o jogador clica no botao Sair no menu principal + public void QuitGame () { + + // fecha o jogo + Application.Quit(); + + } + +} diff --git a/notasUI.cs b/notasUI.cs new file mode 100644 index 0000000..4920f13 --- /dev/null +++ b/notasUI.cs @@ -0,0 +1,36 @@ +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +public class notasUI : MonoBehaviour { + + // variaveis de controle de quantas notas existem e quantas foram coletadas + public static int notasColetadas = 0; + public int notasTotal = 5; + + // variavel para manipulacao do texto dentro a UI + public Text notaUI; + + + // Use this for initialization + void Start () { + + // reset de variaveis + notasColetadas = 0; + notasTotal = 5; + + } + + // Update is called once per frame + void Update () { + + // coleta o conteudo de texto + notaUI = GetComponent(); + + // manipulacao do texto a cada frame com os valores atualizados (sera manipulado em outro script) + notaUI.text = ("Notas: " + notasColetadas + "/" + notasTotal); + + + + } +} diff --git a/porta_scritpt.cs b/porta_scritpt.cs new file mode 100644 index 0000000..ce0f024 --- /dev/null +++ b/porta_scritpt.cs @@ -0,0 +1,75 @@ +using UnityEngine; +using System.Collections; + +public class porta_scritpt : MonoBehaviour { + + // variavel que verifica o estado da porta (se aberta = true / se fechada = false) + public bool aberto = false; + // variaveis que definem os valores da angulacao da porta aberta e fechada + public float anguloAberto = 90f; + public float anguloFechado = 0f; + // variavel para suavizar a abertura e fechamento da porta quando ocorre a mudanca de estado + public float suave = 3f; + + + public AudioClip soundOpen; + public AudioClip soundClose; + + + // Use this for initialization + void Start () { + + } + + // metodo que muda o estado da porta + public void ChangeDoorState () { + + // caso a porta esteja aberta (true), sera mudada para fechada (false), ou vice-versa + aberto = !aberto; + + // caso o estado da porta esteja como aberto, executa o if + if (aberto) + { + // coleta o componente de audio + AudioSource audio = GetComponent(); + // define o audio como o som de abrir porta + audio.clip = soundOpen; + // executa o audio + audio.Play(); + } + // caso o estado da porta esteja como fechado, executa o else + else + { + // coleta o componente de audio + AudioSource audio = GetComponent(); + // define o audio como o som de fechar porta + audio.clip = soundClose; + // executa o audio + audio.Play(); + } + + + } + + // Update is called once per frame + void Update () { + + // caso o estado da porta esteja como aberto, executa o if + if (aberto) + { + // cria uma variavel local para rotacionar a porta + Quaternion rotacionadoA = Quaternion.Euler(0, anguloAberto, 0); + // rotaciona a porta para a posicao de aberta e com suavidade + transform.localRotation = Quaternion.Slerp(transform.localRotation, rotacionadoA, suave * Time.deltaTime); + } + // caso o estado da porta esteja como fechado, executa o else + else + { + // cria uma variavel local para rotacionar a porta + Quaternion rotacionadoF = Quaternion.Euler(0, anguloFechado, 0); + // rotaciona a porta para a posicao de fechada e com suavidade + transform.localRotation = Quaternion.Slerp(transform.localRotation, rotacionadoF, suave * Time.deltaTime); + } + + } +} diff --git a/susto_posicao.cs b/susto_posicao.cs new file mode 100644 index 0000000..749aad3 --- /dev/null +++ b/susto_posicao.cs @@ -0,0 +1,60 @@ +using UnityEngine; +using System.Collections; + +public class susto_posicao : MonoBehaviour { + + // variavel que coleta o nome do objeto em que o script esta anexado + private string nomeObjeto; + // variavel que controla se o jogador foi detectado na posicao de susto + private bool JogadorPosicionado = false; + + + // Use this for initialization + void Start () { + + // armazena o nome do objeto + nomeObjeto = gameObject.name; + + } + + // Update is called once per frame + void Update () { + + // executa se o jogador esta ou estava na posicao + if(JogadorPosicionado) + { + // identifica de qual sistema de susto o objeto pertence e ativa a deteccao da posicao do jogador + switch(nomeObjeto) + { + case "SustoFundo": + susto_script.SustoFundoP = true; + break; + case "SustoHall": + susto_script.SustoHallP = true; + break; + case "SustoCorredor": + susto_script.SustoCorredorP = true; + break; + case "SustoLab": + susto_script.SustoLabP = true; + break; + default: break; + } + } + + } + + // metodo que executa sempre que algum objeto entrar no Trigger + void OnTriggerEnter (Collider other) { + + // caso o objeto detectado dentro do Trigger seja o jogador, executa + if(other.CompareTag("Player")) + { + // define que o jogador esta na posicao do susto + JogadorPosicionado = true; + } + + } + + +} diff --git a/susto_script.cs b/susto_script.cs new file mode 100644 index 0000000..f06ec16 --- /dev/null +++ b/susto_script.cs @@ -0,0 +1,163 @@ +using UnityEngine; +using System.Collections; + +public class susto_script : MonoBehaviour { + + // variaveis para controle de ativacao do SustoFundo + public static bool SustoFundoV = false; + public static bool SustoFundoP = false; + // variaveis para controle de ativacao do SustoHall + public static bool SustoHallV = false; + public static bool SustoHallP = false; + // variaveis para controle de ativacao do SustoCorredor + public static bool SustoCorredorV = false; + public static bool SustoCorredorP = false; + // variaveis para controle de ativacao do SustoLab + public static bool SustoLabV = false; + public static bool SustoLabP = false; + + // variaveis para ativacao dos sustos + public GameObject SFundoV; // contem a deteccao de posicao da visao do jogador + public GameObject SFundoP; // contem todo o sistema de deteccao de susto e a deteccao de posicao do jogador + public GameObject SFundoF; // contem o fantasma do sistema + + public GameObject SHallV; // contem a deteccao de posicao da visao do jogador + public GameObject SHallP; // contem todo o sistema de deteccao de susto e a deteccao de posicao do jogador + public GameObject SHallF; // contem o fantasma do sistema + + public GameObject SCorredorV; // contem a deteccao de posicao da visao do jogador + public GameObject SCorredorP; // contem todo o sistema de deteccao de susto e a deteccao de posicao do jogador + public GameObject SCorredorF; // contem o fantasma do sistema + + public GameObject SLabF; // contem o fantasma do sistema + public GameObject SLabP; // contem todo o sistema de deteccao de susto e a deteccao de posicao do jogador + public GameObject SLabV; // contem a deteccao de posicao da visao do jogador + public GameObject TargetL; // contem o alvo do fantasma + + // variaveis de temporizadores de sustos + private float timerF = 1.8f; // SustoFundo + private float timerH = 5.0f; // SustoHall + private float timerC = 1.8f; // SustoCorredor + private float timerL = 7.0f; // SustoLab + + + // Use this for initialization + void Start () { + // ativa todos os sistemas de susto e deteccao de posicao do jogador + SFundoP.SetActive (true); + SHallP.SetActive (true); + SCorredorP.SetActive (true); + SLabP.SetActive (true); + + // desativa deteccoes de visao do jogador e fantasmas + SFundoV.SetActive (false); + SFundoF.SetActive (false); + SHallV.SetActive (false); + SHallF.SetActive (false); + SCorredorV.SetActive (false); + SCorredorF.SetActive (false); + SLabV.SetActive (false); + SLabF.SetActive (false); + TargetL.SetActive (false); + + } + + // Update is called once per frame + void Update () { + + // executa apenas quando o jogador for detectado na posicao do SustoCorredor + if(SustoCorredorP) + { + // ativa a deteccao de visao do jogador + SCorredorV.SetActive (true); + } + // executa apenas quando o jogador for detectado na posicao do SustoFundo + if(SustoFundoP) + { + // ativa a deteccao de visao do jogador + SFundoV.SetActive (true); + } + // executa apenas quando o jogador for detectado na posicao do SustoHall + if(SustoHallP) + { + // ativa a deteccao de visao do jogador + SHallV.SetActive (true); + } + // executa apenas quando o jogador for detectado na posicao do SustoLab + if(SustoLabP) + { + // ativa a deteccao de visao do jogador + SLabV.SetActive (true); + } + + // executa quando a posicao do jogador e posicao da visao do jogador de um mesmo susto sao validas + if(SustoFundoP && SustoFundoV) + { + // ativa o fantasma + SFundoF.SetActive (true); + } + else if(SustoHallP && SustoHallV) + { + // ativa o fantasma + SHallF.SetActive (true); + } + else if(SustoCorredorP && SustoCorredorV) + { + // ativa o fantasma + SCorredorF.SetActive (true); + } + else if(SustoLabP && SustoLabV) + { + // ativa o alvo do fantasma e o fantasma + TargetL.SetActive (true); + SLabF.SetActive (true); + } + + // executa quando o fantasma respectivo de cada sistema esta ativado + if(SFundoF.activeInHierarchy) + { + // inicia o temporizador do SustoFundo + timerF -= Time.deltaTime; + } + else if(SHallF.activeInHierarchy) + { + // inicia o temporizador do SustoHall + timerH -= Time.deltaTime; + } + else if(SCorredorF.activeInHierarchy) + { + // inicia o temporizador do SustoCorredor + timerC -= Time.deltaTime; + } + else if(SLabF.activeInHierarchy) + { + // inicia o temporizador do SustoLab + timerL -= Time.deltaTime; + } + + // executa quando os tempos dos respectivos temporizadores chega ao fim + if(timerF <= 0) + { + // desativa o sistema do SustoFundo + SFundoP.SetActive (false); + } + if(timerH <= 0) + { + // desativa o sistema do SustoHall + SHallP.SetActive (false); + } + if(timerC <= 0) + { + // desativa o sistema do SustoCorredor + SCorredorP.SetActive (false); + } + if(timerL <= 0) + { + // desativa o sistema do SustoLab + SLabP.SetActive (false); + } + + } + + +} diff --git a/susto_visao.cs b/susto_visao.cs new file mode 100644 index 0000000..769f618 --- /dev/null +++ b/susto_visao.cs @@ -0,0 +1,60 @@ +using UnityEngine; +using System.Collections; + +public class susto_visao : MonoBehaviour { + + // variavel que coleta o nome do objeto em que o script esta anexado + private string nomeObjeto; + // variavel que controla se foi detectado que o jogador esta olhando para o susto + private bool JogadorVendo = false; + + + // Use this for initialization + void Start () { + + // armazena o nome do objeto + nomeObjeto = gameObject.name; + + } + + // Update is called once per frame + void Update () { + + // executa se o jogador esta olhando na direcao e na distancia correta + if(JogadorVendo) + { + // identifica de qual sistema de susto o objeto pertence e ativa a deteccao da visao do jogador + switch(nomeObjeto) + { + case "GhostF": + susto_script.SustoFundoV = true; + break; + case "GhostH": + susto_script.SustoHallV = true; + break; + case "GhostC": + susto_script.SustoCorredorV = true; + break; + case "GhostL": + susto_script.SustoLabV = true; + break; + default: break; + } + } + + } + + // metodo que executa sempre que algum objeto entrar no Trigger + void OnTriggerEnter (Collider other) { + + // caso o objeto detectado dentro do Trigger seja a visao do jogador, executa + if(other.CompareTag("PlayerView")) + { + // define que o jogador esta olhando para o susto + JogadorVendo = true; + } + + } + + +}