Gondwana Game Engine Development (master) - 2.6.1
Gondwana is a cross-platform 2.5D game and rendering engine written in C#/.NET 8. It provides fine-grained control over rendering, timing, and scene composition, with built-in support for parallax, z-ordering, pixel overhang, collision detection, and particle effects. Gondwana targets desktop and web platforms using SkiaSharp for graphics and pluggable audio backends for desktop and browser targets.
Loading...
Searching...
No Matches
CollisionProfileRegistry.cs
1using Newtonsoft.Json;
2
4
9public sealed class CollisionProfileRegistry
10{
11 [JsonProperty("profiles")]
12 private readonly Dictionary<string, CollisionProfile> _profiles;
13
18 {
19 _profiles = new Dictionary<string, CollisionProfile>(StringComparer.OrdinalIgnoreCase);
20 EnsureStandardProfiles();
21 }
22
23#pragma warning disable IDE0051 // Used by Newtonsoft.Json via reflection.
24 [JsonConstructor]
25 private CollisionProfileRegistry(Dictionary<string, CollisionProfile>? profiles)
26 {
27 _profiles = new Dictionary<string, CollisionProfile>(
28 profiles ?? new Dictionary<string, CollisionProfile>(),
29 StringComparer.OrdinalIgnoreCase);
30
31 EnsureStandardProfiles();
32 }
33
34#pragma warning restore IDE0051
35
45 string name,
46 string collisionGroup,
47 IEnumerable<string>? collidesWith = null,
48 bool collidesWithAll = false)
49 {
50 var profile = new CollisionProfile(
51 name,
52 collisionGroup,
53 collidesWith,
54 collidesWithAll);
55
56 _profiles[name] = profile;
57 return profile;
58 }
59
65 public CollisionProfile Get(string name)
66 {
67 if (string.IsNullOrWhiteSpace(name))
68 throw new ArgumentException("Collision profile name cannot be empty.", nameof(name));
69
70 if (!_profiles.TryGetValue(name, out var profile))
71 throw new KeyNotFoundException($"Collision profile '{name}' is not defined.");
72
73 return profile;
74 }
75
82 public bool TryGet(string name, out CollisionProfile? profile)
83 {
84 if (string.IsNullOrWhiteSpace(name))
85 {
86 profile = null;
87 return false;
88 }
89
90 return _profiles.TryGetValue(name, out profile);
91 }
92
97 public IReadOnlyCollection<string> GetProfileNames() => _profiles.Keys.ToArray();
98
99 private void EnsureStandardProfiles()
100 {
101 DefineIfMissing(
102 CollisionProfileNames.World,
103 "WorldStatic",
104 ["Actors", "Projectiles"]);
105
106 DefineIfMissing(
107 CollisionProfileNames.Actor,
108 "Actors",
109 ["WorldStatic", "Actors", "Projectiles", "Triggers"]);
110
111 DefineIfMissing(
112 CollisionProfileNames.Projectile,
113 "Projectiles",
114 ["WorldStatic", "Actors"]);
115
116 DefineIfMissing(
117 CollisionProfileNames.Sensor,
118 "Triggers",
119 ["Actors"]);
120 }
121
122 private void DefineIfMissing(
123 string name,
124 string collisionGroup,
125 IEnumerable<string> collidesWith)
126 {
127 if (!_profiles.ContainsKey(name))
128 Define(name, collisionGroup, collidesWith);
129 }
130}
bool TryGet(string name, out CollisionProfile? profile)
Attempts to get a previously defined profile.
CollisionProfile Get(string name)
Gets a previously defined profile.
IReadOnlyCollection< string > GetProfileNames()
Gets the names of all defined profiles.
CollisionProfile Define(string name, string collisionGroup, IEnumerable< string >? collidesWith=null, bool collidesWithAll=false)
Defines or replaces a named profile.
CollisionProfileRegistry()
Initializes a registry with Gondwana's standard collision profiles.
Describes a reusable, scene-level collision-filtering role using collision group names rather than sc...