private Vector3 DistanceToMove() { var distanceToMove = Speed * Time.deltaTime * (destination - origin); distanceToMove.z = 0; var finalPosition = transform.position + distanceToMove; if (direction.Matches(MovementDirection.NORTH) && finalPosition.y > destination.y) { distanceToMove.y -= finalPosition.y - destination.y; } else if (direction.Matches(MovementDirection.SOUTH) && finalPosition.y < destination.y) { distanceToMove.y += finalPosition.y - destination.y; } if (direction.Matches(MovementDirection.EAST) && finalPosition.x > destination.x) { distanceToMove.x -= finalPosition.x - destination.x; } else if (direction.Matches(MovementDirection.WEST) && finalPosition.x < destination.x) { distanceToMove.x += finalPosition.x - destination.x; } return(distanceToMove); }
public bool Move(MovementDirection direction) { if (isMoving()) { return(false); } var angles = Vector3.zero; this.direction = direction; var angleMultiplier = 1f; if (direction.Matches(MovementDirection.NORTH)) { destination.y += 1f; angles.z = 0; angleMultiplier = 0.5f; } else if (direction.Matches(MovementDirection.SOUTH)) { destination.y += -1f; angles.z = 180; angleMultiplier = 1.5f; } if (direction.Matches(MovementDirection.EAST)) { destination.x += 1f; angles.z = -90 * angleMultiplier; } else if (direction.Matches(MovementDirection.WEST)) { destination.x += -1f; angles.z = 90 * angleMultiplier; } targetEuler = angles; // if (!GridSystem.Instance.AllowsMovement(destination)) { // destination = origin; // this.direction = 0; // return false; // } return(true); }