mirror of
https://github.com/halpz/re3.git
synced 2025-07-26 06:22:48 +00:00
miami shadows
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
@ -2,12 +2,20 @@
|
||||
|
||||
#include "Object.h"
|
||||
|
||||
class CCutsceneShadow;
|
||||
|
||||
class CCutsceneObject : public CObject
|
||||
{
|
||||
public:
|
||||
CCutsceneShadow *m_pShadow;
|
||||
void *m_pAttachTo;
|
||||
CObject *m_pAttachmentObject;
|
||||
|
||||
CCutsceneObject(void);
|
||||
~CCutsceneObject(void);
|
||||
|
||||
void SetModelIndex(uint32 id);
|
||||
void CreateShadow(void);
|
||||
void ProcessControl(void);
|
||||
void PreRender(void);
|
||||
void Render(void);
|
||||
|
Reference in New Issue
Block a user