public static MotionTestResult TestMotion( this Collider2D collider, Vector2 motion, float margin = 0f) { var collisionBox = collider.GetCollisionBox(); var raycastHit2d = Physics2D.BoxCast( origin: collisionBox.center, size: collisionBox.size, angle: 0, direction: motion.normalized, distance: motion.magnitude ); if (raycastHit2d) { var collision2d = new ByteBrosCollision2D { Owner = collider, Target = raycastHit2d.collider, Position = raycastHit2d.point, Normal = raycastHit2d.normal, Distance = raycastHit2d.distance }; return(new MotionTestResult { HasCollision = true, Collision = collision2d, Direction = motion.normalized, Distance = raycastHit2d.distance - margin, Remainder = motion.magnitude - raycastHit2d.distance + margin }); } return(new MotionTestResult { HasCollision = false, Collision = null, Direction = motion.normalized, Distance = motion.magnitude, Remainder = 0f }); }
private void OnWallRightCollision(ByteBrosCollision2D collision) { _wallRightContactNormal = collision.Normal.normalized; WallRight.FutureOn = true; }
private void OnGroundCollision(ByteBrosCollision2D collision) { _groundContactNormal += collision.Normal.normalized; Ground.FutureOn = true; }
public void OnCollisionNext(ByteBrosCollision2D collision) { _onCollision.OnNext(collision); }
public static bool IsGroundCollision( this ByteBrosCollision2D collision, float maxAngle) { return(collision.Normal.WithinDegrees(Vector2.up, maxAngle)); }
public static bool IsWallRightCollision( this ByteBrosCollision2D collision, float maxAngle) { return(collision.Normal.WithinDegrees(Vector2.left, maxAngle)); }