/// <summary> /// Default cover settings. /// </summary> public static CoverSettings Default() { var settings = new CoverSettings(); settings.CanUseCorners = true; settings.TallThreshold = 1.1f; settings.LowCapsuleHeight = 0.75f; settings.RotationSpeed = 20.0f; settings.EnterDistance = 0.15f; settings.LeaveDistance = 0.25f; settings.PivotSideMargin = 0.5f; settings.CornerAimTriggerDistance = 0.6f; settings.TallSideEnterRadius = 0.15f; settings.TallSideLeaveRadius = 0.05f; settings.TallCornerOffset = 0.25f; settings.LowSideEnterRadius = 0.3f; settings.LowSideLeaveRadius = 0.2f; settings.LowCornerOffset = 0.4f; settings.DirectionChangeDelay = 0.25f; settings.BackDelay = 0.5f; settings.CornerOffset = new Vector3(1, 0, 0); settings.Update = CoverUpdateSettings.Default(); settings.Angles = CoverAngleSettings.Default(); return(settings); }
/// <summary> /// Updates cover search. /// </summary> public void Update(CoverState current, Vector3 position, Vector3 head, float takeRadius, float crouchRadius, float climbRadius, float capsuleRadius, CoverSettings settings) { _current = current; _position = position; _head = head; _capsuleRadius = capsuleRadius; _settings = settings; _takeRadius = takeRadius; _crouchRadius = crouchRadius; _climbRadius = climbRadius; var searchRadius = takeRadius > crouchRadius ? takeRadius : crouchRadius; searchRadius = searchRadius > climbRadius ? searchRadius : climbRadius; var colliderCount = Physics.OverlapSphereNonAlloc(position, searchRadius, Util.Colliders, Layers.Cover); _coverCount = 0; for (int i = 0; i < colliderCount; i++) { var cover = GetCover(Util.Colliders[i].gameObject); if (cover != null) { _covers[_coverCount++] = cover; if (_coverCount == _covers.Length) { break; } } } }
/// <summary> /// Default cover settings. /// </summary> public static CoverSettings Default() { var settings = new CoverSettings(); settings.CanUseTallCorners = true; settings.CanUseLowCorners = false; settings.ExitBack = 120; settings.LowCapsuleHeight = 0.75f; settings.LowAimCapsuleHeight = 1.25f; settings.LowRotationSpeed = 10.0f; settings.TallRotationSpeed = 15.0f; settings.EnterDistance = 0.15f; settings.LeaveDistance = 0.25f; settings.ClimbDistance = 0.5f; settings.MinCrouchDistance = 0.2f; settings.MaxCrouchDistance = 1.5f; settings.PivotSideMargin = 0.5f; settings.CornerAimTriggerDistance = 0.6f; settings.TallSideEnterRadius = 0.15f; settings.TallSideLeaveRadius = 0.05f; settings.LeftTallCornerOffset = 0.2f; settings.RightTallCornerOffset = 0.2f; settings.LeftLowCornerOffset = 0.4f; settings.RightLowCornerOffset = 0.4f; settings.LowSideEnterRadius = 0.3f; settings.LowSideLeaveRadius = 0.2f; settings.DirectionChangeDelay = 0.25f; settings.CornerOffset = new Vector3(0.8f, 0, 0); settings.Update = CoverUpdateSettings.Default(); return(settings); }
/// <summary> /// Updates cover search. /// </summary> public void Update(CoverState current, Vector3 position, Vector3 head, float searchRadius, float capsuleRadius, CoverSettings settings) { _current = current; _colliderCount = Physics.OverlapSphereNonAlloc(position, searchRadius, _colliders); _position = position; _head = head; _radius = capsuleRadius; _settings = settings; for (int i = 0; i < _colliderCount; i++) { _covers[i] = GetCover(_colliders[i].gameObject); } }