void Update() { if (able) { // CHECK IF DEAD dead = Physics2D.IsTouchingLayers(player_collider, deathLayer) || Physics2D.IsTouchingLayers(crouch_collider, deathLayer); //grounded = Physics2D.Raycast(player_body.transform.position, Vector2.down, .51f, groundLayer); // CHECK IF GROUNDED if (reversed) { grounded = Physics2D.BoxCast(player_body.transform.position, new Vector2(mini ? .45f : .95f, .1f), 0f, Vector2.up, .51f, groundLayer) && checkGrounded && (Physics2D.IsTouchingLayers(player_collider, groundLayer) || Physics2D.IsTouchingLayers(crouch_collider, groundLayer)); regate = -1; grounded_particles.gravityModifier = -Mathf.Abs(grounded_particles.gravityModifier); ground_impact_particles.gravityModifier = -Mathf.Abs(ground_impact_particles.gravityModifier); } else {//.9 grounded = Physics2D.BoxCast(player_body.transform.position, new Vector2(mini ? .45f : .95f, .1f), 0f, Vector2.down, .51f, groundLayer) && checkGrounded && (Physics2D.IsTouchingLayers(player_collider, groundLayer) || Physics2D.IsTouchingLayers(crouch_collider, groundLayer)); regate = 1; grounded_particles.gravityModifier = Mathf.Abs(grounded_particles.gravityModifier); ground_impact_particles.gravityModifier = Mathf.Abs(ground_impact_particles.gravityModifier); } //Debug.Log("Grounded: " + grounded); // IF GROUNDED --> TURN OFF TRAIL if (grounded) { trail.emitting = false; eyes.transform.Find("Eyes_Normal").gameObject.SetActive(true); eyes.transform.Find("Eyes_Wide").gameObject.SetActive(false); eyes.transform.Find("Eyes_Squint").gameObject.SetActive(false); eyes.transform.Find("Eyes_Irked").gameObject.SetActive(false); if (!prev_grounded && prev_velocity > 13) { Cube_Anim.ResetTrigger("Crouch"); Cube_Anim.ResetTrigger("Default"); Cube_Anim.ResetTrigger("Stretch"); Cube_Anim.SetTrigger("Squash"); } } // LIMIT Y SPEED if (player_body.velocity.y > maxSpeed) { player_body.velocity = new Vector2(player_body.velocity.x, maxSpeed); } else if (player_body.velocity.y < -maxSpeed) { player_body.velocity = new Vector2(player_body.velocity.x, -maxSpeed); } // Movement Speed moveX = Input.GetAxisRaw("Horizontal") * speed; // Grounded Particles if (grounded && (Mathf.Abs(player_body.velocity.x) > .1f || jump)) { if (!grounded_particles.isPlaying) { grounded_particles.Play(); } } else { grounded_particles.Stop(); } if ((prev_grounded && !grounded) || (!prev_grounded && grounded && prev_velocity > 10f)) { ground_impact_particles.Play(); } // JUMP! if (Input.GetButtonDown("Jump") || Input.GetKeyDown("space") || Input.GetMouseButtonDown(0)) { jump = true; released = false; fromGround = ((grounded || time < .07f) && jump); if (!reversed && player_body.velocity.y <= 1) { downjump = true; } else if (reversed && player_body.velocity.y >= -1) { downjump = true; } else { downjump = false; } } // RELEASE JUMP if (Input.GetButtonUp("Jump") || Input.GetKeyUp("space") || Input.GetMouseButtonUp(0)) { jump = false; released = true; } float hitDist = mini ? 0 : .6f; if (!reversed) { headHit = Physics2D.Raycast(new Vector2(transform.position.x, transform.position.y - .2f), Vector2.up, hitDist, groundLayer); } else { headHit = Physics2D.Raycast(new Vector2(transform.position.x, transform.position.y + .2f), -Vector2.up, hitDist, groundLayer); } int rev = reversed ? -1 : 1; Debug.DrawLine(transform.position - new Vector3(-1, rev * .2f, 0), transform.position + new Vector3(1, rev * hitDist, 0), Color.red); //Debug.Log("headHit: " + headHit.distance); // CROUCH if (Input.GetAxisRaw("Vertical") < 0 || Input.GetKey(KeyCode.LeftShift) || Input.GetMouseButton(1) || headHit.distance > 0) { crouch = true; } else { crouch = false; } // CHANGE JUMP DIRECTION WHEN REVERSED if (reversed) { jumpForce = -posJump; } else { jumpForce = posJump; } // IF DEAD --> RESPAWN if (dead) { dead = false; Respawn(); } prev_grounded = grounded; prev_velocity = Mathf.Abs(player_body.velocity.y); time += Time.deltaTime; if (prev_grounded) { time = 0; } } }