Move remote-motion construction, CreateObject vector initialization, final simulation-component retirement, and the combined J5 ownership ledger into Runtime. Delete App compatibility views and moved-state reconstruction while preserving the existing graphical projection and retail update order.
216 lines
7.3 KiB
C#
216 lines
7.3 KiB
C#
using System.Text.RegularExpressions;
|
|
|
|
namespace AcDream.App.Tests.Runtime;
|
|
|
|
public sealed class RuntimePhysicsOwnershipTests
|
|
{
|
|
[Fact]
|
|
public void ProductionAppBorrowsTheRuntimePhysicsWorld()
|
|
{
|
|
string root = FindRepositoryRoot();
|
|
string appRoot = Path.Combine(root, "src", "AcDream.App");
|
|
string gameWindow = File.ReadAllText(Path.Combine(
|
|
appRoot,
|
|
"Rendering",
|
|
"GameWindow.cs"));
|
|
string app = string.Join(
|
|
"\n",
|
|
Directory.EnumerateFiles(appRoot, "*.cs", SearchOption.AllDirectories)
|
|
.Select(File.ReadAllText));
|
|
|
|
Assert.Empty(Regex.Matches(
|
|
app,
|
|
@"new\s+(?:AcDream\.Core\.Physics\.)?PhysicsEngine\s*(?:\(|\{)"));
|
|
Assert.DoesNotContain(
|
|
"PhysicsDataCache.CreateProduction()",
|
|
app,
|
|
StringComparison.Ordinal);
|
|
Assert.Contains(
|
|
"_runtimeEntityObjects.Physics.Engine",
|
|
gameWindow,
|
|
StringComparison.Ordinal);
|
|
Assert.Contains(
|
|
"_runtimeEntityObjects.Physics.DataCache",
|
|
gameWindow,
|
|
StringComparison.Ordinal);
|
|
}
|
|
|
|
[Fact]
|
|
public void AppPhysicsFilesArePresentationAndPreparedAssetAdapters()
|
|
{
|
|
string root = FindRepositoryRoot();
|
|
string appRoot = Path.Combine(root, "src", "AcDream.App");
|
|
string runtimeRoot = Path.Combine(root, "src", "AcDream.Runtime");
|
|
string remoteAdapter = File.ReadAllText(Path.Combine(
|
|
appRoot,
|
|
"Physics",
|
|
"RemotePhysicsUpdater.cs"));
|
|
string ordinaryAdapter = File.ReadAllText(Path.Combine(
|
|
appRoot,
|
|
"Physics",
|
|
"LiveEntityOrdinaryPhysicsUpdater.cs"));
|
|
string liveRuntime = File.ReadAllText(Path.Combine(
|
|
appRoot,
|
|
"World",
|
|
"LiveEntityRuntime.cs"));
|
|
string collisionPublisher = File.ReadAllText(Path.Combine(
|
|
appRoot,
|
|
"Streaming",
|
|
"LandblockPhysicsPublisher.cs"));
|
|
string runtimeRemote = File.ReadAllText(Path.Combine(
|
|
runtimeRoot,
|
|
"Physics",
|
|
"RuntimeRemotePhysicsUpdater.cs"));
|
|
string runtimeOrdinary = File.ReadAllText(Path.Combine(
|
|
runtimeRoot,
|
|
"Physics",
|
|
"RuntimeOrdinaryPhysicsUpdater.cs"));
|
|
string runtimePhysics = File.ReadAllText(Path.Combine(
|
|
runtimeRoot,
|
|
"Physics",
|
|
"RuntimePhysicsState.cs"));
|
|
string app = string.Join(
|
|
"\n",
|
|
Directory.EnumerateFiles(
|
|
appRoot,
|
|
"*.cs",
|
|
SearchOption.AllDirectories)
|
|
.Select(File.ReadAllText));
|
|
|
|
Assert.DoesNotContain(
|
|
"ResolveWithTransition(",
|
|
remoteAdapter,
|
|
StringComparison.Ordinal);
|
|
Assert.DoesNotContain(
|
|
"RetailObjectManagerTail.Run(",
|
|
remoteAdapter,
|
|
StringComparison.Ordinal);
|
|
Assert.Contains(
|
|
"ResolveWithTransition(",
|
|
runtimeRemote,
|
|
StringComparison.Ordinal);
|
|
Assert.Contains(
|
|
"RetailObjectManagerTail.Run(",
|
|
runtimeRemote,
|
|
StringComparison.Ordinal);
|
|
Assert.DoesNotContain(
|
|
"ResolveWithTransition(",
|
|
ordinaryAdapter,
|
|
StringComparison.Ordinal);
|
|
Assert.DoesNotContain(
|
|
"RebucketLiveEntity(",
|
|
ordinaryAdapter,
|
|
StringComparison.Ordinal);
|
|
Assert.Contains(
|
|
"ResolveWithTransition(",
|
|
runtimeOrdinary,
|
|
StringComparison.Ordinal);
|
|
|
|
Assert.Contains(
|
|
"_physics.GetOrCreatePhysicsBody(",
|
|
liveRuntime,
|
|
StringComparison.Ordinal);
|
|
Assert.Contains(
|
|
"_physics.TryGetPhysicsHost(",
|
|
liveRuntime,
|
|
StringComparison.Ordinal);
|
|
Assert.Contains(
|
|
"BeginCollisionAdmission(",
|
|
collisionPublisher,
|
|
StringComparison.Ordinal);
|
|
Assert.Contains(
|
|
"AdmitCollisionAssets(",
|
|
collisionPublisher,
|
|
StringComparison.Ordinal);
|
|
Assert.DoesNotContain(
|
|
".AddLandblock(",
|
|
collisionPublisher,
|
|
StringComparison.Ordinal);
|
|
Assert.DoesNotContain(
|
|
".RemoveLandblock(",
|
|
collisionPublisher,
|
|
StringComparison.Ordinal);
|
|
Assert.Contains(
|
|
"public PhysicsBody GetOrCreatePhysicsBody(",
|
|
runtimePhysics,
|
|
StringComparison.Ordinal);
|
|
Assert.Contains(
|
|
"public bool TryGetPhysicsHost(",
|
|
runtimePhysics,
|
|
StringComparison.Ordinal);
|
|
Assert.Contains(
|
|
"GetOrCreateRemoteMotion(",
|
|
runtimePhysics,
|
|
StringComparison.Ordinal);
|
|
Assert.Contains(
|
|
"_physics.TryCommitAuthoritativeVector(",
|
|
liveRuntime,
|
|
StringComparison.Ordinal);
|
|
Assert.DoesNotContain(
|
|
"TryActivateOrdinaryObject(",
|
|
liveRuntime,
|
|
StringComparison.Ordinal);
|
|
Assert.Contains(
|
|
"_entityObjects.CompleteProjectionRetirement(",
|
|
liveRuntime,
|
|
StringComparison.Ordinal);
|
|
Assert.DoesNotContain(
|
|
"record.RemoteMotionRuntime =",
|
|
liveRuntime,
|
|
StringComparison.Ordinal);
|
|
Assert.DoesNotContain(
|
|
"record.PhysicsBody =",
|
|
liveRuntime,
|
|
StringComparison.Ordinal);
|
|
Assert.DoesNotContain(
|
|
"new RemoteMotion(",
|
|
app,
|
|
StringComparison.Ordinal);
|
|
Assert.DoesNotContain(
|
|
"LiveEntityRemoteMotionRuntimeView",
|
|
app,
|
|
StringComparison.Ordinal);
|
|
Assert.DoesNotContain(
|
|
"ILiveEntityRemoteMotionRuntime",
|
|
app,
|
|
StringComparison.Ordinal);
|
|
Assert.DoesNotContain(
|
|
"ILiveEntityRemotePlacementRuntime",
|
|
app,
|
|
StringComparison.Ordinal);
|
|
Assert.DoesNotContain(
|
|
"LocalPlayerControllerSlot",
|
|
app,
|
|
StringComparison.Ordinal);
|
|
Assert.DoesNotContain(
|
|
"ILocalPlayerControllerSource",
|
|
app,
|
|
StringComparison.Ordinal);
|
|
Assert.False(File.Exists(Path.Combine(
|
|
appRoot,
|
|
"Physics",
|
|
"RemotePhysicsBodyInitializer.cs")));
|
|
Assert.False(typeof(AcDream.App.World.LiveEntityRecord)
|
|
.GetProperty(nameof(AcDream.App.World.LiveEntityRecord.PhysicsBody))!
|
|
.CanWrite);
|
|
Assert.False(typeof(AcDream.App.World.LiveEntityRecord)
|
|
.GetProperty(nameof(AcDream.App.World.LiveEntityRecord.RemoteMotionRuntime))!
|
|
.CanWrite);
|
|
Assert.False(typeof(AcDream.App.World.LiveEntityRecord)
|
|
.GetProperty(nameof(AcDream.App.World.LiveEntityRecord.PhysicsHost))!
|
|
.CanWrite);
|
|
}
|
|
|
|
private static string FindRepositoryRoot()
|
|
{
|
|
var current = new DirectoryInfo(AppContext.BaseDirectory);
|
|
while (current is not null)
|
|
{
|
|
if (File.Exists(Path.Combine(current.FullName, "AcDream.slnx")))
|
|
return current.FullName;
|
|
current = current.Parent;
|
|
}
|
|
|
|
throw new DirectoryNotFoundException("AcDream.slnx was not found.");
|
|
}
|
|
}
|