Example #1
0
    private void Update()
    {
        switch (monstruo.EstadoMonstruoActual())
        {
        case EstadosMonstruo.EnRuta:
            if (((Vector2)transform.position - ruta[puntoRutaActual].EstaPosicion()).sqrMagnitude < MARGEN)
            {
                puntoRutaActual = (puntoRutaActual + 1) % ruta.Length;
            }
            break;

        case EstadosMonstruo.PensandoRuta:
            caminoDeVuelta = ControladorRecorrido.instance.EncontarCamino(monstruoRB.position, ruta);
            if (caminoDeVuelta != null)
            {
                monstruo.CambiarEstadoMonstruo(EstadosMonstruo.VolviendoARuta);
            }
            break;

        case EstadosMonstruo.VolviendoARuta:
            if (caminoDeVuelta.Fin())
            {
                monstruo.CambiarEstadoMonstruo(EstadosMonstruo.EnRuta);
            }
            else
            {
                caminoDeVuelta.PosicionObjetivo(transform.position);
            }
            break;
        }
    }
Example #2
0
    void OnTriggerStay2D(Collider2D other)
    {
        Jugador aux;

        if ((aux = other.GetComponent <Jugador>()) != null && !aux.Invisible())
        {
            RaycastHit2D hit = Physics2D.Raycast(transform.position, jugador.position - transform.position, 100f, queGolpear);
            if (monstruo.EstadoMonstruoActual() != EstadosMonstruo.Proyectado && monstruo.EstadoMonstruoActual() != EstadosMonstruo.Huyendo && hit.collider.gameObject.tag == "Player")
            {
                monstruo.CambiarEstadoMonstruo(EstadosMonstruo.SiguiendoJugador);
                ultimaPosicionJugador = jugador.position;
            }
        }
    }
Example #3
0
 void OnTriggerStay2D(Collider2D other)
 {
     if (este.EstadoMonstruoActual() != EstadosMonstruo.Quieto && other.gameObject.tag == "Player" && !golpear.EstaGolpeando() && !other.GetComponent <Jugador>().Invisible())
     {
         golpear.Golpeando();
     }
 }
Example #4
0
    private void Start()
    {
        Rigidbody2D     jugadorRB;
        Animator        animador;
        float           giroInicial = 0;
        DetectarRuta    detectorRuta;
        CampoVision     campoVision;
        DetectorParedes detectorParedes;
        Vida            vida;
        Golpeable       detectorGolpes;

        jugadorRB       = GameObject.FindGameObjectWithTag("Player").GetComponent <Rigidbody2D>();
        animador        = GetComponent <Animator>();
        detectorRuta    = GetComponentInChildren <DetectarRuta>();
        campoVision     = GetComponentInChildren <CampoVision>();
        detectorParedes = GetComponentInChildren <DetectorParedes>();
        vida            = GetComponent <Vida>();
        detectorGolpes  = GetComponentInChildren <Golpeable>();

        este      = GetComponent <Monstruo>();
        este.Rb2D = GetComponent <Rigidbody2D>();
        este.Tipo(TipoMonstruo.Panzudo);

        este.CambiarEstadoMonstruo(estadoInicial);
        este.Comportamiento = () => {
            switch (este.EstadoMonstruoActual())
            {
            case EstadosMonstruo.EnRuta:
                if (!andando)
                {
                    pasos.Play();
                    andando = true;
                    respiracionBusqueda.Stop();
                }
                detectorParedes.EvitarColision(detectorRuta.PosicionPuntoRuta());
                MoverseHacia(detectorRuta.PosicionPuntoRuta(), velMovRuta);
                break;

            case EstadosMonstruo.SiguiendoJugador:
                if (!cargando)
                {
                    cargando = true;
                    gritoCarga.Play();
                }
                if ((campoVision.UltimaPosicionJugador() - este.Rb2D.position).sqrMagnitude < Monstruo.MARGEN)
                {
                    este.CambiarEstadoMonstruo(EstadosMonstruo.Desorientado);
                }
                detectorParedes.EvitarColision(campoVision.UltimaPosicionJugador());
                MoverseHacia(campoVision.UltimaPosicionJugador(), velMovPerseguir);
                break;

            case EstadosMonstruo.VolviendoARuta:
                if (!andando)
                {
                    pasos.Play();
                    andando = !andando;
                    respiracionBusqueda.Stop();
                }
                detectorParedes.EvitarColision(detectorRuta.PosicionPuntoRuta());
                MoverseHacia(detectorRuta.PosicionPuntoRuta(), velMovRuta);
                break;

            case EstadosMonstruo.Desorientado:
                Pararse();
                if (andando)
                {
                    pasos.Stop();
                    andando  = !andando;
                    cargando = false;
                    respiracionBusqueda.Play();
                }
                giroInicial     = este.Rb2D.rotation;
                este.Cronometro = Time.time;
                este.CambiarEstadoMonstruo(EstadosMonstruo.BuscandoJugador);
                break;

            case EstadosMonstruo.BuscandoJugador:
                if (andando)
                {
                    pasos.Stop();
                    andando  = !andando;
                    cargando = false;
                    respiracionBusqueda.Play();
                }
                Pararse();
                Vector2 aux = new Vector2(Mathf.Sin(((Time.time - este.Cronometro) / periodoGiro + giroInicial / 360f) * 2 * Mathf.PI), Mathf.Cos(((Time.time - este.Cronometro) / periodoGiro + giroInicial / 360f) * 2 * Mathf.PI));
                GiroInstantaneo(aux);
                if (Time.time - este.Cronometro > periodoGiro)
                {
                    este.CambiarEstadoMonstruo(EstadosMonstruo.PensandoRuta);
                }
                break;

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

            case EstadosMonstruo.Huyendo:
                MoverseHacia((2 * este.Rb2D.position - jugadorRB.position), velMovHuida);
                GameManager.instance.MontruoHuye(TipoMonstruo.Panzudo);
                GetComponent <Collider2D>().enabled = false;
                Destroy(gameObject, 10f);
                break;

            case EstadosMonstruo.Atacando:
                MoverseHacia(jugadorRB.position, velMovPerseguir);
                break;
            }
        };

        este.Morir = () =>
        {
            animador.SetTrigger("muriendo");
            GameManager.instance.MonstruoMuerto(TipoMonstruo.Panzudo);
            Destroy(detectorGolpes.gameObject);
            este.enabled = false;
            este.Rb2D.Sleep();
            GetComponent <Collider2D>().enabled = false;
            Destroy(gameObject, 5f);
        };

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

        este.Atacado = (Jugador a) =>
        {
            este.Empujar(a.transform.position, a.fuerzaEmpujon);
            vida.Danyar(a.Danyo(), TipoMonstruo.Panzudo);
            este.CambiarEstadoMonstruo(EstadosMonstruo.Proyectado);
            vida.Invulnerable(true);
        };

        este.FinalAtaque = () =>
        {
            este.CambiarEstadoMonstruo(EstadosMonstruo.Desorientado);
        };
    }
Example #5
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();
        };
    }