Skip to content
This repository has been archived by the owner. It is now read-only.

iii shadows fix #674

Merged
merged 2 commits into from Aug 3, 2020
Merged
Changes from all commits
Commits
File filter
Filter file types
Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.

Always

Just for now

@@ -458,7 +458,7 @@ CShadows::StoreShadowForCar(CAutomobile *pCar)
if ( CTimeCycle::GetShadowStrength() != 0 )
{
CVector CarPos = pCar->GetPosition();
float fDistToCamSqr = (CarPos - TheCamera.GetPosition()).MagnitudeSqr();
float fDistToCamSqr = (CarPos - TheCamera.GetPosition()).MagnitudeSqr2D();

if ( CCutsceneMgr::IsRunning() )
fDistToCamSqr /= SQR(TheCamera.LODDistMultiplier) * 4.0f;
@@ -1578,40 +1578,41 @@ CStaticShadow::Free(void)

void
CShadows::CalcPedShadowValues(CVector vecLightDir,
float *pfDisplacementX, float *pfDisplacementY,
float *pfFrontX, float *pfFrontY,
float *pfSideX, float *pfSideY)
float *pfSideX, float *pfSideY,
float *pfDisplacementX, float *pfDisplacementY)
{
ASSERT(pfDisplacementX != NULL);
ASSERT(pfDisplacementY != NULL);
ASSERT(pfFrontX != NULL);
ASSERT(pfFrontY != NULL);
ASSERT(pfSideX != NULL);
ASSERT(pfSideY != NULL);
ASSERT(pfFrontX != nil);
ASSERT(pfFrontY != nil);
ASSERT(pfSideX != nil);
ASSERT(pfSideY != nil);
ASSERT(pfDisplacementX != nil);
ASSERT(pfDisplacementY != nil);

*pfDisplacementX = -vecLightDir.x;
*pfDisplacementY = -vecLightDir.y;
*pfFrontX = -vecLightDir.x;
*pfFrontY = -vecLightDir.y;

float fDist = Sqrt(*pfDisplacementY * *pfDisplacementY + *pfDisplacementX * *pfDisplacementX);
float fDist = Sqrt(*pfFrontY * *pfFrontY + *pfFrontX * *pfFrontX);
float fMult = (fDist + 1.0f) / fDist;

*pfDisplacementX *= fMult;
*pfDisplacementY *= fMult;

*pfFrontX = -vecLightDir.y / fDist;
*pfFrontY = vecLightDir.x / fDist;
*pfFrontX *= fMult;
*pfFrontY *= fMult;

*pfSideX = -vecLightDir.x;
*pfSideY = -vecLightDir.y;
*pfSideX = -vecLightDir.y / fDist;
*pfSideY = vecLightDir.x / fDist;

*pfDisplacementX /= 2;
*pfDisplacementY /= 2;
*pfDisplacementX = -vecLightDir.x;
*pfDisplacementY = -vecLightDir.y;

*pfFrontX /= 2;
*pfFrontY /= 2;

*pfSideX /= 2;
*pfSideY /= 2;

*pfDisplacementX /= 2;
*pfDisplacementY /= 2;

}

void
@@ -1656,22 +1657,22 @@ CShadows::RenderExtraPlayerShadows(void)
vecLight.y *= fInv;
vecLight.z *= fInv;

float fDisplacementX, fDisplacementY, fFrontX, fFrontY, fSideX, fSideY;
float fFrontX, fFrontY, fSideX, fSideY, fDisplacementX, fDisplacementY;

CalcPedShadowValues(vecLight,
&fDisplacementX, &fDisplacementY,
&fFrontX, &fFrontY,
&fSideX, &fSideY);
&fFrontX, &fFrontY,
&fSideX, &fSideY,
&fDisplacementX, &fDisplacementY);

CVector shadowPos = FindPlayerCoors();

shadowPos.x += fSideX;
shadowPos.y += fSideY;
shadowPos.x += fDisplacementX;
shadowPos.y += fDisplacementY;


StoreShadowToBeRendered(SHADOWTYPE_DARK, gpShadowPedTex, &shadowPos,
fDisplacementX, fDisplacementY,
fFrontX, fFrontY,
fSideX, fSideY,
nColorStrength, 0, 0, 0,
4.0f, false, 1.0f);
}
@@ -1768,7 +1769,7 @@ CShadows::RenderIndicatorShadow(uint32 nID, uint8 ShadowType, RwTexture *pTextur
{
ASSERT(pPosn != NULL);

C3dMarkers::PlaceMarkerSet(nID, _TODOCONST(4), *pPosn, Max(fFrontX, -fSideY),
C3dMarkers::PlaceMarkerSet(nID, MARKERTYPE_CYLINDER, *pPosn, Max(fFrontX, -fSideY),
0, 128, 255, 128,
2048, 0.2f, 0);
}
@@ -128,21 +128,12 @@ class CPed;
class CShadows
{
public:
#if 1
static int16 ShadowsStoredToBeRendered;
static CStoredShadow asShadowsStored [MAX_STOREDSHADOWS];
static CPolyBunch aPolyBunches [MAX_POLYBUNCHES];
static CStaticShadow aStaticShadows [MAX_STATICSHADOWS];
static CPolyBunch *pEmptyBunchList;
static CPermanentShadow aPermanentShadows[MAX_PERMAMENTSHADOWS];
#else
static int16 &ShadowsStoredToBeRendered;
static CStoredShadow (&asShadowsStored) [MAX_STOREDSHADOWS];
static CPolyBunch (&aPolyBunches) [MAX_POLYBUNCHES];
static CStaticShadow (&aStaticShadows) [MAX_STATICSHADOWS];
static CPolyBunch *&pEmptyBunchList;
static CPermanentShadow (&aPermanentShadows)[MAX_PERMAMENTSHADOWS];
#endif

static void Init (void);
static void Shutdown (void);
@@ -166,7 +157,7 @@ class CShadows
CVector *pPosn, float fFrontX, float fFrontY, float fSideX, float fSideY, int16 nIntensity, uint8 nRed, uint8 nGreen, uint8 nBlue, float fZDistance, float fScale, CPolyBunch **ppPolyBunch);
static void UpdateStaticShadows (void);
static void UpdatePermanentShadows (void);
static void CalcPedShadowValues (CVector vecLightDir, float *pfDisplacementX, float *pfDisplacementY, float *pfFrontX, float *pfFrontY, float *pfSideX, float *pfSideY);
static void CalcPedShadowValues (CVector vecLightDir, float *pfFrontX, float *pfFrontY, float *pfSideX, float *pfSideY, float *pfDisplacementX, float *pfDisplacementY);
static void RenderExtraPlayerShadows (void);
static void TidyUpShadows (void);
static void RenderIndicatorShadow (uint32 nID, uint8 ShadowType, RwTexture *pTexture, CVector *pPosn, float fFrontX, float fFrontY, float fSideX, float fSideY, int16 nIntensity);