SetComponentRotation moved to code

This commit is contained in:
Silent 2017-06-25 12:32:22 +02:00
parent 9b75302ba5
commit 6006e253b1
3 changed files with 29 additions and 4 deletions

View file

@ -243,6 +243,9 @@ RwBool _rpD3D9VertexDeclarationInstColor(RwUInt8* mem, const RwRGBA* color, RwIn
return alpha != 255; return alpha != 255;
} }
// Unreachable stub
RwBool RwMatrixDestroy(RwMatrix* mpMat) { assert(!"Unreachable!"); return TRUE; }
struct AlphaObjectInfo struct AlphaObjectInfo
{ {
RpAtomic* pAtomic; RpAtomic* pAtomic;

View file

@ -18,9 +18,6 @@ static void* varVehicleRender = AddressByVersion<void*>(0x6D0E60, 0x6D1680, 0x70
WRAPPER void CVehicle::Render() { VARJMP(varVehicleRender); } WRAPPER void CVehicle::Render() { VARJMP(varVehicleRender); }
static void* varIsLawEnforcementVehicle = AddressByVersion<void*>(0x6D2370, 0x6D2BA0, 0x70D8C0); static void* varIsLawEnforcementVehicle = AddressByVersion<void*>(0x6D2370, 0x6D2BA0, 0x70D8C0);
WRAPPER bool CVehicle::IsLawEnforcementVehicle() { VARJMP(varIsLawEnforcementVehicle); } WRAPPER bool CVehicle::IsLawEnforcementVehicle() { VARJMP(varIsLawEnforcementVehicle); }
static void* varSetComponentRotation = AddressByVersion<void*>(0x6DBA30, 0, 0);
WRAPPER void CVehicle::SetComponentRotation( RwFrame* component, int axis, float angle, bool absolute ) { VARJMP(varSetComponentRotation); }
void (CAutomobile::*CAutomobile::orgPreRender)(); void (CAutomobile::*CAutomobile::orgPreRender)();
static int32_t random(int32_t from, int32_t to) static int32_t random(int32_t from, int32_t to)
@ -139,6 +136,31 @@ void CVehicle::CustomCarPlate_BeforeRenderingStart(CVehicleModelInfo* pModelInfo
} }
} }
void CVehicle::SetComponentRotation( RwFrame* component, int axis, float angle, bool absolute )
{
if ( component == nullptr ) return;
CMatrix matrix( RwFrameGetMatrix(component) );
if ( absolute )
{
if ( axis == 0 ) matrix.SetRotateXOnly(angle);
else if ( axis == 1 ) matrix.SetRotateYOnly(angle);
else if ( axis == 2 ) matrix.SetRotateZOnly(angle);
}
else
{
const CVector pos = matrix.GetPos();
matrix.SetTranslateOnly(0.0f, 0.0f, 0.0f);
if ( axis == 0 ) matrix.RotateX(angle);
else if ( axis == 1 ) matrix.RotateY(angle);
else if ( axis == 2 ) matrix.RotateZ(angle);
matrix.GetPos() += pos;
}
matrix.UpdateRW();
}
void CHeli::Render() void CHeli::Render()
{ {
double dRotorsSpeed, dMovingRotorSpeed; double dRotorsSpeed, dMovingRotorSpeed;

View file

@ -144,8 +144,8 @@ public:
//void CustomCarPlate_AfterRenderingStop(CVehicleModelInfo* pModelInfo); //void CustomCarPlate_AfterRenderingStop(CVehicleModelInfo* pModelInfo);
bool IsLawEnforcementVehicle(); bool IsLawEnforcementVehicle();
void SetComponentRotation( RwFrame* component, int axis, float angle, bool absolute );
static void SetComponentRotation( RwFrame* component, int axis, float angle, bool absolute );
static void SetComponentAtomicAlpha(RpAtomic* pAtomic, int nAlpha); static void SetComponentAtomicAlpha(RpAtomic* pAtomic, int nAlpha);
}; };