11 [JsonProperty(
"profiles")]
12 private readonly Dictionary<string, CollisionProfile> _profiles;
19 _profiles =
new Dictionary<string, CollisionProfile>(StringComparer.OrdinalIgnoreCase);
20 EnsureStandardProfiles();
23#pragma warning disable IDE0051
27 _profiles =
new Dictionary<string, CollisionProfile>(
28 profiles ??
new Dictionary<string, CollisionProfile>(),
29 StringComparer.OrdinalIgnoreCase);
31 EnsureStandardProfiles();
34#pragma warning restore IDE0051
46 string collisionGroup,
47 IEnumerable<string>? collidesWith =
null,
48 bool collidesWithAll =
false)
56 _profiles[name] = profile;
67 if (
string.IsNullOrWhiteSpace(name))
68 throw new ArgumentException(
"Collision profile name cannot be empty.", nameof(name));
70 if (!_profiles.TryGetValue(name, out var profile))
71 throw new KeyNotFoundException($
"Collision profile '{name}' is not defined.");
84 if (
string.IsNullOrWhiteSpace(name))
90 return _profiles.TryGetValue(name, out profile);
99 private void EnsureStandardProfiles()
102 CollisionProfileNames.World,
104 [
"Actors",
"Projectiles"]);
107 CollisionProfileNames.Actor,
109 [
"WorldStatic",
"Actors",
"Projectiles",
"Triggers"]);
112 CollisionProfileNames.Projectile,
114 [
"WorldStatic",
"Actors"]);
117 CollisionProfileNames.Sensor,
122 private void DefineIfMissing(
124 string collisionGroup,
125 IEnumerable<string> collidesWith)
127 if (!_profiles.ContainsKey(name))
128 Define(name, collisionGroup, collidesWith);