Advertisement
GoodNoodle

MoveableObject

May 23rd, 2024
591
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.46 KB | None | 0 0
  1. public class MovableObject : MonoBehaviour
  2. {
  3.     public float speed;
  4.  
  5.     public bool IsMoving;
  6.  
  7.     public bool canSlid = false;
  8.  
  9.     public IEnumerator Move(Vector2 moveVec)
  10.     {
  11.         if (canSlid)
  12.         {
  13.             var targetPos = CheckLocation(moveVec, transform.position);
  14.             IsMoving = true;
  15.  
  16.             while ((targetPos).sqrMagnitude > Mathf.Epsilon)
  17.             {
  18.                 transform.position = Vector3.MoveTowards(transform.position, targetPos, speed * Time.deltaTime);
  19.                 yield return null;
  20.  
  21.             }
  22.             transform.position = targetPos;
  23.  
  24.            
  25.             IsMoving = false;
  26.                    
  27.         }
  28.     }
  29.     public Vector2 CheckLocation(Vector2 moveVec, Vector2 currentPos)
  30.     {
  31.         //currentPos += moveVec;
  32.         var testPos = currentPos + moveVec;
  33.         if(IsPathClear(testPos))
  34.         {
  35.             testPos = CheckLocation(moveVec, testPos);
  36.             return testPos;
  37.         }
  38.         return currentPos;
  39.     }
  40.  
  41.     private bool IsPathClear(Vector3 targetPos)
  42.     {
  43.         var diff = targetPos - transform.position;
  44.         var dir = diff.normalized;
  45.  
  46.         var collisionLayer = GameLayers.I.SolidLayer | GameLayers.I.InteractableLayer | GameLayers.I.PlayerLayer;
  47.  
  48.         if (Physics2D.BoxCast(transform.position + dir, new Vector2(0.2f, 0.2f), 0f, dir, diff.magnitude - 1, collisionLayer) == true)
  49.             return false;
  50.  
  51.         return true;
  52.     }
  53.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement