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); } } }
//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; } }