mirror of
https://github.com/halpz/re3.git
synced 2025-06-26 22:06:22 +00:00
WaterLevel done
This commit is contained in:
@ -6,13 +6,13 @@ class CEntity;
|
||||
|
||||
class CParticle
|
||||
{
|
||||
public:
|
||||
enum
|
||||
{
|
||||
RAND_TABLE_SIZE = 20,
|
||||
SIN_COS_TABLE_SIZE = 1024
|
||||
};
|
||||
|
||||
public:
|
||||
|
||||
CVector m_vecPosition;
|
||||
CVector m_vecVelocity;
|
||||
CVector m_vecScreenPosition;
|
||||
|
@ -5,7 +5,7 @@
|
||||
int32 &TempBufferVerticesStored = *(int32*)0x8F5F78;
|
||||
int32 &TempBufferIndicesStored = *(int32*)0x8F1A4C;
|
||||
|
||||
RwIm3DVertex *TempVertexBuffer = (RwIm3DVertex*)0x862330;
|
||||
RwIm3DVertex *TempBufferRenderVertices = (RwIm3DVertex*)0x862330;
|
||||
RwImVertexIndex *TempBufferRenderIndexList = (RwImVertexIndex*)0x846288;
|
||||
|
||||
int RenderBuffer::VerticesToBeStored;
|
||||
@ -21,12 +21,12 @@ RenderBuffer::ClearRenderBuffer(void)
|
||||
void
|
||||
RenderBuffer::StartStoring(int numIndices, int numVertices, RwImVertexIndex **indexStart, RwIm3DVertex **vertexStart)
|
||||
{
|
||||
if(TempBufferIndicesStored + numIndices >= 1024)
|
||||
if(TempBufferIndicesStored + numIndices >= TEMPBUFFERINDEXSIZE)
|
||||
RenderStuffInBuffer();
|
||||
if(TempBufferVerticesStored + numVertices >= 256)
|
||||
if(TempBufferVerticesStored + numVertices >= TEMPBUFFERVERTSIZE)
|
||||
RenderStuffInBuffer();
|
||||
*indexStart = &TempBufferRenderIndexList[TempBufferIndicesStored];
|
||||
*vertexStart = &TempVertexBuffer[TempBufferVerticesStored];
|
||||
*vertexStart = &TempBufferRenderVertices[TempBufferVerticesStored];
|
||||
IndicesToBeStored = numIndices;
|
||||
VerticesToBeStored = numVertices;
|
||||
}
|
||||
@ -44,7 +44,7 @@ RenderBuffer::StopStoring(void)
|
||||
void
|
||||
RenderBuffer::RenderStuffInBuffer(void)
|
||||
{
|
||||
if(TempBufferVerticesStored && RwIm3DTransform(TempVertexBuffer, TempBufferVerticesStored, nil, rwIM3D_VERTEXUV)){
|
||||
if(TempBufferVerticesStored && RwIm3DTransform(TempBufferRenderVertices, TempBufferVerticesStored, nil, rwIM3D_VERTEXUV)){
|
||||
RwIm3DRenderIndexedPrimitive(rwPRIMTYPETRILIST, TempBufferRenderIndexList, TempBufferIndicesStored);
|
||||
RwIm3DEnd();
|
||||
}
|
||||
|
@ -8,3 +8,11 @@ public:
|
||||
static void StopStoring(void);
|
||||
static void RenderStuffInBuffer(void);
|
||||
};
|
||||
|
||||
#define TEMPBUFFERVERTSIZE 256
|
||||
#define TEMPBUFFERINDEXSIZE 1024
|
||||
|
||||
extern int32 &TempBufferVerticesStored;
|
||||
extern int32 &TempBufferIndicesStored;
|
||||
extern RwIm3DVertex *TempBufferRenderVertices;
|
||||
extern RwImVertexIndex *TempBufferRenderIndexList;
|
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,97 @@
|
||||
#pragma once
|
||||
|
||||
|
||||
#define WATER_BLOCK_SIZE LARGE_SECTOR_SIZE
|
||||
#define WATER_FINEBLOCK_SIZE HUGE_SECTOR_SIZE
|
||||
#define WATER_Z_OFFSET (1.5f)
|
||||
|
||||
#define MAX_SMALL_SECTORS 128
|
||||
#define MAX_LARGE_SECTORS 64
|
||||
#define MAX_HUGE_SECTORS 32
|
||||
#define MAX_EXTRAHUGE_SECTORS 16
|
||||
|
||||
#define SMALL_SECTOR_SIZE 32
|
||||
#define LARGE_SECTOR_SIZE 64
|
||||
#define HUGE_SECTOR_SIZE 128
|
||||
#define EXTRAHUGE_SECTOR_SIZE 256
|
||||
|
||||
#define WATER_START_X -2048.0f
|
||||
#define WATER_END_X 2048.0f
|
||||
|
||||
#define WATER_START_Y -2048.0f
|
||||
#define WATER_END_Y 2048.0f
|
||||
|
||||
#define WATER_WIDTH ((WATER_END_X - WATER_START_X))
|
||||
#define WATER_HEIGHT ((WATER_END_Y - WATER_START_Y))
|
||||
|
||||
|
||||
#define WATER_UNSIGN_X(x) ( (x) + (WATER_WIDTH /2) )
|
||||
#define WATER_UNSIGN_Y(y) ( (y) + (WATER_HEIGHT/2) )
|
||||
#define WATER_SIGN_X(x) ( (x) - (WATER_WIDTH /2) )
|
||||
#define WATER_SIGN_Y(y) ( (y) - (WATER_HEIGHT/2) )
|
||||
|
||||
// 32
|
||||
#define WATER_SMALL_X(x) ( WATER_UNSIGN_X(x) / MAX_SMALL_SECTORS )
|
||||
#define WATER_SMALL_Y(y) ( WATER_UNSIGN_Y(y) / MAX_SMALL_SECTORS )
|
||||
#define WATER_FROM_SMALL_SECTOR_X(x) ( ((x) - (MAX_SMALL_SECTORS/2) ) * SMALL_SECTOR_SIZE )
|
||||
#define WATER_FROM_SMALL_SECTOR_Y(y) ( ((y) - (MAX_SMALL_SECTORS/2) ) * SMALL_SECTOR_SIZE )
|
||||
#define WATER_TO_SMALL_SECTOR_X(x) ( WATER_UNSIGN_X(x) / SMALL_SECTOR_SIZE )
|
||||
#define WATER_TO_SMALL_SECTOR_Y(y) ( WATER_UNSIGN_Y(y) / SMALL_SECTOR_SIZE )
|
||||
|
||||
// 64
|
||||
#define WATER_LARGE_X(x) ( WATER_UNSIGN_X(x) / MAX_LARGE_SECTORS )
|
||||
#define WATER_LARGE_Y(y) ( WATER_UNSIGN_Y(y) / MAX_LARGE_SECTORS )
|
||||
#define WATER_FROM_LARGE_SECTOR_X(x) ( ((x) - (MAX_LARGE_SECTORS/2) ) * LARGE_SECTOR_SIZE )
|
||||
#define WATER_FROM_LARGE_SECTOR_Y(y) ( ((y) - (MAX_LARGE_SECTORS/2) ) * LARGE_SECTOR_SIZE )
|
||||
#define WATER_TO_LARGE_SECTOR_X(x) ( WATER_UNSIGN_X(x) / LARGE_SECTOR_SIZE )
|
||||
#define WATER_TO_LARGE_SECTOR_Y(y) ( WATER_UNSIGN_Y(y) / LARGE_SECTOR_SIZE )
|
||||
|
||||
// 128
|
||||
#define WATER_HUGE_X(x) ( WATER_UNSIGN_X(x) / MAX_HUGE_SECTORS )
|
||||
#define WATER_HUGE_Y(y) ( WATER_UNSIGN_Y(y) / MAX_HUGE_SECTORS )
|
||||
#define WATER_FROM_HUGE_SECTOR_X(x) ( ((x) - (MAX_HUGE_SECTORS/2) ) * HUGE_SECTOR_SIZE )
|
||||
#define WATER_FROM_HUGE_SECTOR_Y(y) ( ((y) - (MAX_HUGE_SECTORS/2) ) * HUGE_SECTOR_SIZE )
|
||||
#define WATER_TO_HUGE_SECTOR_X(x) ( WATER_UNSIGN_X(x) / HUGE_SECTOR_SIZE )
|
||||
#define WATER_TO_HUGE_SECTOR_Y(y) ( WATER_UNSIGN_Y(y) / HUGE_SECTOR_SIZE )
|
||||
|
||||
// 256
|
||||
#define WATER_EXTRAHUGE_X(x) ( WATER_UNSIGN_X(x) / MAX_EXTRAHUGE_SECTORS )
|
||||
#define WATER_EXTRAHUGE_Y(y) ( WATER_UNSIGN_Y(y) / MAX_EXTRAHUGE_SECTORS )
|
||||
#define WATER_FROM_EXTRAHUGE_SECTOR_X(x) ( ((x) - (MAX_EXTRAHUGE_SECTORS/2)) * EXTRAHUGE_SECTOR_SIZE )
|
||||
#define WATER_FROM_EXTRAHUGE_SECTOR_Y(y) ( ((y) - (MAX_EXTRAHUGE_SECTORS/2)) * EXTRAHUGE_SECTOR_SIZE )
|
||||
#define WATER_TO_EXTRAHUGE_SECTOR_X(x) ( WATER_UNSIGN_X(x) / EXTRAHUGE_SECTOR_SIZE )
|
||||
#define WATER_TO_EXTRAHUGE_SECTOR_Y(y) ( WATER_UNSIGN_Y(y) / EXTRAHUGE_SECTOR_SIZE )
|
||||
|
||||
|
||||
#define MAX_BOAT_WAKES 8
|
||||
|
||||
class CWaterLevel
|
||||
{
|
||||
static int32 ms_nNoOfWaterLevels;
|
||||
static float ms_aWaterZs[48];
|
||||
static CRect ms_aWaterRects[48];
|
||||
static uint8 aWaterBlockList[WATER_BLOCK_SIZE][WATER_BLOCK_SIZE];
|
||||
static uint8 aWaterFineBlockList[WATER_FINEBLOCK_SIZE][WATER_FINEBLOCK_SIZE];
|
||||
static bool WavesCalculatedThisFrame;
|
||||
static RpAtomic *ms_pWavyAtomic;
|
||||
static RpGeometry *apGeomArray[MAX_BOAT_WAKES];
|
||||
static int16 nGeomUsed;
|
||||
|
||||
public:
|
||||
static void RenderWater(void);
|
||||
static void Initialise(char *pWaterDat);
|
||||
static void Shutdown();
|
||||
static void CreateWavyAtomic();
|
||||
static void DestroyWavyAtomic();
|
||||
static bool GetWaterLevel(float fX, float fY, float fZ, float *pfOutLevel, bool bDontCheckZ);
|
||||
static bool GetWaterLevelNoWaves(float fX, float fY, float fZ, float *pfOutLevel);
|
||||
static void RenderWater();
|
||||
static void RenderOneFlatSmallWaterPoly (float fX, float fY, float fZ, RwRGBA const &color);
|
||||
static void RenderOneFlatLargeWaterPoly (float fX, float fY, float fZ, RwRGBA const &color);
|
||||
static void RenderOneFlatHugeWaterPoly (float fX, float fY, float fZ, RwRGBA const &color);
|
||||
static void RenderOneFlatExtraHugeWaterPoly(float fX, float fY, float fZ, RwRGBA const &color);
|
||||
static void RenderOneWavySector (float fX, float fY, float fZ, RwRGBA const &color, bool bUnk = false);
|
||||
static float CalcDistanceToWater(float fX, float fY);
|
||||
static void RenderAndEmptyRenderBuffer();
|
||||
static void AllocateBoatWakeArray();
|
||||
static void FreeBoatWakeArray();
|
||||
};
|
||||
|
Reference in New Issue
Block a user