client/GameLib/MapOutdoorIndexBuffer.cpp

530 lines
19 KiB
C++

#include "StdAfx.h"
#include "MapOutdoor.h"
void CMapOutdoor::SetIndexBuffer()
{
void * pIndices;
long x, y;
DWORD dwIndexNum = TERRAIN_PATCHSIZE * TERRAIN_PATCHSIZE * 4;
#ifdef WORLD_EDITOR
m_pwIndices = new WORD[dwIndexNum];
if (!m_pwIndices)
TraceError("CMapOutdoor::SetIndexBuffer() IndexBuffer is NULL");
memset(m_pwIndices, 0, sizeof(WORD) * dwIndexNum);
if (!m_IndexBuffer.Create(dwIndexNum, D3DFMT_INDEX16))
TraceError("CMapOutdoor::SetIndexBuffer() IndexBuffer Create Error");
WORD count = 0;
WORD count2 = 0;
long ry = 0;
BYTE ucNumLineWarp = TERRAIN_PATCHSIZE + 1;
for (y = 0; y < TERRAIN_PATCHSIZE; y++)
{
if (ry % 2 == 0)
{
m_pwIndices[count++] = count2;
m_pwIndices[count++] = count2+ucNumLineWarp;
}
else
{
m_pwIndices[count++] = count2+ucNumLineWarp;
m_pwIndices[count++] = count2;
}
for (x = 0; x < TERRAIN_PATCHSIZE; x++)
{
if (ry % 2 == 1)
{
m_pwIndices[count++] = (WORD) (count2+ucNumLineWarp-1);
m_pwIndices[count++] = (WORD) (count2-1);
count2 -= (short) 1;
}
else
{
m_pwIndices[count++] = (WORD) (count2+1);
m_pwIndices[count++] = (WORD) (count2+ucNumLineWarp+1);
count2 += (short) 1;
}
}
if (y < TERRAIN_PATCHSIZE-1)
{
m_pwIndices[count++] = (WORD) (count2+ucNumLineWarp);
m_pwIndices[count++] = (WORD) (count2+ucNumLineWarp);
count2 += ucNumLineWarp;
}
ry++;
}
m_wNumIndices = count;
if (!m_IndexBuffer.Lock((void **) &pIndices))
TraceError("CMapOutdoor::SetIndexBuffer() IndexBuffer Unlock Error");
memcpy(pIndices, m_pwIndices, count * sizeof(WORD));
m_IndexBuffer.Unlock();
delete [] m_pwIndices;
m_pwIndices = NULL;
#else
WORD count[TERRAINPATCH_LODMAX], count2[TERRAINPATCH_LODMAX];
BYTE uci;
for (uci = 0; uci < TERRAINPATCH_LODMAX; ++uci)
{
m_pwaIndices[uci] = new WORD[dwIndexNum];
memset(m_pwaIndices[uci], 0, sizeof(WORD) * dwIndexNum);
count[uci] = 0;
count2[uci] = 0;
if ( !m_IndexBuffer[uci].Create(dwIndexNum, D3DFMT_INDEX16) )
TraceError("CMapOutdoor::SetIndexBuffer() IndexBuffer Create Error");
}
BYTE ucNumLineWarp = TERRAIN_PATCHSIZE + 1;
for (y = 0; y < TERRAIN_PATCHSIZE; y++)
{
if (y%2 == 0)
{
m_pwaIndices[0][(count[0])++] = count2[0];
m_pwaIndices[0][(count[0])++] = count2[0]+ucNumLineWarp;
}
else
{
m_pwaIndices[0][(count[0])++] = count2[0]+ucNumLineWarp;
m_pwaIndices[0][(count[0])++] = count2[0];
}
for (x = 0; x < TERRAIN_PATCHSIZE; x++)
{
if (y%2 == 0)
{
m_pwaIndices[0][(count[0])++] = (WORD) (count2[0]+1);
m_pwaIndices[0][(count[0])++] = (WORD) (count2[0]+ucNumLineWarp+1);
count2[0] += (short) 1;
}
else
{
m_pwaIndices[0][(count[0])++] = (WORD) (count2[0]+ucNumLineWarp-1);
m_pwaIndices[0][(count[0])++] = (WORD) (count2[0]-1);
count2[0] -= (short) 1;
}
if (0 == x%2)
{
if (0 == y)
{
if (0 == x)
ADDLvl1TL(m_pwaIndices[1], count[1], count2[1], ucNumLineWarp);
else if ((TERRAIN_PATCHSIZE - 2) == x)
ADDLvl1TR(m_pwaIndices[1], count[1], count2[1], ucNumLineWarp);
else
ADDLvl1T(m_pwaIndices[1], count[1], count2[1], ucNumLineWarp);
}
else if ((TERRAIN_PATCHSIZE - 2) == y)
{
if (0 == x)
ADDLvl1BL(m_pwaIndices[1], count[1], count2[1], ucNumLineWarp);
else if ((TERRAIN_PATCHSIZE - 2) == x)
ADDLvl1BR(m_pwaIndices[1], count[1], count2[1], ucNumLineWarp);
else
ADDLvl1B(m_pwaIndices[1], count[1], count2[1], ucNumLineWarp);
}
else if (0 == y%2)
{
if (0 == x)
ADDLvl1L(m_pwaIndices[1], count[1], count2[1], ucNumLineWarp);
else if ((TERRAIN_PATCHSIZE - 2) == x)
ADDLvl1R(m_pwaIndices[1], count[1], count2[1], ucNumLineWarp);
else
ADDLvl1M(m_pwaIndices[1], count[1], count2[1], ucNumLineWarp);
}
count2[1] += 2;
}
if (0 == x%4)
{
if (0 == y)
{
if (0 == x)
ADDLvl2TL(m_pwaIndices[2], count[2], count2[2], ucNumLineWarp);
else if ((TERRAIN_PATCHSIZE - 4) == x)
ADDLvl2TR(m_pwaIndices[2], count[2], count2[2], ucNumLineWarp);
else
ADDLvl2T(m_pwaIndices[2], count[2], count2[2], ucNumLineWarp);
}
else if ((TERRAIN_PATCHSIZE - 4) == y)
{
if (0 == x)
ADDLvl2BL(m_pwaIndices[2], count[2], count2[2], ucNumLineWarp);
else if ((TERRAIN_PATCHSIZE - 4) == x)
ADDLvl2BR(m_pwaIndices[2], count[2], count2[2], ucNumLineWarp);
else
ADDLvl2B(m_pwaIndices[2], count[2], count2[2], ucNumLineWarp);
}
else if (0 == y%4)
{
if (0 == x)
ADDLvl2L(m_pwaIndices[2], count[2], count2[2], ucNumLineWarp);
else if ((TERRAIN_PATCHSIZE - 4) == x)
ADDLvl2R(m_pwaIndices[2], count[2], count2[2], ucNumLineWarp);
else
ADDLvl2M(m_pwaIndices[2], count[2], count2[2], ucNumLineWarp);
}
count2[2] += 4;
}
}
if (y < TERRAIN_PATCHSIZE-1)
{
m_pwaIndices[0][(count[0])++] = (WORD) (count2[0]+ucNumLineWarp);
m_pwaIndices[0][(count[0])++] = (WORD) (count2[0]+ucNumLineWarp);
count2[0] += ucNumLineWarp;
if (0 == y%2)
count2[1] += 2;
if (0 == y%4)
count2[2] += 4;
}
}
for (uci = 0; uci < TERRAINPATCH_LODMAX; ++uci)
{
m_wNumIndices[uci] = count[uci];
if( !m_IndexBuffer[uci].Lock((void **) &pIndices) )
TraceError("CMapOutdoor::SetIndexBuffer() IndexBuffer Unlock Error");
memcpy(pIndices, m_pwaIndices[uci], count[uci] * sizeof(WORD));
m_IndexBuffer[uci].Unlock();
delete [] m_pwaIndices[uci];
m_pwaIndices[uci] = NULL;
}
#endif
}
void CMapOutdoor::ADDLvl1TL(WORD * pIndices, WORD & rwCount, const WORD & c_rwCurCount, const BYTE & c_rucNumLineWarp)
{
pIndices[rwCount++] = c_rwCurCount;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 2;
pIndices[rwCount++] = c_rwCurCount + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + 2;
pIndices[rwCount++] = c_rwCurCount + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + 1;
pIndices[rwCount++] = c_rwCurCount;
}
void CMapOutdoor::ADDLvl1T(WORD * pIndices, WORD & rwCount, const WORD & c_rwCurCount, const BYTE & c_rucNumLineWarp)
{
pIndices[rwCount++] = c_rwCurCount;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 2;
pIndices[rwCount++] = c_rwCurCount + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + 2;
pIndices[rwCount++] = c_rwCurCount + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + 1;
pIndices[rwCount++] = c_rwCurCount;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
}
void CMapOutdoor::ADDLvl1TR(WORD * pIndices, WORD & rwCount, const WORD & c_rwCurCount, const BYTE & c_rucNumLineWarp)
{
pIndices[rwCount++] = c_rwCurCount;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 2;
pIndices[rwCount++] = c_rwCurCount + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + 2;
pIndices[rwCount++] = c_rwCurCount + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + 1;
pIndices[rwCount++] = c_rwCurCount;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
}
void CMapOutdoor::ADDLvl1L(WORD * pIndices, WORD & rwCount, const WORD & c_rwCurCount, const BYTE & c_rucNumLineWarp)
{
pIndices[rwCount++] = c_rwCurCount;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 2;
pIndices[rwCount++] = c_rwCurCount + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + 2;
pIndices[rwCount++] = c_rwCurCount;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
}
void CMapOutdoor::ADDLvl1R(WORD * pIndices, WORD & rwCount, const WORD & c_rwCurCount, const BYTE & c_rucNumLineWarp)
{
pIndices[rwCount++] = c_rwCurCount;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 2;
pIndices[rwCount++] = c_rwCurCount + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + 2;
pIndices[rwCount++] = c_rwCurCount;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
}
void CMapOutdoor::ADDLvl1BL(WORD * pIndices, WORD & rwCount, const WORD & c_rwCurCount, const BYTE & c_rucNumLineWarp)
{
pIndices[rwCount++] = c_rwCurCount;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 2;
pIndices[rwCount++] = c_rwCurCount + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + 2;
pIndices[rwCount++] = c_rwCurCount;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
}
void CMapOutdoor::ADDLvl1B(WORD * pIndices, WORD & rwCount, const WORD & c_rwCurCount, const BYTE & c_rucNumLineWarp)
{
pIndices[rwCount++] = c_rwCurCount;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 2;
pIndices[rwCount++] = c_rwCurCount + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + 2;
pIndices[rwCount++] = c_rwCurCount;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
}
void CMapOutdoor::ADDLvl1BR(WORD * pIndices, WORD & rwCount, const WORD & c_rwCurCount, const BYTE & c_rucNumLineWarp)
{
pIndices[rwCount++] = c_rwCurCount;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 2;
pIndices[rwCount++] = c_rwCurCount + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
pIndices[rwCount++] = c_rwCurCount + 2;
pIndices[rwCount++] = c_rwCurCount;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp + 1;
}
void CMapOutdoor::ADDLvl1M(WORD * pIndices, WORD & rwCount, const WORD & c_rwCurCount, const BYTE & c_rucNumLineWarp)
{
pIndices[rwCount++] = c_rwCurCount;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2;
pIndices[rwCount++] = c_rwCurCount + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 2;
pIndices[rwCount++] = c_rwCurCount + 2;
}
void CMapOutdoor::ADDLvl2TL(WORD * pIndices, WORD & rwCount, const WORD & c_rwCurCount, const BYTE & c_rucNumLineWarp)
{
ADDLvl1TL(pIndices, rwCount, c_rwCurCount, c_rucNumLineWarp);
ADDLvl1T(pIndices, rwCount, c_rwCurCount + 2, c_rucNumLineWarp);
ADDLvl1L(pIndices, rwCount, c_rwCurCount + c_rucNumLineWarp * 2, c_rucNumLineWarp);
ADDLvl1M(pIndices, rwCount, c_rwCurCount + c_rucNumLineWarp * 2 + 2, c_rucNumLineWarp);
}
void CMapOutdoor::ADDLvl2T(WORD * pIndices, WORD & rwCount, const WORD & c_rwCurCount, const BYTE & c_rucNumLineWarp)
{
ADDLvl1T(pIndices, rwCount, c_rwCurCount, c_rucNumLineWarp);
ADDLvl1T(pIndices, rwCount, c_rwCurCount + 2, c_rucNumLineWarp);
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 4;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 4;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 4 + 4;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 4 + 4;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 4;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 2;
}
void CMapOutdoor::ADDLvl2TR(WORD * pIndices, WORD & rwCount, const WORD & c_rwCurCount, const BYTE & c_rucNumLineWarp)
{
ADDLvl1T(pIndices, rwCount, c_rwCurCount, c_rucNumLineWarp);
ADDLvl1TR(pIndices, rwCount, c_rwCurCount + 2, c_rucNumLineWarp);
ADDLvl1M(pIndices, rwCount, c_rwCurCount + c_rucNumLineWarp * 2, c_rucNumLineWarp);
ADDLvl1R(pIndices, rwCount, c_rwCurCount + c_rucNumLineWarp * 2 + 2, c_rucNumLineWarp);
}
void CMapOutdoor::ADDLvl2L(WORD * pIndices, WORD & rwCount, const WORD & c_rwCurCount, const BYTE & c_rucNumLineWarp)
{
ADDLvl1L(pIndices, rwCount, c_rwCurCount, c_rucNumLineWarp);
ADDLvl1L(pIndices, rwCount, c_rwCurCount + c_rucNumLineWarp * 2, c_rucNumLineWarp);
pIndices[rwCount++] = c_rwCurCount + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 2;
pIndices[rwCount++] = c_rwCurCount + 4;
pIndices[rwCount++] = c_rwCurCount + 4;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 4 + 4;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 4 + 4;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 4 + 2;
}
void CMapOutdoor::ADDLvl2R(WORD * pIndices, WORD & rwCount, const WORD & c_rwCurCount, const BYTE & c_rucNumLineWarp)
{
ADDLvl1R(pIndices, rwCount, c_rwCurCount + 2, c_rucNumLineWarp);
ADDLvl1R(pIndices, rwCount, c_rwCurCount + c_rucNumLineWarp * 2 + 2, c_rucNumLineWarp);
pIndices[rwCount++] = c_rwCurCount + 2;
pIndices[rwCount++] = c_rwCurCount;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 2;
pIndices[rwCount++] = c_rwCurCount;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 4;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 4;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 4 + 2;
}
void CMapOutdoor::ADDLvl2BL(WORD * pIndices, WORD & rwCount, const WORD & c_rwCurCount, const BYTE & c_rucNumLineWarp)
{
ADDLvl1L(pIndices, rwCount, c_rwCurCount, c_rucNumLineWarp);
ADDLvl1M(pIndices, rwCount, c_rwCurCount + 2, c_rucNumLineWarp);
ADDLvl1BL(pIndices, rwCount, c_rwCurCount + c_rucNumLineWarp * 2, c_rucNumLineWarp);
ADDLvl1B(pIndices, rwCount, c_rwCurCount + c_rucNumLineWarp * 2 + 2, c_rucNumLineWarp);
}
void CMapOutdoor::ADDLvl2B(WORD * pIndices, WORD & rwCount, const WORD & c_rwCurCount, const BYTE & c_rucNumLineWarp)
{
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 2;
pIndices[rwCount++] = c_rwCurCount;
pIndices[rwCount++] = c_rwCurCount;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 2;
pIndices[rwCount++] = c_rwCurCount + 4;
pIndices[rwCount++] = c_rwCurCount + 4;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 2;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 2 + 4;
ADDLvl1B(pIndices, rwCount, c_rwCurCount + c_rucNumLineWarp * 2, c_rucNumLineWarp);
ADDLvl1B(pIndices, rwCount, c_rwCurCount + c_rucNumLineWarp * 2 + 2, c_rucNumLineWarp);
}
void CMapOutdoor::ADDLvl2BR(WORD * pIndices, WORD & rwCount, const WORD & c_rwCurCount, const BYTE & c_rucNumLineWarp)
{
ADDLvl1M(pIndices, rwCount, c_rwCurCount, c_rucNumLineWarp);
ADDLvl1R(pIndices, rwCount, c_rwCurCount + 2, c_rucNumLineWarp);
ADDLvl1B(pIndices, rwCount, c_rwCurCount + c_rucNumLineWarp * 2, c_rucNumLineWarp);
ADDLvl1BR(pIndices, rwCount, c_rwCurCount + c_rucNumLineWarp * 2 + 2, c_rucNumLineWarp);
}
void CMapOutdoor::ADDLvl2M(WORD * pIndices, WORD & rwCount, const WORD & c_rwCurCount, const BYTE & c_rucNumLineWarp)
{
pIndices[rwCount++] = c_rwCurCount;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 4;
pIndices[rwCount++] = c_rwCurCount + 4;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 4;
pIndices[rwCount++] = c_rwCurCount + c_rucNumLineWarp * 4 + 4;
pIndices[rwCount++] = c_rwCurCount + 4;
}