Build independent base gameplay and source-bound native verification
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
"""Fixture boundaries and actual safe-exit policy; not an engine substitute."""
|
||||
from policy_harness import ROOT, body, run
|
||||
import re
|
||||
source = ROOT/'addons/core/Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c'
|
||||
method = body(source,'static bool SafeExit(')
|
||||
method = re.sub(r'(?<![\w.])(\d+\.\d+)(?![\w.])',r'\1f',method)
|
||||
run('#include <cassert>\n'+method+'''
|
||||
int main() {
|
||||
assert(SafeExit(0,0));
|
||||
assert(SafeExit(1.25,-0.25));
|
||||
assert(SafeExit(1.25,1.5));
|
||||
assert(!SafeExit(1.251,0));
|
||||
assert(!SafeExit(-0.01,0));
|
||||
assert(!SafeExit(1,-0.251));
|
||||
assert(!SafeExit(1,1.501));
|
||||
}
|
||||
''')
|
||||
text=source.read_text()
|
||||
assert text.startswith('#ifdef WORKBENCH')
|
||||
assert 'GetContextIndex("door_l01_door") >= 0' in text
|
||||
assert 'actions.Contains(m_Remove)' in text
|
||||
assert 'PickDoorIndexForPoint(m_Context.GetOrigin())' in text
|
||||
assert 'GetExitTeleportPointInfo()' in text
|
||||
assert 'm_Remove.GetActionDuration() == 1' in text
|
||||
assert 'm_Remove.CanBeShown(m_Caller)' in text and 'm_Remove.CanBePerformed(m_Caller)' in text
|
||||
assert text.count('m_Remove.PerformAction(') == 1
|
||||
assert 'm_Remove.SetCompartmentDoorInfoIndex(m_SavedDoor)' in body(source,'override void Cleanup(')
|
||||
assert 'if (m_RemoveStopped) return -1;' in body(source,'override int Tick(')
|
||||
for forbidden in ('GetOutVehicle(', 'GetOutVehicle_NoDoor(', 'KickFromVehicle(', 'SetUnconscious(', 'm_Casualty.Set', 'm_Casualty).Teleport', 'SetActive('):
|
||||
assert forbidden not in text,forbidden
|
||||
# Existing arbitrary-ground mechanism remains exactly its original contract.
|
||||
base=ROOT/'addons/core/Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c'
|
||||
assert 'GetOutVehicle_NoDoor(exitTransform, true, false)' in body(base,'protected bool BeginExit(')
|
||||
assert 'exitTransform[3] = m_GroundPosition;' in body(base,'protected bool BeginExit(')
|
||||
assert body(base,'protected bool ExitSettled(').strip().endswith('return ERR_Actors.Alive(m_Casualty) && vector.Distance(m_Casualty.GetOrigin(), m_GroundPosition) < 4 && m_Seat.IsCompartmentAccessible();\n }')
|
||||
base_text=(ROOT/'addons/core/Scripts/Game/ERR/ERR_NativeBaseSmoke.c').read_text()
|
||||
assert base_text.count('m_ERRExtractionCase == "casualty-remove"') == 3
|
||||
assert 'm_ERRCasualtyLoadProbe = new ERR_NativeCasualtyRemoveProbe(this);' in base_text
|
||||
assert 'm_ERRBaseStep = 802; Transition(ERR_Phase.DEFEAT);' in base_text
|
||||
runner=(ROOT/'tools/headless_workbench.py').read_text()
|
||||
assert runner.count("'casualty-remove'") == 3
|
||||
compile(runner,'headless_workbench.py','exec')
|
||||
print('PASS: actual safe-exit boundary policy, native action/door selection, stop/cache cleanup, separate old mechanism and opt-in runner contracts')
|
||||
Reference in New Issue
Block a user