|
|
@@ -11,7 +11,11 @@ |
|
|
#include "ModelIndices.h" |
|
|
#include "Shadows.h" |
|
|
#include "Timecycle.h" |
|
|
#include "CutsceneShadow.h" |
|
|
#include "CutsceneObject.h" |
|
|
#include "ModelIndices.h" |
|
|
#include "RpAnimBlend.h" |
|
|
|
|
|
|
|
|
CCutsceneObject::CCutsceneObject(void) |
|
|
{ |
|
|
@@ -21,6 +25,19 @@ CCutsceneObject::CCutsceneObject(void) |
|
|
ObjectCreatedBy = CUTSCENE_OBJECT; |
|
|
m_fMass = 1.0f; |
|
|
m_fTurnMass = 1.0f; |
|
|
|
|
|
m_pAttachTo = NULL; |
|
|
m_pAttachmentObject = NULL; |
|
|
m_pShadow = NULL; |
|
|
} |
|
|
|
|
|
CCutsceneObject::~CCutsceneObject(void) |
|
|
{ |
|
|
if ( m_pShadow ) |
|
|
{ |
|
|
delete m_pShadow; |
|
|
m_pShadow = NULL; |
|
|
} |
|
|
} |
|
|
|
|
|
void |
|
|
@@ -33,22 +50,38 @@ CCutsceneObject::SetModelIndex(uint32 id) |
|
|
(*RPANIMBLENDCLUMPDATA(m_rwObject))->frames[0].flag |= AnimBlendFrameData::VELOCITY_EXTRACTION_3D; |
|
|
} |
|
|
|
|
|
void |
|
|
CCutsceneObject::CreateShadow(void) |
|
|
{ |
|
|
if ( IsPedModel(GetModelIndex()) ) |
|
|
{ |
|
|
m_pShadow = new CCutsceneShadow(); |
|
|
if (!m_pShadow->IsInitialized()) |
|
|
m_pShadow->Create(m_rwObject, 6, true, 4, true); |
|
|
} |
|
|
} |
|
|
|
|
|
void |
|
|
CCutsceneObject::ProcessControl(void) |
|
|
{ |
|
|
CPhysical::ProcessControl(); |
|
|
|
|
|
if(CTimer::GetTimeStep() < 1/100.0f) |
|
|
m_vecMoveSpeed *= 100.0f; |
|
|
if ( m_pAttachTo ) |
|
|
{ |
|
|
if ( m_pAttachmentObject ) |
|
|
GetMatrix() = CMatrix((RwMatrix*)m_pAttachTo); |
|
|
else |
|
|
GetMatrix() = CMatrix(RwFrameGetLTM((RwFrame*)m_pAttachTo)); |
|
|
} |
|
|
else |
|
|
m_vecMoveSpeed *= 1.0f/CTimer::GetTimeStep(); |
|
|
|
|
|
ApplyMoveSpeed(); |
|
|
|
|
|
#ifdef PED_SKIN |
|
|
if(IsClumpSkinned(GetClump())) |
|
|
UpdateRpHAnim(); |
|
|
#endif |
|
|
{ |
|
|
if(CTimer::GetTimeStep() < 1/100.0f) |
|
|
m_vecMoveSpeed *= 100.0f; |
|
|
else |
|
|
m_vecMoveSpeed *= 1.0f/CTimer::GetTimeStep(); |
|
|
|
|
|
ApplyMoveSpeed(); |
|
|
} |
|
|
} |
|
|
|
|
|
static RpMaterial* |
|
|
@@ -61,14 +94,52 @@ MaterialSetAlpha(RpMaterial *material, void *data) |
|
|
void |
|
|
CCutsceneObject::PreRender(void) |
|
|
{ |
|
|
if(IsPedModel(GetModelIndex())){ |
|
|
CShadows::StoreShadowForPedObject(this, |
|
|
CTimeCycle::m_fShadowDisplacementX[CTimeCycle::m_CurrentStoredValue], |
|
|
CTimeCycle::m_fShadowDisplacementY[CTimeCycle::m_CurrentStoredValue], |
|
|
CTimeCycle::m_fShadowFrontX[CTimeCycle::m_CurrentStoredValue], |
|
|
CTimeCycle::m_fShadowFrontY[CTimeCycle::m_CurrentStoredValue], |
|
|
CTimeCycle::m_fShadowSideX[CTimeCycle::m_CurrentStoredValue], |
|
|
CTimeCycle::m_fShadowSideY[CTimeCycle::m_CurrentStoredValue]); |
|
|
if ( m_pAttachTo ) |
|
|
{ |
|
|
if ( m_pAttachmentObject ) |
|
|
{ |
|
|
m_pAttachmentObject->UpdateRpHAnim(); |
|
|
GetMatrix() = CMatrix((RwMatrix*)m_pAttachTo); |
|
|
} |
|
|
else |
|
|
GetMatrix() = CMatrix(RwFrameGetLTM((RwFrame*)m_pAttachTo)); |
|
|
|
|
|
if ( RwObjectGetType(m_rwObject) == rpCLUMP && IsClumpSkinned(GetClump()) ) |
|
|
{ |
|
|
RpAtomic *atomic = GetFirstAtomic(GetClump()); |
|
|
atomic->boundingSphere.center = (*RPANIMBLENDCLUMPDATA(GetClump()))->frames[0].hanimFrame->t; |
|
|
} |
|
|
} |
|
|
|
|
|
if ( RwObjectGetType(m_rwObject) == rpCLUMP ) |
|
|
UpdateRpHAnim(); |
|
|
|
|
|
if(IsPedModel(GetModelIndex())) |
|
|
{ |
|
|
if ( m_pShadow == NULL ) |
|
|
{ |
|
|
CShadows::StoreShadowForPedObject(this, |
|
|
CTimeCycle::m_fShadowDisplacementX[CTimeCycle::m_CurrentStoredValue], |
|
|
CTimeCycle::m_fShadowDisplacementY[CTimeCycle::m_CurrentStoredValue], |
|
|
CTimeCycle::m_fShadowFrontX[CTimeCycle::m_CurrentStoredValue], |
|
|
CTimeCycle::m_fShadowFrontY[CTimeCycle::m_CurrentStoredValue], |
|
|
CTimeCycle::m_fShadowSideX[CTimeCycle::m_CurrentStoredValue], |
|
|
CTimeCycle::m_fShadowSideY[CTimeCycle::m_CurrentStoredValue]); |
|
|
} |
|
|
else |
|
|
{ |
|
|
if ( m_pShadow->IsInitialized() ) |
|
|
m_pShadow->UpdateForCutscene(); |
|
|
|
|
|
CShadows::StoreShadowForCutscenePedObject(this, |
|
|
CTimeCycle::m_fShadowDisplacementX[CTimeCycle::m_CurrentStoredValue], |
|
|
CTimeCycle::m_fShadowDisplacementY[CTimeCycle::m_CurrentStoredValue], |
|
|
CTimeCycle::m_fShadowFrontX[CTimeCycle::m_CurrentStoredValue], |
|
|
CTimeCycle::m_fShadowFrontY[CTimeCycle::m_CurrentStoredValue], |
|
|
CTimeCycle::m_fShadowSideX[CTimeCycle::m_CurrentStoredValue], |
|
|
CTimeCycle::m_fShadowSideY[CTimeCycle::m_CurrentStoredValue]); |
|
|
} |
|
|
|
|
|
// For some reason xbox/android limbs are transparent here... |
|
|
RpGeometry *geometry = RpAtomicGetGeometry(GetFirstAtomic(GetClump())); |
|
|
RpGeometrySetFlags(geometry, RpGeometryGetFlags(geometry) | rpGEOMETRYMODULATEMATERIALCOLOR); |
|
|
@@ -79,7 +150,9 @@ CCutsceneObject::PreRender(void) |
|
|
void |
|
|
CCutsceneObject::Render(void) |
|
|
{ |
|
|
RwRenderStateSet(rwRENDERSTATECULLMODE, (void *)rwCULLMODECULLNONE); |
|
|
CObject::Render(); |
|
|
RwRenderStateSet(rwRENDERSTATECULLMODE, (void *)rwCULLMODECULLBACK); |
|
|
} |
|
|
|
|
|
bool |
|
|
@@ -93,7 +166,7 @@ CCutsceneObject::SetupLighting(void) |
|
|
}else{ |
|
|
CVector coors = GetPosition(); |
|
|
float lighting = CPointLights::GenerateLightsAffectingObject(&coors); |
|
|
if(!bHasBlip && lighting != 1.0f){ |
|
|
if(lighting != 1.0f){ |
|
|
SetAmbientAndDirectionalColours(lighting); |
|
|
return true; |
|
|
} |
|
|
|