lcs particle

This commit is contained in:
Fire-Head
2021-01-13 00:07:24 +03:00
parent 2ce925caba
commit 3648ef4687
17 changed files with 464 additions and 648 deletions

View File

@ -591,6 +591,8 @@ CMBlur::AddRenderFx(RwCamera *cam, RwRect *rect, float z, FxType type)
void
CMBlur::OverlayRenderFx(RwCamera *cam, RwRaster *frontBuf)
{
//TODO(LCS)
#if 0
bool drawWaterDrops = false;
RwIm2DVertex verts[4];
int red = (0.75f*CTimeCycle::GetDirectionalRed() + CTimeCycle::GetAmbientRed())*0.55f * 255;
@ -796,4 +798,5 @@ CMBlur::OverlayRenderFx(RwCamera *cam, RwRaster *frontBuf)
RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)FALSE);
RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)FALSE);
pBufVertCount = 0;
#endif
}

File diff suppressed because it is too large Load Diff

View File

@ -18,11 +18,6 @@ public:
uint32 m_nTimeWhenWillBeDestroyed;
uint32 m_nTimeWhenColorWillBeChanged;
float m_fZGround;
CVector m_vecParticleMovementOffset;
int16 m_nCurrentZRotation;
uint16 m_nZRotationTimer;
float m_fCurrentZRadius;
uint16 m_nZRadiusTimer;
uint8 m_nColorIntensity;
uint8 m_nAlpha;
float m_fSize;
@ -35,12 +30,20 @@ public:
uint8 m_nCurrentFrame;
RwRGBA m_Color;
CParticle *m_pNext;
//CVector m_vecParticleMovementOffset;
//int16 m_nCurrentZRotation;
//uint16 m_nZRotationTimer;
//float m_fCurrentZRadius;
//uint16 m_nZRadiusTimer;
int32 field_4C;
CParticle()
{
;
}
~CParticle()
{
;
@ -97,12 +100,9 @@ public:
static void HandleShootableBirdsStuff(CEntity *entity, CVector const&camPos);
};
extern bool clearWaterDrop;
extern int32 numWaterDropOnScreen;
extern RwRaster *gpCarSplashRaster[];
extern RwRaster *gpHeatHazeRaster;
extern RwRaster *gpDotRaster;
extern RwRaster *gpRainDripRaster[];
extern RwRaster *gpRainDripDarkRaster[];
VALIDATE_SIZE(CParticle, 0x58);
VALIDATE_SIZE(CParticle, 0x50);

View File

@ -4,18 +4,31 @@
#include "FileMgr.h"
#include "ParticleMgr.h"
// --LCS: File done
cParticleSystemMgr mod_ParticleSystemManager;
const char *ParticleFilename = "PARTICLE.CFG";
cParticleSystemMgr::cParticleSystemMgr()
{
memset(this, 0, sizeof(*this));
#ifdef FIX_BUGS
m_aParticles = nil;
#endif
}
cParticleSystemMgr::~cParticleSystemMgr()
{
#ifdef FIX_BUGS
if ( m_aParticles )
delete [] m_aParticles;
#endif
}
void cParticleSystemMgr::Initialise()
{
LoadParticleData();
if ( gMakeResources )
LoadParticleData();
for ( int32 i = 0; i < MAX_PARTICLES; i++ )
m_aParticles[i].m_pParticles = nil;
@ -23,20 +36,31 @@ void cParticleSystemMgr::Initialise()
void cParticleSystemMgr::LoadParticleData()
{
CFileMgr::SetDir("DATA");
CFileMgr::LoadFile(ParticleFilename, work_buff, ARRAY_SIZE(work_buff), "r");
#ifdef FIX_BUGS
if ( m_aParticles )
delete [] m_aParticles;
#endif
m_aParticles = new tParticleSystemData[MAX_PARTICLES];
memset(m_aParticles, 0, sizeof(tParticleSystemData)*MAX_PARTICLES);
CFileMgr::SetDir("Data");
ssize_t len = CFileMgr::LoadFile(ParticleFilename, work_buff, ARRAY_SIZE(work_buff), "r");
CFileMgr::SetDir("");
ASSERT(!(len <= 0));
tParticleSystemData *entry = nil;
int32 type = PARTICLE_FIRST;
char *buffEnd = (char *)&work_buff[len];
char *lineStart = (char *)work_buff;
char *lineEnd = lineStart + 1;
char line[500];
char delims[4];
while ( true )
while ( lineStart < buffEnd )
{
ASSERT(lineStart != nil);
ASSERT(lineEnd != nil);

View File

@ -124,15 +124,18 @@ class cParticleSystemMgr
};
public:
tParticleSystemData m_aParticles[MAX_PARTICLES];
tParticleSystemData *m_aParticles;//[MAX_PARTICLES];
cParticleSystemMgr();
#ifdef FIX_BUGS
~cParticleSystemMgr();
#endif
void Initialise();
void LoadParticleData();
void RangeCheck(tParticleSystemData *pData) { }
};
VALIDATE_SIZE(cParticleSystemMgr, 0x2FFC);
VALIDATE_SIZE(cParticleSystemMgr, 0x4);
extern cParticleSystemMgr mod_ParticleSystemManager;

View File

@ -42,8 +42,6 @@ enum tParticleType
PARTICLE_RAIN_SPLASH_BIGGROW,
PARTICLE_RAIN_SPLASHUP,
PARTICLE_WATERSPRAY,
PARTICLE_WATERDROP,
PARTICLE_BLOODDROP,
PARTICLE_EXPLOSION_MEDIUM,
PARTICLE_EXPLOSION_LARGE,
PARTICLE_EXPLOSION_MFAST,
@ -83,10 +81,11 @@ enum tParticleType
PARTICLE_SHIP_SIDE,
PARTICLE_BEASTIE,
PARTICLE_RAINDROP_2D,
PARTICLE_HEATHAZE,
PARTICLE_HEATHAZE_IN_DIST,
PARTICLE_FERRY_CHIM_SMOKE,
PARTICLE_MULTIPLAYER_HIT,
PARTICLE_HYDRANT_STEAM,
MAX_PARTICLES,
PARTICLE_FIRST = PARTICLE_SPARK,
PARTICLE_LAST = PARTICLE_RAINDROP_2D
PARTICLE_LAST = PARTICLE_HYDRANT_STEAM
};

View File

@ -10,6 +10,19 @@ float CSprite::m_f2DFarScreenZ;
float CSprite::m_fRecipNearClipPlane;
int32 CSprite::m_bFlushSpriteBufferSwitchZTest;
float CalcScreenZ(float z)
{
// LCS TODO: check
if ( z == 0.0f )
return CSprite::GetNearScreenZ();
return (z - CDraw::GetNearClipZ())
* (CSprite::GetFarScreenZ() - CSprite::GetNearScreenZ()) * CDraw::GetFarClipZ()
/ ( (CDraw::GetFarClipZ() - CDraw::GetNearClipZ()) * z )
+ CSprite::GetNearScreenZ();
}
float
CSprite::CalcHorizonCoors(void)
{

View File

@ -29,3 +29,5 @@ public:
static void RenderBufferedOneXLUSprite2D_Rotate_Dimension(float x, float y, float w, float h, const RwRGBA &colour, int16 intens, float rotation, uint8 alpha);
};
extern float CalcScreenZ(float z);

View File

@ -325,6 +325,7 @@ void CWeather::Update(void)
void CWeather::AddHeatHaze()
{
/*
if(TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_TOPDOWN ||
TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_TOP_DOWN_PED)
return;
@ -336,6 +337,7 @@ void CWeather::AddHeatHaze()
pos.y = CGeneral::GetRandomNumberInRange(SCREEN_HEIGHT*0.4f, SCREEN_HEIGHT*0.9f);
pos.z = 100.0f;
CParticle::AddParticle(PARTICLE_HEATHAZE_IN_DIST, pos, CVector(0.0f, 0.0f, 0.0f));
*/
}
void CWeather::AddBeastie()