RaycastData RaycastAtAngle(float angle)
        {
            Vector3    direction = MMMaths.DirectionFromAngle(angle, 0f);
            RaycastHit hit;

            if (Physics.Raycast(Center, direction, out hit, VisionRadius, ObstacleMask))
            {
                return(new RaycastData(true, hit.point, hit.distance, angle));
            }
            else
            {
                return(new RaycastData(false, Center + direction * VisionRadius, VisionRadius, angle));
            }
        }
        protected virtual void OnSceneGUI()
        {
            // draws a circle around the character to represent the cone of vision's radius
            _coneOfVision = (MMConeOfVision)target;

            Handles.color = Color.yellow;
            Handles.DrawWireArc(_coneOfVision.Center, Vector3.up, Vector3.forward, 360f, _coneOfVision.VisionRadius);

            // draws two lines to mark the vision angle
            Vector3 visionAngleLeft  = MMMaths.DirectionFromAngle(-_coneOfVision.VisionAngle / 2f, _coneOfVision.EulerAngles.y);
            Vector3 visionAngleRight = MMMaths.DirectionFromAngle(_coneOfVision.VisionAngle / 2f, _coneOfVision.EulerAngles.y);

            Handles.DrawLine(_coneOfVision.Center, _coneOfVision.Center + visionAngleLeft * _coneOfVision.VisionRadius);
            Handles.DrawLine(_coneOfVision.Center, _coneOfVision.Center + visionAngleRight * _coneOfVision.VisionRadius);

            foreach (Transform visibleTarget in _coneOfVision.VisibleTargets)
            {
                Handles.color = MMColors.Orange;
                Handles.DrawLine(_coneOfVision.Center, visibleTarget.position);
            }
        }
        RaycastData RaycastAtAngle(float angle)
        {
            _direction = MMMaths.DirectionFromAngle(angle, 0f);


            if (Physics.Raycast(Center, _direction, out _raycastAtAngleHit, VisionRadius, ObstacleMask))
            {
                _returnRaycastData.Hit      = true;
                _returnRaycastData.Point    = _raycastAtAngleHit.point;
                _returnRaycastData.Distance = _raycastAtAngleHit.distance;
                _returnRaycastData.Angle    = angle;
            }
            else
            {
                _returnRaycastData.Hit      = false;
                _returnRaycastData.Point    = Center + _direction * VisionRadius;
                _returnRaycastData.Distance = VisionRadius;
                _returnRaycastData.Angle    = angle;
            }

            return(_returnRaycastData);
        }