| | | 1 | | //======================================================================= |
| | | 2 | | // ColliderPairState.cs |
| | | 3 | | //======================================================================= |
| | | 4 | | // MIT License, Copyright (c) 2026–present David Oravsky (mrdav30) |
| | | 5 | | // See LICENSE file in the project root for full license information. |
| | | 6 | | //======================================================================= |
| | | 7 | | |
| | | 8 | | using SwiftCollections; |
| | | 9 | | using System.Runtime.CompilerServices; |
| | | 10 | | |
| | | 11 | | namespace Gravitas.Colliders; |
| | | 12 | | |
| | | 13 | | internal struct ColliderPairState<TPair> |
| | | 14 | | where TPair : class |
| | | 15 | | { |
| | | 16 | | private SwiftDictionary<int, TPair>? _collisionPairs; |
| | | 17 | | private SwiftHashSet<int>? _collisionPairHolders; |
| | | 18 | | |
| | 1913 | 19 | | public int CollisionPairCount => _collisionPairs?.Count ?? 0; |
| | | 20 | | |
| | 1929 | 21 | | public int CollisionPairHolderCount => _collisionPairHolders?.Count ?? 0; |
| | | 22 | | |
| | 1098 | 23 | | public SwiftDictionary<int, TPair>? CollisionPairs => _collisionPairs; |
| | | 24 | | |
| | 1098 | 25 | | public SwiftHashSet<int>? CollisionPairHolders => _collisionPairHolders; |
| | | 26 | | |
| | | 27 | | [MethodImpl(MethodImplOptions.AggressiveInlining)] |
| | | 28 | | public bool TryGetCollisionPair(int otherId, out TPair? collisionPair) |
| | | 29 | | { |
| | 104114 | 30 | | if (_collisionPairs == null) |
| | | 31 | | { |
| | 18933 | 32 | | collisionPair = null; |
| | 18933 | 33 | | return false; |
| | | 34 | | } |
| | | 35 | | |
| | 85181 | 36 | | return _collisionPairs.TryGetValue(otherId, out collisionPair); |
| | | 37 | | } |
| | | 38 | | |
| | | 39 | | public bool TryAddCollisionPair(int otherId, TPair collisionPair) |
| | | 40 | | { |
| | 520 | 41 | | _collisionPairs ??= new(); |
| | 520 | 42 | | return _collisionPairs.Add(otherId, collisionPair); |
| | | 43 | | } |
| | | 44 | | |
| | | 45 | | public bool TryRemoveCollisionPair(int otherId, out TPair? collisionPair) |
| | | 46 | | { |
| | 117 | 47 | | if (_collisionPairs == null) |
| | | 48 | | { |
| | 4 | 49 | | collisionPair = null; |
| | 4 | 50 | | return false; |
| | | 51 | | } |
| | | 52 | | |
| | 113 | 53 | | if (!_collisionPairs.TryGetValue(otherId, out collisionPair)) |
| | 5 | 54 | | return false; |
| | | 55 | | |
| | 108 | 56 | | _collisionPairs.Remove(otherId); |
| | 108 | 57 | | return true; |
| | | 58 | | } |
| | | 59 | | |
| | | 60 | | [MethodImpl(MethodImplOptions.AggressiveInlining)] |
| | | 61 | | public bool TryAddCollisionPairHolder(int otherId) |
| | | 62 | | { |
| | 518 | 63 | | _collisionPairHolders ??= new(); |
| | 518 | 64 | | return _collisionPairHolders.Add(otherId); |
| | | 65 | | } |
| | | 66 | | |
| | | 67 | | [MethodImpl(MethodImplOptions.AggressiveInlining)] |
| | | 68 | | public bool TryRemoveCollisionPairHolder(int otherId) => |
| | 116 | 69 | | _collisionPairHolders?.Remove(otherId) == true; |
| | | 70 | | |
| | | 71 | | [MethodImpl(MethodImplOptions.AggressiveInlining)] |
| | 1137 | 72 | | public void ClearCollisionPairs() => _collisionPairs?.Clear(); |
| | | 73 | | |
| | | 74 | | [MethodImpl(MethodImplOptions.AggressiveInlining)] |
| | 1137 | 75 | | public void ClearCollisionPairHolders() => _collisionPairHolders?.Clear(); |
| | | 76 | | } |