using System.Collections; using System.Collections.Generic; using UnityEngine; public class TouchingDirections : MonoBehaviour { public ContactFilter2D castFilter; public float groundDistance = 0.01f; public float wallDistance = 0.01f; public float ceilingDistance = 0.05f; //private Vector2 wallCheckDirection => gameObject.transform.localScale.x > 0 ? Vector2.right : Vector2.left; Rigidbody2D rb; public GameObject rotorGO; BoxCollider2D touchingCol; //CapsuleCollider2D touchingCol; Animator animator; Animator animator_rotor; public RaycastHit2D[] groundHits = new RaycastHit2D[5]; public RaycastHit2D[] wallHitsRight = new RaycastHit2D[5]; public RaycastHit2D[] wallHitsLeft = new RaycastHit2D[5]; public RaycastHit2D[] ceilingHits = new RaycastHit2D[5]; [SerializeField] private bool _isGrounded; public bool IsGrounded { get { return _isGrounded; } set { _isGrounded = value; animator.SetBool(AnimationStrings.Player.isGrounded, value); animator_rotor.SetBool(AnimationStrings.Player.isGrounded, value); } } [SerializeField] private bool _isAtWallLeft; public bool IsAtWallLeft { get { return _isAtWallLeft; } set { _isAtWallLeft = value; animator.SetBool(AnimationStrings.Player.isAtWall, value); animator_rotor.SetBool(AnimationStrings.Player.isAtWall, value); } } [SerializeField] private bool _isAtWallRight; public bool IsAtWallRight { get { return _isAtWallRight; } set { _isAtWallRight = value; animator.SetBool(AnimationStrings.Player.isAtWall, value); animator_rotor.SetBool(AnimationStrings.Player.isAtWall, value); } } [SerializeField] private bool _isAtCeiling; public bool IsAtCeiling { get { return _isAtCeiling; } set { _isAtCeiling = value; animator.SetBool(AnimationStrings.Player.isAtCeiling, value); animator_rotor.SetBool(AnimationStrings.Player.isAtCeiling, value); } } public bool IsAtWall { get { return IsAtWallLeft || IsAtWallRight; } } void Awake() { rb = GetComponent(); touchingCol = rb.GetComponent(); //touchingCol = rb.GetComponent(); animator = rb.GetComponent(); animator_rotor = rotorGO.GetComponent(); } // Start is called before the first frame update void Start() { } void FixedUpdate() { //int contactsAmount = touchingCol.GetContacts(contacts); //Debug.Log("contactsAmount: " + contactsAmount); IsGrounded = touchingCol.Cast(Vector2.down, castFilter, groundHits, groundDistance) > 0; IsAtWallLeft = touchingCol.Cast(Vector2.left, castFilter, wallHitsLeft, wallDistance) > 0; IsAtWallRight = touchingCol.Cast(Vector2.right, castFilter, wallHitsRight, wallDistance) > 0; IsAtCeiling = touchingCol.Cast(Vector2.up, castFilter, ceilingHits, ceilingDistance) > 0; } //TODO getTileForDrillHere? }