feat(headless): hydrate isolated collision worlds

This commit is contained in:
Erik 2026-07-27 09:25:58 +02:00
parent 9569dadb57
commit b6547ff38c
20 changed files with 1960 additions and 101 deletions

View file

@ -1,4 +1,6 @@
using System.Reflection;
using System.Collections.Immutable;
using System.Runtime.InteropServices;
using AcDream.Content;
using AcDream.Headless.Configuration;
using AcDream.Headless.Hosting;
@ -114,6 +116,9 @@ public sealed class HeadlessProcessContentOwnerTests
IPreparedCollisionSource sharedCollision =
Assert.IsAssignableFrom<IPreparedCollisionSource>(
host.Sessions[0].Content?.PreparedCollision);
float[] sharedHeightTable = Assert.IsType<float[]>(
ImmutableCollectionsMarshal.AsArray(
host.Sessions[0].Content!.HeightTable));
Assert.All(
host.Sessions,
session =>
@ -130,6 +135,10 @@ public sealed class HeadlessProcessContentOwnerTests
Assert.Same(
sharedCollision,
session.Content?.PreparedCollision);
Assert.Same(
sharedHeightTable,
ImmutableCollectionsMarshal.AsArray(
session.Content!.HeightTable));
});
Assert.Equal(
sessionCount,
@ -151,6 +160,13 @@ public sealed class HeadlessProcessContentOwnerTests
session.Runtime.EntityObjects.Physics.DataCache)
.Distinct(ReferenceEqualityComparer.Instance)
.Count());
Assert.Equal(
sessionCount,
host.Sessions
.Select(static session =>
session.Runtime.MovementOwner)
.Distinct(ReferenceEqualityComparer.Instance)
.Count());
HeadlessSessionHost[] sessions = host.Sessions.ToArray();
host.Dispose();
@ -223,7 +239,8 @@ public sealed class HeadlessProcessContentOwnerTests
return new HeadlessOpenedProcessContent(
DatsResource,
PreparedResource,
MagicCatalog.Empty);
MagicCatalog.Empty,
ImmutableArray.CreateRange(new float[256]));
}
}
}