//Move sequence private IEnumerator StopMove(Vector3 dir, bool CheckBelow = true) { IsMoving = true; float elapsed = 0; Vector3 startPos = transform.position; while (elapsed <= moveDuration) { transform.position = Vector3.Lerp(startPos, startPos + dir, elapsed / moveDuration); elapsed += Time.deltaTime; moveCoolDown += Time.deltaTime; yield return(null); } transform.position = startPos + dir; if (CheckBelow) { if (CheckMoves.CanFall(transform)) { yield return(StopMove(Vector3.down, true)); } } IsMoving = false; }
//Move coroutine private IEnumerator StopMove(Vector3 dir, bool CheckBelow = true) { IsMoving = true; //Debug.Log("RE"); float elapsed = 0; float moveDuration = 0.2f; Vector3 startPos = transform.position; while (elapsed <= moveDuration) { transform.position = Vector3.Lerp(startPos, startPos + dir, elapsed / moveDuration); elapsed += Time.deltaTime; yield return(null); } transform.position = startPos + dir; if (CheckBelow) { if (CheckMoves.CanFall(transform)) { Debug.Log("CANFALL"); yield return(StopMove(Vector3.down)); } } IsMoving = false; }
private void OnTriggerEnter(Collider other) { if (other.CompareTag("Player")) { //Check if movable and can move if (CheckMoves.CanMove(transform, (transform.position - other.transform.position).normalized)) { GameManager.Instance.SaveCubePosition(transform, transform.position); Move(transform.position - other.transform.position); } //Or can be pushed and push else if (Pushable && CheckMoves.CanClimb(transform, (transform.position - other.transform.position).normalized)) { GameManager.Instance.SaveCubePosition(transform, transform.position); PushUp(transform.position - other.transform.position); } } }
//Move a character on cooldown public void MoveChar(SwipeDirection dir) { if (moveCoolDown >= moveDuration) { //Pick direction instruction switch (dir) { case SwipeDirection.Up: { targetDir = Vector3.left; targetRot = new Vector3(0, -90f, 0); break; } case SwipeDirection.Down: { targetDir = Vector3.right; targetRot = new Vector3(0, 90f, 0); break; } case SwipeDirection.Left: { targetDir = Vector3.back; targetRot = new Vector3(0, -180f, 0); break; } case SwipeDirection.Right: { targetDir = Vector3.forward; targetRot = new Vector3(0, 0, 0); break; } case SwipeDirection.None: return; default: break; } //Move depending on switch instructions transform.eulerAngles = targetRot; //If player can Move if (!IsMoving && CheckMoves.CanMove(transform, targetDir, true)) { //Debug.Log("MOVE"); anim.SetTrigger("Move"); moveCoolDown = 0f; GameManager.Instance.SaveCubePosition(transform, transform.position); StartCoroutine(StopMove(targetDir)); } //Or can climb else if (!IsMoving && CheckMoves.CanClimb(transform, targetDir)) { GameManager.Instance.SaveCubePosition(transform, transform.position); StartCoroutine(StopClimb(targetDir)); } } }