예제 #1
0
 public void Esconderse(bool a, Vector2 en)
 {
     transform.position = en;
     Invisible(a);
     vida.Invulnerable(a);
     jugador.isKinematic = a;
     movimientoLibre     = !a;
     jugador.Sleep();
     GetComponent <SpriteRenderer>().enabled = !a;
     piernas.Invisible(a);
     LuzConica(!a);
 }
예제 #2
0
    // Use this for initialization
    void Start()
    {
        Animator      animador       = GetComponent <Animator>();
        Vida          vida           = GetComponent <Vida>();
        DetectarRuta  detectorRuta   = GetComponent <DetectarRuta>();
        GeneradoOndas generadorOndas = GetComponentInChildren <GeneradoOndas>();

        este      = GetComponent <Monstruo>();
        este.Rb2D = GetComponent <Rigidbody2D>();
        Cabreo      cabreometro = GetComponentInChildren <Cabreo>();
        Rigidbody2D jugadorP    = GameObject.FindGameObjectWithTag("Player").GetComponent <Rigidbody2D>();

        cabreometro.Iniciar(cabreoMaximo, cabreoUmbral, tasaAumentoDeCabreo, tasaDescensoDeCabreo);
        este.Tipo(TipoMonstruo.Fantasma);

        este.CambiarEstadoMonstruo(estadoInicial);
        este.Comportamiento = () => {
            audioGrito.volume = cabreometro.Nivel();

            este.Rb2D.isKinematic = !(este.EstadoMonstruoActual() == EstadosMonstruo.SiguiendoJugador || este.EstadoMonstruoActual() == EstadosMonstruo.Proyectado);

            switch (este.EstadoMonstruoActual())
            {
            case EstadosMonstruo.Huyendo:
                vida.Invulnerable(true);
                este.Rb2D.velocity = (2 * este.Rb2D.position - cabreometro.JugadorRB().position).normalized * velocidadHuida;
                GiroInstantaneo(este.Rb2D.position - jugadorP.position);
                GameManager.instance.MontruoHuye(TipoMonstruo.Fantasma);
                audioGrito.Stop();
                Destroy(gameObject, 10f);
                break;

            case EstadosMonstruo.Proyectado:
                vida.Invulnerable(true);
                if (Time.time - este.Cronometro > tiempoAturdimiento)
                {
                    este.CambiarEstadoMonstruo(EstadosMonstruo.Quieto);
                }
                break;

            default:
                este.CambiarEstadoMonstruo(cabreometro.CambioCabreo());
                switch (este.EstadoMonstruoActual())
                {
                case EstadosMonstruo.Quieto:
                    Parar();
                    vida.Invulnerable(true);
                    generadorOndas.PararOndas();
                    break;

                case EstadosMonstruo.SiguiendoJugador:
                    vida.Invulnerable(false);
                    MoverseHacia(cabreometro.JugadorRB().position, velocidadPersecucion);
                    generadorOndas.GenerarOndas();
                    break;
                }
                break;
            }
        };

        audioGrito.Play();
        audioGrito.volume = 0f;
        este.Morir        = () =>
        {
            generadorOndas.enabled = false;
            animador.SetTrigger("muriendo");
            GameManager.instance.MonstruoMuerto(TipoMonstruo.Fantasma);
            este.enabled = false;
            este.Rb2D.Sleep();
            este.Rb2D.simulated = false;
            Destroy(generadorOndas.gameObject);
            audioGrito.Stop();
            Destroy(gameObject, 5f);
        };

        este.Atacar = () =>
        {
            animador.SetTrigger("atacando");
            vida.Invulnerable(false);
        };

        este.Atacado = (Jugador a) =>
        {
            if (este.EstadoMonstruoActual() == EstadosMonstruo.SiguiendoJugador)
            {
                este.Empujar(a.transform.position, a.fuerzaEmpujon);
                vida.Danyar(a.Danyo(), TipoMonstruo.Panzudo);
                este.CambiarEstadoMonstruo(EstadosMonstruo.Proyectado);
                cabreometro.Tranquilizar();
            }
        };

        este.FinalAtaque = () =>
        {
            vida.Invulnerable(true);
        };

        este.EntrandoLuz = () =>
        {
            generadorOndas.SumarLuz();
        };

        este.SaliendoLuz = () =>
        {
            generadorOndas.RestarLuz();
        };
    }