| | |
| | | { |
| | | get |
| | | { |
| | | return animator.GetBool(AnimationStrings.canMove) && !PauseMenu.GameIsPaused; |
| | | return animator.GetBool(AnimationStrings.canMove) && !PauseMenu.GameIsPaused && !IsDrilling; |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | private void FixedUpdate() |
| | | { |
| | | if (moveInput.y == 0) |
| | | if (CanMove) |
| | | { |
| | | if (rb.velocity.y <= maxFallSpeed) |
| | | if (moveInput.y == 0) |
| | | { |
| | | // max fall speed, dont accelerate more |
| | | rb.velocity = new Vector2(moveInput.x * moveSpeed, maxFallSpeed); |
| | | if (rb.velocity.y <= maxFallSpeed) |
| | | { |
| | | // max fall speed, dont accelerate more |
| | | rb.velocity = new Vector2(moveInput.x * moveSpeed, maxFallSpeed); |
| | | } |
| | | else |
| | | { |
| | | // normal fall |
| | | rb.velocity = new Vector2(moveInput.x * moveSpeed, rb.velocity.y); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | // normal fall |
| | | rb.velocity = new Vector2(moveInput.x * moveSpeed, rb.velocity.y); |
| | | if (rb.velocity.y < 0 && moveInput.y > 0) |
| | | { |
| | | // falling but moving upwards |
| | | rb.velocity = new Vector2(moveInput.x * moveSpeed, (moveInput.y * moveSpeed) + rb.velocity.y); |
| | | } |
| | | else |
| | | { |
| | | // moving upwards no falling |
| | | rb.velocity = new Vector2(moveInput.x * moveSpeed, (moveInput.y * moveSpeed)); |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | if (rb.velocity.y < 0 && moveInput.y > 0) |
| | | if (touchingDirections.IsGrounded) |
| | | { |
| | | // falling but moving upwards |
| | | rb.velocity = new Vector2(moveInput.x * moveSpeed, (moveInput.y * moveSpeed) + rb.velocity.y); |
| | | if (maxFallSpeedCurrent < maxFallSpeedDamge) |
| | | { |
| | | TakeFallDamage(Math.Abs((int)maxFallSpeedCurrent)); |
| | | maxFallSpeedCurrent = 0; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | // moving upwards no falling |
| | | rb.velocity = new Vector2(moveInput.x * moveSpeed, (moveInput.y * moveSpeed)); |
| | | } |
| | | } |
| | | if (touchingDirections.IsGrounded) |
| | | { |
| | | if (maxFallSpeedCurrent < maxFallSpeedDamge) |
| | | { |
| | | TakeFallDamage(Math.Abs((int)maxFallSpeedCurrent)); |
| | | maxFallSpeedCurrent = 0; |
| | | } |
| | | } |
| | | else if (IsFlying) |
| | | { |
| | | maxFallSpeedCurrent = rb.velocity.y; |
| | | } |
| | | else |
| | | { |
| | | if (maxFallSpeedCurrent > rb.velocity.y) |
| | | else if (IsFlying) |
| | | { |
| | | maxFallSpeedCurrent = rb.velocity.y; |
| | | } |
| | | } |
| | | if (touchingDirections.IsGrounded && moveInput.y < 0 && !IsDrilling) |
| | | { |
| | | //IsDrilling = true; |
| | | Drill(DrillDirection.Down); |
| | | } |
| | | if (touchingDirections.IsGrounded && touchingDirections.IsAtWall && moveInput.x != 0 && !IsDrilling) |
| | | { |
| | | //IsDrilling = true; |
| | | if (touchingDirections.IsAtWallLeft) |
| | | else |
| | | { |
| | | Drill(DrillDirection.Left); |
| | | if (maxFallSpeedCurrent > rb.velocity.y) |
| | | { |
| | | maxFallSpeedCurrent = rb.velocity.y; |
| | | } |
| | | } |
| | | else if (touchingDirections.IsAtWallRight) |
| | | if (touchingDirections.IsGrounded && moveInput.y < 0 && !IsDrilling) |
| | | { |
| | | Drill(DrillDirection.Right); |
| | | //IsDrilling = true; |
| | | Drill(DrillDirection.Down); |
| | | } |
| | | |
| | | if (touchingDirections.IsGrounded && moveInput.x != 0 && !IsDrilling) |
| | | { |
| | | if (touchingDirections.IsAtWallLeft && moveInput.x < 0) |
| | | { |
| | | Drill(DrillDirection.Left); |
| | | } |
| | | else if (touchingDirections.IsAtWallRight && moveInput.x > 0) |
| | | { |
| | | Drill(DrillDirection.Right); |
| | | } |
| | | } |
| | | } |
| | | if (IsDrilling) |
| | | { |
| | | rb.velocity = Vector2.zero; |
| | | if (timeSinceDrill > drillingTime) |
| | | { |
| | | IsDrilling = false; |
| | |
| | | |
| | | public void OnMove(InputAction.CallbackContext context) |
| | | { |
| | | if (CanMove) |
| | | { |
| | | moveInput = context.ReadValue<Vector2>(); |
| | | moveInput = context.ReadValue<Vector2>(); |
| | | |
| | | IsMoving = moveInput.x != 0; |
| | | IsMoving = moveInput.x != 0; |
| | | |
| | | IsFlying = (moveInput.y != 0); |
| | | IsFlying = (moveInput.y != 0); |
| | | |
| | | SetFacingDirection(moveInput); |
| | | |
| | | } |
| | | else |
| | | SetFacingDirection(moveInput); |
| | | if (IsDrilling) |
| | | { |
| | | IsMoving = false; |
| | | IsFlying = false; |
| | | moveInput = Vector2.zero; |
| | | //moveInput = Vector2.zero; |
| | | |
| | | } |
| | | } |
| | | |
| | |
| | | { |
| | | IsDrilling = true; |
| | | ContactPoint2D[] contactPoints = new ContactPoint2D[1]; |
| | | Debug.Log("drillDirection: " + drillDirection.ToString()); |
| | | //rb.GetContacts(contactPoints); |
| | | if (drillDirection == DrillDirection.Down) |
| | | switch (drillDirection) |
| | | { |
| | | touchingDirections.groundHits[0].collider.GetContacts(contactPoints); |
| | | } else if (drillDirection == DrillDirection.Left || drillDirection == DrillDirection.Right) |
| | | { |
| | | touchingDirections.wallHits[0].collider.GetContacts(contactPoints); |
| | | case DrillDirection.Left: |
| | | touchingDirections.wallHitsLeft[0].collider.GetContacts(contactPoints); |
| | | break; |
| | | case DrillDirection.Right: |
| | | touchingDirections.wallHitsRight[0].collider.GetContacts(contactPoints); |
| | | break; |
| | | case DrillDirection.Down: |
| | | touchingDirections.groundHits[0].collider.GetContacts(contactPoints); |
| | | break; |
| | | } |
| | | CharacterEvents.characterDrill.Invoke(contactPoints[0], drillDirection); |
| | | } |