refactor(runtime): cut graphical host over to canonical root
Make every App composition phase borrow one GameRuntime, retire the duplicate view/event adapters, and dispose the root only after its graphical borrowers release. This preserves synchronous UI commands while giving shutdown one exact ownership ledger. Co-authored-by: OpenAI Codex <codex@openai.com>
This commit is contained in:
parent
ecb9f79444
commit
ce41efb9e5
29 changed files with 613 additions and 778 deletions
|
|
@ -17,6 +17,11 @@ public sealed class RuntimeWorldTransitOwnershipTests
|
|||
"\n",
|
||||
Directory.EnumerateFiles(appRoot, "*.cs", SearchOption.AllDirectories)
|
||||
.Select(File.ReadAllText));
|
||||
string runtimeRoot = Path.Combine(root, "src", "AcDream.Runtime");
|
||||
string runtime = string.Join(
|
||||
"\n",
|
||||
Directory.EnumerateFiles(runtimeRoot, "*.cs", SearchOption.AllDirectories)
|
||||
.Select(File.ReadAllText));
|
||||
|
||||
Assert.False(File.Exists(Path.Combine(
|
||||
appRoot,
|
||||
|
|
@ -38,10 +43,14 @@ public sealed class RuntimeWorldTransitOwnershipTests
|
|||
"record struct WorldRevealLifecycleSnapshot",
|
||||
app,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Single(Regex.Matches(
|
||||
Assert.Empty(Regex.Matches(
|
||||
app,
|
||||
@"new\s+RuntimeWorldTransitState\s*\(")
|
||||
.Cast<Match>());
|
||||
Assert.Single(Regex.Matches(
|
||||
runtime,
|
||||
@"new\s+RuntimeWorldTransitState\s*\(")
|
||||
.Cast<Match>());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -56,19 +65,17 @@ public sealed class RuntimeWorldTransitOwnershipTests
|
|||
typeof(RuntimeWorldTransitState),
|
||||
availabilityFields[0].FieldType);
|
||||
|
||||
var viewFields = typeof(CurrentGameRuntimeViewAdapter)
|
||||
var adapterFields = typeof(CurrentGameRuntimeAdapter)
|
||||
.GetFields(
|
||||
System.Reflection.BindingFlags.Instance
|
||||
| System.Reflection.BindingFlags.NonPublic);
|
||||
Assert.Contains(
|
||||
viewFields,
|
||||
field => field.FieldType == typeof(IRuntimePortalView));
|
||||
adapterFields,
|
||||
field => field.FieldType == typeof(GameRuntime));
|
||||
Assert.DoesNotContain(
|
||||
typeof(CurrentGameRuntimeViewAdapter).GetNestedTypes(
|
||||
System.Reflection.BindingFlags.NonPublic),
|
||||
type => type.Name.Contains(
|
||||
"PortalView",
|
||||
StringComparison.Ordinal));
|
||||
adapterFields,
|
||||
field => field.FieldType == typeof(IRuntimePortalView)
|
||||
|| field.FieldType == typeof(RuntimeWorldTransitState));
|
||||
|
||||
var coordinatorFields = typeof(WorldRevealCoordinator)
|
||||
.GetFields(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue