private void Move() { if (actionsManager.ActionIsAvailable(ActionsManager.Actions.HorizontalMove)) { Climber.ClimbingAction.Direction xDirection = climber.CurrentDirection(); if (yDirection != .0f) { if (moveScript.IsInCliffEdge(xDirection, yDirection)) { if (yDirection > 0) { CliffJump(xDirection); } } else { moveScript.IsMoving = true; moveScript.Call(yDirection); } } else { moveScript.IsMoving = false; } } }
private void CliffJump(Climber.ClimbingAction.Direction xDirection) { if (actionsManager.ActionIsAvailable(ActionsManager.Actions.HorizontalMove)) { Vector2 yVector = jumpDirection[xDirection]; climber.CancelClimbing(); jumpScript.CallStartCatchingCliff(yVector); StartCoroutine(BlockHorizontalMovement()); } }
private float CalculateNewX(Climber.ClimbingAction.Direction xDirection) { if (xDirection == Climber.ClimbingAction.Direction.Left) { return(-1f); } else { return(1f); } }
public bool IsInCliffEdge(Climber.ClimbingAction.Direction xDirection, float yDirection) { bool result = true; Vector2[] vectorsCollectionCliff = VectorsCollectionCliff(xDirection, yDirection); Vector2[] vectorsCollectionTopAndDown = VectorsCollectionTopAndDown(yDirection); if (yDirection != 0) { if (wallDistance.CheckContactWithWall(vectorsCollectionCliff) && !wallDistance.CheckContactWithWall(vectorsCollectionTopAndDown)) { result = false; } } return(result); }
// We need to check if the object is in contact with the cliff private Vector2[] VectorsCollectionCliff(Climber.ClimbingAction.Direction xDirection, float yDirection) { return(new Vector2[1] { new Vector2(CalculateNewX(xDirection), CalculateNewY(yDirection)) }); }