void Update()
    {
        if (gravedadsala.x == 0 && gravedadsala.y == 0)
        {
            direccion = DireccionGravedad.Gravedad0;
        }
        else if (gravedadsala.x < 0)
        {
            direccion = DireccionGravedad.Izquierda;
        }
        else if (gravedadsala.x > 0)
        {
            direccion = DireccionGravedad.Derecha;
        }
        else if (gravedadsala.y > 0)
        {
            direccion = DireccionGravedad.Arriba;
        }
        else if (gravedadsala.y < 0)
        {
            direccion = DireccionGravedad.Abajo;
        }


        if (jugadorPresente)
        {
            GameManager.instance.grav = gravedadsala;
            GameManager.instance.SetCurrentGravity(this);
        }
    }
    void Movimiento()
    {
        float x = Input.GetAxisRaw("Horizontal");
        float y = Input.GetAxisRaw("Vertical");

        DireccionGravedad direccionActual = GameManager.instance.salaactual.GetComponent <GuardaGravedad>().GetDireccion();

        if (direccionActual == DireccionGravedad.Gravedad0)
        {
            int propulsionx = 0;
            int propulsiony = 0;


            if (rb.velocity.x > -limitspeed && rb.velocity.x < limitspeed || rb.velocity.x <= -limitspeed && x > 0 || rb.velocity.x >= limitspeed && x < 0)            //permitir la propulsión en el eje x si no se pasa del limite de velocidad
            {
                propulsionx = 1;
            }

            if (rb.velocity.y > -limitspeed && rb.velocity.y < limitspeed || rb.velocity.y <= -limitspeed && y > 0 || rb.velocity.y >= limitspeed && y < 0)            ////permitir la propulsión en el eje y si no se pasa del limite de velocidad
            {
                propulsiony = 1;
            }

            rb.AddForce(new Vector2(x * propulsionx * fuerzapropulsion * Time.deltaTime, y * propulsiony * fuerzapropulsion * Time.deltaTime), ForceMode2D.Impulse);

            if (propulsionx == 1 && x != 0 || propulsiony == 1 && y != 0)
            {
                GameManager.instance.PropulsaOxigeno();
            }
            if (x == 0)
            {
                rb.velocity = new Vector2(rb.velocity.x - rb.velocity.x * deceleraciongrav0, rb.velocity.y);
            }
            if (y == 0)
            {
                rb.velocity = new Vector2(rb.velocity.x, rb.velocity.y - rb.velocity.y * deceleraciongrav0);
            }
        }

        else
        {
            if (direccionActual == DireccionGravedad.Derecha)
            {
                rb.velocity = new Vector2(0, y * speed);
            }
            else if (direccionActual == DireccionGravedad.Izquierda)
            {
                rb.velocity = new Vector2(0, y * speed);
            }
            else if (direccionActual == DireccionGravedad.Abajo)
            {
                rb.velocity = new Vector2(x * speed, 0);
            }
            else
            {
                rb.velocity = new Vector2(x * speed, 0);
            }
        }
    }
Esempio n. 3
0
    //La función detecta si el objeto ha colisionado con el botón desde arriba.
    private void OnCollisionEnter2D(Collision2D collision)
    {
        currentGravity = GameManager.instance.GetDirection();
        Vector3 extent   = collision.collider.bounds.extents;
        Vector3 position = collision.transform.position;
        bool    activar  = false;

        if (currentGravity == gravedadBoton)
        {
            switch (currentGravity)
            {
            // probar
            case DireccionGravedad.Abajo:
                if (position.y - extent.y <= thisPosition.y + (thisExtent.y - 0.1))
                {
                    activar = true;
                }
                break;

            case DireccionGravedad.Arriba:
                if (position.y + extent.y >= thisPosition.y - (thisExtent.y - 0.1))
                {
                    activar = true;
                }
                break;

            case DireccionGravedad.Izquierda:
                if (position.x - extent.x <= thisPosition.x + (thisExtent.x - 0.1))
                {
                    activar = true;
                }
                break;

            case DireccionGravedad.Derecha:
                if (position.x + extent.x >= thisPosition.y - (thisExtent.x - 0.1))
                {
                    activar = true;
                }
                break;

            default:
                break;
            }
        }
        if (activar)
        {
            currentObject = collision.gameObject;
            foreach (Observer observer in observers)
            {
                observer.GetMonoBehaviour().Invoke(observer.GetEnterFunction(), onDelay);
            }
        }
    }
    void Falling()
    {
        DireccionGravedad direccionActual = GameManager.instance.salaactual.GetComponent <GuardaGravedad>().GetDireccion();

        if (direccionActual == DireccionGravedad.Abajo && rb.velocity.y < 0 ||
            direccionActual == DireccionGravedad.Arriba && rb.velocity.y > 0)
        {
            rb.velocity       = new Vector2(0, rb.velocity.y);
            controlmovimiento = false;
        }
        else if (direccionActual == DireccionGravedad.Izquierda && rb.velocity.x < 0 ||
                 direccionActual == DireccionGravedad.Derecha && rb.velocity.x > 0)
        {
            rb.velocity       = new Vector2(rb.velocity.x, 0);
            controlmovimiento = false;
        }
        else
        {
            controlmovimiento = true;
        }
    }
    public void SpriteFlip()
    {
        currentRotation = spriteRenderer.transform.rotation;
        DireccionGravedad direccionActual = GameManager.instance.salaactual.GetComponent <GuardaGravedad>().GetDireccion();

        if ((direccionActual == DireccionGravedad.Arriba || direccionActual == DireccionGravedad.Abajo) && (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.D)))
        {
            animator.SetBool("movimiento", true);
        }
        else if ((direccionActual == DireccionGravedad.Derecha || direccionActual == DireccionGravedad.Izquierda) && (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.S)))
        {
            animator.SetBool("movimiento", true);
        }
        else
        {
            animator.SetBool("movimiento", false);
        }

        switch (direccionActual)         // flip en las 4 direcciones segun la gravedad
        {
        case DireccionGravedad.Arriba:
            spriteRenderer.transform.rotation = Quaternion.Euler(0, 0, 180f);

            if (Input.GetKey(KeyCode.A))
            {
                spriteRenderer.flipX = false;
            }
            else if (Input.GetKey(KeyCode.D))
            {
                spriteRenderer.flipX = true;
            }
            if ((Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.D)) && controlmovimiento)
            {
                pasos.loop = true;
                pasos.Play();
            }
            else if (Input.GetKeyUp(KeyCode.A) || Input.GetKeyUp(KeyCode.D) || !controlmovimiento)
            {
                pasos.Stop();
            }


            break;

        case DireccionGravedad.Abajo:
            spriteRenderer.transform.rotation = Quaternion.Euler(0, 0, 0);

            if (Input.GetKey(KeyCode.A))
            {
                spriteRenderer.flipX = true;
            }
            else if (Input.GetKey(KeyCode.D))
            {
                spriteRenderer.flipX = false;
            }
            if ((Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.D)) && controlmovimiento)
            {
                pasos.loop = true;
                pasos.Play();
            }
            else if (Input.GetKeyUp(KeyCode.A) || Input.GetKeyUp(KeyCode.D) || !controlmovimiento)
            {
                pasos.Stop();
            }

            break;

        case DireccionGravedad.Gravedad0:
            spriteRenderer.transform.rotation = Quaternion.Euler(0, 0, 0);
            pasos.Stop();
            if (Input.GetKey(KeyCode.A))
            {
                spriteRenderer.flipX = true;
            }
            else if (Input.GetKey(KeyCode.D))
            {
                spriteRenderer.flipX = false;
            }
            break;

        case DireccionGravedad.Izquierda:
            if (currentRotation.z == 0)
            {
                spriteRenderer.transform.rotation = Quaternion.Euler(0, 0, 90f);
            }
            else
            {
                spriteRenderer.transform.rotation = Quaternion.Euler(0, 0, 270f);
            }

            if (Input.GetKey(KeyCode.W))
            {
                spriteRenderer.flipX = true;
            }
            else if (Input.GetKey(KeyCode.S))
            {
                spriteRenderer.flipX = false;
            }
            if ((Input.GetKeyDown(KeyCode.W) || Input.GetKeyDown(KeyCode.S)) && controlmovimiento)
            {
                pasos.loop = true;
                pasos.Play();
            }
            else if (Input.GetKeyUp(KeyCode.W) || Input.GetKeyUp(KeyCode.S) || !controlmovimiento)
            {
                pasos.Stop();
            }

            break;

        case DireccionGravedad.Derecha:
            if (currentRotation.z == 0)
            {
                spriteRenderer.transform.rotation = Quaternion.Euler(0, 0, 270f);
            }
            else
            {
                spriteRenderer.transform.rotation = Quaternion.Euler(0, 0, 90f);
            }

            if (Input.GetKey(KeyCode.W))
            {
                spriteRenderer.flipX = false;
            }
            else if (Input.GetKey(KeyCode.S))
            {
                spriteRenderer.flipX = true;
            }
            if ((Input.GetKeyDown(KeyCode.W) || Input.GetKeyDown(KeyCode.S)) && controlmovimiento)
            {
                pasos.loop = true;
                pasos.Play();
            }
            else if (Input.GetKeyUp(KeyCode.W) || Input.GetKeyUp(KeyCode.S) || !controlmovimiento)
            {
                pasos.Stop();
            }

            break;
        }
    }