コード例 #1
0
 // 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;
     }
 }
コード例 #2
0
    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);
    }