Files
EscapistsReintroduced/tests/test_observer_head_visibility.py
T
jakub 6a667d8deb Capture current mission, AI, map and administration development
Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
2026-10-13 22:52:53 +02:00

29 lines
2.5 KiB
Python

"""Production local head-fade ownership and restoration using native doubles."""
from policy_harness import ROOT,body,run
p=ROOT/'addons/core/Scripts/Game/ERR/00_Core/ERR_ObserverPlayerView.c'
s='\n'.join(body(p,k) for k in ['void Update(IEntity target', 'void Restore()'])
s=s.replace('null','nullptr').replace('SCR_ChimeraCharacter.Cast','SCR_ChimeraCharacter::Cast').replace('SCR_CharacterCameraHandlerComponent.Cast','SCR_CharacterCameraHandlerComponent::Cast').replace('m_Character.','m_Character->').replace('m_Handler.','m_Handler->').replace('GetCharacterController().','GetCharacterController()->')
run(r'''
#include <cassert>
using vector=int;
struct SCR_ChimeraCharacter;
struct SCR_CharacterCameraHandlerComponent {SCR_ChimeraCharacter* character;int calls=0;static SCR_CharacterCameraHandlerComponent* Cast(SCR_CharacterCameraHandlerComponent* p){return p;}void UpdateHeadVisibility(int);void OnAlphatestChange(int);};
struct SCR_ChimeraCharacter {int m_fFaceAlphaTest=0;bool animation=true;SCR_CharacterCameraHandlerComponent handler{this};static SCR_ChimeraCharacter* Cast(SCR_ChimeraCharacter* p){return p;}SCR_ChimeraCharacter* GetCharacterController(){return this;}SCR_CharacterCameraHandlerComponent* GetCameraHandlerComponent(){return &handler;}bool GetAnimation(){return animation;}};
void SCR_CharacterCameraHandlerComponent::UpdateHeadVisibility(int value){character->m_fFaceAlphaTest=value;calls++;}
void SCR_CharacterCameraHandlerComponent::OnAlphatestChange(int value){character->m_fFaceAlphaTest=value;calls++;}
using IEntity=SCR_ChimeraCharacter*;
struct Fade {SCR_ChimeraCharacter* m_Character=nullptr;SCR_CharacterCameraHandlerComponent* m_Handler=nullptr;int m_Previous=0,m_Applied=0;
'''+s+r'''
};
int main(){
SCR_ChimeraCharacter a,b;Fade f;a.m_fFaceAlphaTest=42;b.m_fFaceAlphaTest=10;
f.Update(&a,255);assert(a.m_fFaceAlphaTest==255);f.Update(&a,230);f.Restore();assert(a.m_fFaceAlphaTest==42);
int calls=a.handler.calls;f.Restore();assert(a.handler.calls==calls);
f.Update(&a,255);f.Update(&b,255);assert(a.m_fFaceAlphaTest==42&&b.m_fFaceAlphaTest==255);
b.m_fFaceAlphaTest=99;f.Restore();assert(b.m_fFaceAlphaTest==99); // later native camera owner wins
f.Update(&a,255);f.Update(nullptr,0);assert(a.m_fFaceAlphaTest==42);
a.animation=false;f.Update(&a,255);assert(a.m_fFaceAlphaTest==42);f.Restore();assert(a.m_fFaceAlphaTest==42);
}
''')
print('PASS: native head/helmet fade is local, target-scoped, restored on exit/switch and does not overwrite a later camera owner')