Files
OpenMaidEngine/engine/Age.Engine/Vm/InputBindingBootstrap.cs
2026-07-21 10:32:37 -04:00

39 lines
1.5 KiB
C#

using Age.Engine.Model;
namespace Age.Engine.Vm;
/// <summary>
/// Replays SYSTEM4's data-only input configuration for a direct-scene diagnostic harness which starts
/// after the persistent system root. Natural boot executes the same opcode handlers normally.
/// </summary>
public static class InputBindingBootstrap
{
public static int Apply(Script systemScript, InputBindings bindings)
{
ArgumentNullException.ThrowIfNull(systemScript);
ArgumentNullException.ThrowIfNull(bindings);
int applied = 0;
foreach (Instruction instruction in systemScript.Instructions)
{
if (instruction.Args.Any(arg => arg.Type != 0)) continue;
long A(int index) => instruction.Args[index].Value;
switch (instruction.Opcode)
{
case 0xfe when instruction.Args.Count == 1:
if (bindings.SetActionCount((int)A(0))) applied++;
break;
case 0x107 when instruction.Args.Count == 2:
bindings.MapJoystickButton((int)A(0), (int)A(1)); applied++;
break;
case 0x10b when instruction.Args.Count == 2:
bindings.MapMouseButton((int)A(0), (int)A(1)); applied++;
break;
case 0x10c when instruction.Args.Count == 2:
if (bindings.MapKeyboardScanCode((int)A(0), (int)A(1))) applied++;
break;
}
}
return applied;
}
}