public void OnCollide(BodyPart part, Collision2D collided, Vector3 point) { var collidedTag = collided.transform.tag; if (collidedTag == "CameraBounds") { // Switching rooms var bounds = collided.transform.GetComponent <BoxCollider2D>().bounds; SamuraiCamera.SetRoomBounds(bounds); } if (collidedTag == "Map") { if (part == BodyPart.FEET) { Debug.Log("LAND"); // Landing states.Remove(PlayerState.FAST_FALLING); states.Remove(PlayerState.FALLING); states.Remove(PlayerState.JUMPING); states.Add(PlayerState.ONGROUND); velocity.y = 0; if (!states.Has(PlayerState.MOVING_LEFT) && !states.Has(PlayerState.MOVING_RIGHT)) { animation.Play("s_land"); } else { TransformUtils.FaceRight(this, states.Has(PlayerState.MOVING_RIGHT)); animation.Play("s_run"); } transform.position = new Vector2(transform.position.x, point.y + landYAdjust); EffectManager.Play(landSmokeEffect); } else if (part == BodyPart.HEAD) { velocity.y = 0; states.Add(PlayerState.FALLING); states.Remove(PlayerState.JUMPING); } } }
public void UpdateAnimations() { if (!states.BeenModified()) { return; } // Jumping animation if (states.WasAdded(PlayerState.JUMPING)) { animation.Play("s_jump"); EffectManager.Play(jumpSmokeEffect); return; } // Falling if (states.WasAdded(PlayerState.FALLING) && !states.Has(PlayerState.ATTACKING)) { // Falling Roll animation.speed = 2 - (currentJumpSize * 100 / maxJumpHeight) / 100; if (states.Has(PlayerState.MOVING_RIGHT)) { if (facingRight) { animation.Play("s_roll_r"); } else { animation.Play("s_roll_l"); } } else if (states.Has(PlayerState.MOVING_LEFT)) { if (facingRight) { animation.Play("s_roll_l"); } else { animation.Play("s_roll_r"); } } else { animation.Play("s_fall"); } } // Always revert animation speed changes when you hit the ground if (states.WasAdded(PlayerState.ONGROUND)) { animation.speed = 1; } // Attacking animation if (states.WasAdded(PlayerState.ATTACKING)) { var timeUntilLastAttack = Time.time - lastFirstAttack; var clipName = "s_sword"; if (animation.GetCurrentAnimatorClipInfo(0)[0].clip.name == clipName || timeUntilLastAttack < 1) { clipName = "s_sword_2"; lastFirstAttack = 0; } else { lastFirstAttack = Time.time; } animation.Play(clipName); StartCoroutine(FinishAttack()); } // Running animation if (states.Has(PlayerState.ONGROUND)) { // Dashing if (states.WasAdded(PlayerState.DASHING)) { animation.Play("s_dash"); dashEffect.flip = !facingRight; EffectManager.Play(dashEffect); EffectManager.Play(landSmokeEffect); return; } bool startedToMove = states.WasAdded(PlayerState.MOVING_LEFT) || states.WasAdded(PlayerState.MOVING_RIGHT); bool stoppedMove = states.WasRemoved(PlayerState.MOVING_LEFT) || states.WasRemoved(PlayerState.MOVING_RIGHT); bool isMoving = states.Has(PlayerState.MOVING_RIGHT) || states.Has(PlayerState.MOVING_LEFT); // Halting Movement if (stoppedMove && !isMoving) { animation.Play("s_idl"); return; } // Starting movement if (!states.Has(PlayerState.ATTACKING) && startedToMove || states.WasAdded(PlayerState.ONGROUND)) { if (states.Has(PlayerState.MOVING_RIGHT)) { TransformUtils.FaceRight(this, true); animation.Play("s_run"); } else if (states.Has(PlayerState.MOVING_LEFT)) { TransformUtils.FaceRight(this, false); animation.Play("s_run"); } } } }