feat(runtime): own SetPosition collision reports

This commit is contained in:
Erik 2026-08-01 00:15:11 +02:00
parent ec627c13a2
commit 237d1184d2
19 changed files with 3744 additions and 103 deletions

View file

@ -63,6 +63,73 @@ public sealed class RuntimePhysicsOwnershipTests
StringComparison.Ordinal);
}
[Fact]
public void GraphicalAndHeadlessHostsBorrowOneRuntimeCollisionAuthority()
{
string root = FindRepositoryRoot();
string appRoot = Path.Combine(root, "src", "AcDream.App");
string headlessRoot = Path.Combine(root, "src", "AcDream.Headless");
string gameWindow = File.ReadAllText(Path.Combine(
appRoot,
"Rendering",
"GameWindow.cs"));
string headlessProjection = File.ReadAllText(Path.Combine(
headlessRoot,
"Hosting",
"HeadlessSessionWorldProjection.cs"));
string productionHosts = string.Join(
"\n",
Directory.EnumerateFiles(
appRoot,
"*.cs",
SearchOption.AllDirectories)
.Concat(Directory.EnumerateFiles(
headlessRoot,
"*.cs",
SearchOption.AllDirectories))
.Select(File.ReadAllText));
Assert.Contains(
"private RuntimeEntityObjectLifetime _runtimeEntityObjects =>",
gameWindow,
StringComparison.Ordinal);
Assert.Contains(
"_runtime.EntityObjects;",
gameWindow,
StringComparison.Ordinal);
Assert.Contains(
"_runtimeEntityObjects.Physics",
gameWindow,
StringComparison.Ordinal);
Assert.Contains(
"private readonly GameRuntime _runtime;",
headlessProjection,
StringComparison.Ordinal);
Assert.Contains(
"_runtime.EntityObjects.Physics",
headlessProjection,
StringComparison.Ordinal);
// Hosts may project reports later, but they must never own a second
// collision table or reproduce Runtime's return/error heuristic.
Assert.DoesNotContain(
"new RuntimeCollisionReportingState",
productionHosts,
StringComparison.Ordinal);
Assert.DoesNotContain(
"class RuntimeCollisionReportingState",
productionHosts,
StringComparison.Ordinal);
Assert.DoesNotContain(
"HandleSetPositionCollisions(",
productionHosts,
StringComparison.Ordinal);
Assert.DoesNotContain(
"CollidingWithEnvironment",
productionHosts,
StringComparison.Ordinal);
}
[Fact]
public void AppPhysicsFilesArePresentationAndPreparedAssetAdapters()
{

File diff suppressed because it is too large Load diff