Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
29 lines
2.5 KiB
Python
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')
|