// Update is called once per frame void Update() { TimeShoot -= Time.deltaTime; if (TimeShoot < 0 && Attiva()) { audio.Play(); GameObject istance = (GameObject)Instantiate(Bullet, new Vector3(this.transform.position.x, this.transform.position.y, this.transform.position.z), transform.rotation); MuoviProiettile bullet = istance.GetComponent <MuoviProiettile>(); bullet.Velocità = Direzione ? +Velocità : -Velocità; TimeShoot = 1.2f; } }
StateManager.State getStateFromInput() { // controllo se il tasto del salto è stato rilasciato if (!We.Input.Jump) { keySalto = false; } // TimerScatto serve per far scattare il personaggio alla doppia // pressione (velocememnte) di un tasto direzionale. Avremo due // contatori (uno per la freccia direzionale destra ed uno per la // sinistra) che aumenteranno all'infinito. Più avanti è spiegato // il perché viene fatta questa procedura. timerScattoRimastoLeft += Time.deltaTime; timerScattoRimastoRight += Time.deltaTime; // Il salto è posizionato qui sopra perché il giocatore deve permettere al // personaggio di farlo saltare sia in camminata sia in corsa. Inoltre, se // lo scatto è attivato ed il personaggio salta in corsa, all'atterraggio ha // bisogno di continuare la corsa. Sarebbe stato stupido il contrario, indi. if (We.Input.Jump == true && !keySalto && physManager.Stamina >= physManager.ConsumoStaminaSalto && !physManager.CheckStairs()) { keySalto = true; return(StateManager.State.Jumping); } if (We.Input.MoveLeft == true && !cantMove) { // Cambia direzione del personaggio in base al tasto direzionale premuto physManager.Direction = false; // Se il tasto corrente (che è stato appena premuto) non è stato premuto nel frame precedente // ed il tempo che è passato dalla prima volta che è stato premuto è minore del tempo richiesto // della doppia pressione per attivare lo scatto, allora vai e permetti lo scatto! if (((tastoDirezionalePrecedentementePremuto == false && timerScattoRimastoLeft < TimerScatto) // Ritorna Run invece che Walk anche se lo scatto è comunque attivo. || ScattoAttivato == true) && physManager.Stamina > 1) { // Dice che è in scatto. ScattoAttivato = true; return(StateManager.State.Run); } else { // Vede se il tasto direzionale è stato precedentemente premuto if (tastoDirezionalePrecedentementePremuto == false) { // Se no, ora dice il contrario tastoDirezionalePrecedentementePremuto = true; // Ma se ne approfitta per resettare il tempo utile per lo scatto timerScattoRimastoLeft = 0; } return(StateManager.State.Walk); } } if (We.Input.MoveRight == true && !cantMove) { // Cambia direzione del personaggio in base al tasto direzionale premuto physManager.Direction = true; if (((tastoDirezionalePrecedentementePremuto == false && timerScattoRimastoRight < TimerScatto) || ScattoAttivato == true) && physManager.Stamina > 1) { ScattoAttivato = true; return(StateManager.State.Run); } else { if (tastoDirezionalePrecedentementePremuto == false) { tastoDirezionalePrecedentementePremuto = true; timerScattoRimastoRight = 0; } return(StateManager.State.Walk); } } // Qui dice che non è stato premuto alcun tasto direzionale tastoDirezionalePrecedentementePremuto = false; // e che lo scatto per la corsa è disattivato ScattoAttivato = false; if (We.Input.MoveDown == true && !movimento) { // Abbassa il personaggio transform.position = new Vector2(transform.position.x, transform.position.y - 0.10f); return(StateManager.State.Crouch); } if (We.Input.MoveUp == true && !movimento) { return(StateManager.State.Hide); } else { Hide = false; } if (We.Input.AttackPrimary && !movimento) { return(StateManager.State.Attack); } if (We.Input.AttackSecondary && !movimento && physManager.hud.GetComponent <HudHandler>().ValueMunitions > 0) { GameObject istance = (GameObject)Instantiate(Bullet, new Vector3(this.transform.position.x + (physManager.Direction? +0.4f:-0.4f), this.transform.position.y + 0.25f, this.transform.position.z), transform.rotation); MuoviProiettile bullet = istance.GetComponent <MuoviProiettile>(); bullet.Velocità = physManager.Direction ? +3 : -3; physManager.hud.GetComponent <HudHandler>().ValueMunitions--; return(StateManager.State.Attack2); } if (We.Input.Defense && !movimento && physManager.Stamina >= physManager.ConsumoStaminaDifesa) { return(StateManager.State.Defense); } return(StateManager.State.Unpressed); }