Files
bluflame/evoke-64k/trunk/ev10/cave.cpp
2026-04-18 22:31:51 +02:00

77 lines
2.3 KiB
C++

#include "cave.h"
#include "globals.h"
#include "meshdata/crystal.h"
#ifdef EXTRACODE
int m_iCrystalCount;
SCrystalInfo m_CrystalInfos[ m_iMaxCrystalCount ];
#else
#include "crystaldata.h"
#endif
void CreateCaveRenderJobs()
{
#ifdef CAVE
#ifdef EXTRACODE
OutputDebugString( "Creating cave: \n" );
DWORD dwTicks = GetTickCount();
#endif
g_CaveTerrainGrid.Init( 192, 96, &TerrainGrid::IsoSurfaceCave );
g_CaveGroundTerrainGrid.Init( 96, 48, &TerrainGrid::IsoSurfaceCaveGround );
#ifdef EXTRACODE
char cTime[128];
dwTicks = GetTickCount() - dwTicks;
sprintf_s( cTime, "Time: %d \n", dwTicks );
OutputDebugString( cTime );
#endif
D3DXMATRIX matTerrainWorld, matTerrainPos;
D3DXMatrixScaling(&matTerrainWorld, 128, 32, 128);
D3DXMatrixTranslation(&matTerrainPos, -64, -16, -64);
D3DXMatrixMultiply(&matTerrainWorld, &matTerrainWorld, &matTerrainPos);
g_Objects[ OI_CAVE_FIRST ].m_iUsedPreShader = PreDepth;
g_Objects[ OI_CAVE_FIRST ].m_iUsedShader[ 0 ] = Cave;
g_Objects[ OI_CAVE_FIRST ].SetTransformation(matTerrainWorld);
g_Objects[ OI_CAVE_FIRST ].m_pTerrain = &g_CaveTerrainGrid;
D3DXMatrixScaling(&matTerrainWorld, 128, 16, 128);
D3DXMatrixTranslation(&matTerrainPos, -64, -24, -64);
D3DXMatrixMultiply(&matTerrainWorld, &matTerrainWorld, &matTerrainPos);
g_Objects[ OI_CAVE_GROUND_FIRST].m_iUsedPreShader = PreDepth;
g_Objects[ OI_CAVE_GROUND_FIRST ].m_iUsedShader[ 0 ] = CaveGround;
g_Objects[ OI_CAVE_GROUND_FIRST ].SetTransformation(matTerrainWorld);
g_Objects[ OI_CAVE_GROUND_FIRST ].m_pTerrain = &g_CaveGroundTerrainGrid;
#else
#endif
SetCrystalPos();
}
void SetCrystalPos()
{
for(int i= 0; i < m_iCrystalCount; ++i )
{
assert( OI_CAVE_LIGHT_FIRST + i <= OI_CAVE_LIGHT_LAST );
Renderjob* pRJ= g_Objects + OI_CAVE_LIGHT_FIRST + i;
CreateCrystal( *pRJ );
pRJ->m_iUsedPreShader= PreDepth;
pRJ->m_iUsedShader[ 0 ]= Crystal;
SCrystalInfo& ci= m_CrystalInfos[ i ];
D3DXMATRIX matResult;
D3DXMATRIX mat;
D3DXMatrixScaling( &matResult, ci.m_fScale, ci.m_fScale, ci.m_fScale );
D3DXMatrixRotationYawPitchRoll( &mat, ci.m_v3Rot.x, ci.m_v3Rot.y, ci.m_v3Rot.z );
D3DXMatrixMultiply( &matResult,&matResult,&mat);
D3DXMatrixTranslation( &mat, ci.m_v3Pos.x, ci.m_v3Pos.y, ci.m_v3Pos.z );
D3DXMatrixMultiply( &matResult,&matResult,&mat);
pRJ->SetTransformation( matResult );
}
}