Build input settings surfaces directly
This commit is contained in:
parent
e45c86026b
commit
70827d03b0
3 changed files with 41 additions and 32 deletions
|
|
@ -4228,7 +4228,6 @@ static void RequireRuntimeInputScreenUsesEveSurface(string root)
|
|||
"action.ApplyBindingOverride",
|
||||
"new InputAction(\"Aetheria Input Capture\")",
|
||||
"AetheriaRuntimeInputSettingsSurfaceBuilder.IsSupportedCapturePath(",
|
||||
"AetheriaRuntimeInputSettingsSurfaceBuilder.Project(",
|
||||
"new AetheriaRuntimeObservedInputBinding(",
|
||||
"HideLegacyChildren()"
|
||||
};
|
||||
|
|
@ -4278,6 +4277,8 @@ static void RequireRuntimeInputScreenUsesEveSurface(string root)
|
|||
"request.Payload",
|
||||
"private static readonly string[] DefaultActionBarCandidatePaths",
|
||||
"private static bool IsSupportedCapturePath(string path)",
|
||||
"ProjectSurfaceState(",
|
||||
"AetheriaRuntimeInputSettingsSurfaceBuilder.Project(",
|
||||
"new AetheriaRuntimeInputSettingsSurfaceState(",
|
||||
"new AetheriaRuntimeInputBindingSurfaceState(",
|
||||
"new AetheriaRuntimeActionBarInputSurfaceState(",
|
||||
|
|
@ -4319,10 +4320,11 @@ static void RequireRuntimeInputScreenUsesEveSurface(string root)
|
|||
"public static readonly IReadOnlyList<string> DefaultActionBarCandidatePaths",
|
||||
"public static readonly IReadOnlyList<AetheriaRuntimeInputPathSurfaceLabel> DefaultActionBarCandidateInputPaths",
|
||||
"public static bool IsSupportedCapturePath(string path)",
|
||||
"public static AetheriaRuntimeInputSettingsSurfaceState Project(",
|
||||
"public static IReadOnlyList<AetheriaRuntimeInputBindingSurfaceState> ProjectBindingInputs(",
|
||||
"public static IReadOnlyList<AetheriaRuntimeInputPathSurfaceLabel> ProjectActionBarCandidates(",
|
||||
"public static IReadOnlyList<AetheriaRuntimeActionBarInputSurfaceState> ProjectActionBarInputs(",
|
||||
"public static AetheriaRuntimeSurfaceDocument Build(",
|
||||
"private static AetheriaRuntimeInputSettingsSurfaceState ComposeState(",
|
||||
"private static IReadOnlyList<AetheriaRuntimeInputBindingSurfaceState> ComposeBindingInputs(",
|
||||
"private static IReadOnlyList<AetheriaRuntimeInputPathSurfaceLabel> ComposeActionBarCandidates(",
|
||||
"private static IReadOnlyList<AetheriaRuntimeActionBarInputSurfaceState> ComposeActionBarInputs(",
|
||||
"new SortedDictionary<string, string>(StringComparer.Ordinal)",
|
||||
"public enum AetheriaRuntimeInputSettingsCommandKind",
|
||||
"public readonly struct AetheriaRuntimeInputSettingsSurfaceCommand",
|
||||
|
|
@ -4348,6 +4350,15 @@ static void RequireRuntimeInputScreenUsesEveSurface(string root)
|
|||
string.Join(", ", missingBuilderSymbols));
|
||||
}
|
||||
|
||||
if (builder.Contains("public static AetheriaRuntimeInputSettingsSurfaceState Project(", StringComparison.Ordinal) ||
|
||||
builder.Contains("public static IReadOnlyList<AetheriaRuntimeInputBindingSurfaceState> ProjectBindingInputs(", StringComparison.Ordinal) ||
|
||||
builder.Contains("public static IReadOnlyList<AetheriaRuntimeInputPathSurfaceLabel> ProjectActionBarCandidates(", StringComparison.Ordinal) ||
|
||||
builder.Contains("public static IReadOnlyList<AetheriaRuntimeActionBarInputSurfaceState> ProjectActionBarInputs(", StringComparison.Ordinal))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"Input-settings surface composition must stay behind Build(...); do not re-expose projection helpers as the public ergonomic path.");
|
||||
}
|
||||
|
||||
var actionGameManagerPath = Path.Combine(root, "Assets", "Scripts", "Gameplay", "ActionGameManager.cs");
|
||||
var actionGameManager = File.Exists(actionGameManagerPath)
|
||||
? File.ReadAllText(actionGameManagerPath)
|
||||
|
|
|
|||
|
|
@ -156,7 +156,13 @@ public class InputDisplayLayout : MonoBehaviour
|
|||
EnsureInputAsset();
|
||||
EnsureCaptureAction();
|
||||
|
||||
var document = AetheriaRuntimeInputSettingsSurfaceBuilder.Build(ProjectSurfaceState());
|
||||
var runtimeSettings = ResolvePlayerSettings();
|
||||
var document = AetheriaRuntimeInputSettingsSurfaceBuilder.Build(
|
||||
ProjectObservedBindings(),
|
||||
runtimeSettings?.ActionBarInputs ?? Array.Empty<string>(),
|
||||
capturePending: _captureBindingIndex >= 0 && !string.IsNullOrWhiteSpace(_captureActionName),
|
||||
capturePrompt: BuildCapturePrompt(),
|
||||
updatedAtUtc: DateTime.UtcNow.ToString("O"));
|
||||
|
||||
_surfaceDocument = AetheriaEveUnitySurfaceHost.RenderRuntime(
|
||||
transform,
|
||||
|
|
@ -167,17 +173,6 @@ public class InputDisplayLayout : MonoBehaviour
|
|||
_surfaceChrome);
|
||||
}
|
||||
|
||||
private AetheriaRuntimeInputSettingsSurfaceState ProjectSurfaceState()
|
||||
{
|
||||
var runtimeSettings = ResolvePlayerSettings();
|
||||
return AetheriaRuntimeInputSettingsSurfaceBuilder.Project(
|
||||
ProjectObservedBindings(),
|
||||
runtimeSettings?.ActionBarInputs ?? Array.Empty<string>(),
|
||||
capturePending: _captureBindingIndex >= 0 && !string.IsNullOrWhiteSpace(_captureActionName),
|
||||
capturePrompt: BuildCapturePrompt(),
|
||||
updatedAtUtc: DateTime.UtcNow.ToString("O"));
|
||||
}
|
||||
|
||||
private IReadOnlyList<AetheriaRuntimeObservedInputBinding> ProjectObservedBindings()
|
||||
{
|
||||
if (Input == null)
|
||||
|
|
|
|||
|
|
@ -151,27 +151,30 @@ namespace GameCult.Aetheria.State.Verse
|
|||
path.StartsWith("<Mouse>/", StringComparison.Ordinal));
|
||||
}
|
||||
|
||||
public static AetheriaRuntimeInputSettingsSurfaceState Project(
|
||||
public static AetheriaRuntimeSurfaceDocument Build(
|
||||
IEnumerable<AetheriaRuntimeObservedInputBinding> observedBindings,
|
||||
IEnumerable<string> enabledActionBarInputPaths,
|
||||
bool capturePending,
|
||||
string capturePrompt,
|
||||
string updatedAtUtc)
|
||||
string updatedAtUtc,
|
||||
long version = 1)
|
||||
{
|
||||
var observed = (observedBindings ?? Array.Empty<AetheriaRuntimeObservedInputBinding>())
|
||||
.Where(binding => binding != null)
|
||||
.ToArray();
|
||||
|
||||
return Project(
|
||||
observed,
|
||||
enabledActionBarInputPaths,
|
||||
ProjectActionBarCandidates(observed, enabledActionBarInputPaths),
|
||||
capturePending,
|
||||
capturePrompt,
|
||||
updatedAtUtc);
|
||||
return Build(
|
||||
ComposeState(
|
||||
observed,
|
||||
enabledActionBarInputPaths,
|
||||
ComposeActionBarCandidates(observed, enabledActionBarInputPaths),
|
||||
capturePending,
|
||||
capturePrompt,
|
||||
updatedAtUtc),
|
||||
version);
|
||||
}
|
||||
|
||||
public static AetheriaRuntimeInputSettingsSurfaceState Project(
|
||||
private static AetheriaRuntimeInputSettingsSurfaceState ComposeState(
|
||||
IEnumerable<AetheriaRuntimeObservedInputBinding> observedBindings,
|
||||
IEnumerable<string> enabledActionBarInputPaths,
|
||||
IEnumerable<AetheriaRuntimeInputPathSurfaceLabel> actionBarCandidateInputPaths,
|
||||
|
|
@ -180,14 +183,14 @@ namespace GameCult.Aetheria.State.Verse
|
|||
string updatedAtUtc)
|
||||
{
|
||||
return new AetheriaRuntimeInputSettingsSurfaceState(
|
||||
ProjectBindingInputs(observedBindings),
|
||||
ProjectActionBarInputs(enabledActionBarInputPaths, actionBarCandidateInputPaths),
|
||||
ComposeBindingInputs(observedBindings),
|
||||
ComposeActionBarInputs(enabledActionBarInputPaths, actionBarCandidateInputPaths),
|
||||
capturePending,
|
||||
capturePrompt,
|
||||
updatedAtUtc);
|
||||
}
|
||||
|
||||
public static IReadOnlyList<AetheriaRuntimeInputBindingSurfaceState> ProjectBindingInputs(
|
||||
private static IReadOnlyList<AetheriaRuntimeInputBindingSurfaceState> ComposeBindingInputs(
|
||||
IEnumerable<AetheriaRuntimeObservedInputBinding> observedBindings)
|
||||
{
|
||||
return (observedBindings ?? Array.Empty<AetheriaRuntimeObservedInputBinding>())
|
||||
|
|
@ -206,7 +209,7 @@ namespace GameCult.Aetheria.State.Verse
|
|||
.ToArray();
|
||||
}
|
||||
|
||||
public static IReadOnlyList<AetheriaRuntimeInputPathSurfaceLabel> ProjectActionBarCandidates(
|
||||
private static IReadOnlyList<AetheriaRuntimeInputPathSurfaceLabel> ComposeActionBarCandidates(
|
||||
IEnumerable<AetheriaRuntimeObservedInputBinding> observedBindings,
|
||||
IEnumerable<string> enabledInputPaths)
|
||||
{
|
||||
|
|
@ -241,7 +244,7 @@ namespace GameCult.Aetheria.State.Verse
|
|||
return candidates;
|
||||
}
|
||||
|
||||
public static IReadOnlyList<AetheriaRuntimeActionBarInputSurfaceState> ProjectActionBarInputs(
|
||||
private static IReadOnlyList<AetheriaRuntimeActionBarInputSurfaceState> ComposeActionBarInputs(
|
||||
IEnumerable<string> enabledInputPaths,
|
||||
IEnumerable<AetheriaRuntimeInputPathSurfaceLabel> candidateInputPaths)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue