SBSPSS/source/level/layerback.cpp

82 lines
2.2 KiB
C++
Raw Normal View History

2001-02-22 15:55:13 +01:00
/*************************/
/*** Shade Layer Class ***/
/*************************/
2001-01-13 18:04:56 +01:00
#include "system\global.h"
#include <DStructs.h>
#include "utils\utils.h"
#include "gfx\prim.h"
#include "LayerTile.h"
2001-01-15 16:22:33 +01:00
#include "LayerBack.h"
2001-01-13 18:04:56 +01:00
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
2001-03-08 00:20:09 +01:00
CLayerBack::CLayerBack(sLayerHdr *Hdr,sTile *TileBank) : CLayerTile(Hdr,TileBank)
2001-01-13 18:04:56 +01:00
{
2001-02-20 20:17:03 +01:00
Data=(sLayerShadeHdr*)MakePtr(Hdr,sizeof(sLayerHdr));
2001-02-20 16:56:16 +01:00
2001-02-20 20:17:03 +01:00
ASSERT(Data->Count<=LAYER_SHADE_RGB_MAX);
BandCount=Data->Count-1;
2001-01-13 18:04:56 +01:00
}
/*****************************************************************************/
2001-01-15 16:22:33 +01:00
CLayerBack::~CLayerBack()
2001-01-13 18:04:56 +01:00
{
}
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
2001-02-22 15:55:13 +01:00
void CLayerBack::init(DVECTOR &MapPos,int Shift)
2001-01-13 18:04:56 +01:00
{
2001-02-20 20:17:03 +01:00
MapXYShift=Shift;
2001-02-22 15:55:13 +01:00
BandHeight=(MapHeight*16)/(BandCount);
if (BandHeight>=512) BandHeight=511;
2001-02-20 20:17:03 +01:00
for (int i=0; i<BandCount; i++)
{
SetPolyG4(&Band[i]);
setRGB0(&Band[i],Data->Data[i+0].RGB[0],Data->Data[i+0].RGB[1],Data->Data[i+0].RGB[2]);
setRGB1(&Band[i],Data->Data[i+0].RGB[0],Data->Data[i+0].RGB[1],Data->Data[i+0].RGB[2]);
setRGB2(&Band[i],Data->Data[i+1].RGB[0],Data->Data[i+1].RGB[1],Data->Data[i+1].RGB[2]);
setRGB3(&Band[i],Data->Data[i+1].RGB[0],Data->Data[i+1].RGB[1],Data->Data[i+1].RGB[2]);
}
2001-01-13 18:04:56 +01:00
}
/*****************************************************************************/
2001-01-15 16:22:33 +01:00
void CLayerBack::shutdown()
2001-01-13 18:04:56 +01:00
{
}
/*****************************************************************************/
2001-02-22 15:55:13 +01:00
extern DVECTOR TileMapOfs;
2001-01-15 16:22:33 +01:00
void CLayerBack::think(DVECTOR &MapPos)
2001-02-20 16:56:16 +01:00
{
2001-02-20 20:17:03 +01:00
YOfs=MapPos.vy>>MapXYShift;
2001-02-22 15:55:13 +01:00
YOfs+=TileMapOfs.vy;
2001-01-13 18:04:56 +01:00
}
/*****************************************************************************/
2001-01-15 16:22:33 +01:00
void CLayerBack::render()
2001-01-13 18:04:56 +01:00
{
2001-02-20 20:17:03 +01:00
sOT *ThisOT=OtPtr+(MAX_OT-1);
int ThisY=-YOfs;
for (int i=0; i<BandCount; i++)
{
setXYWH(&Band[i],0,ThisY,512,BandHeight);
addPrim(ThisOT,&Band[i]);
ThisY+=BandHeight;
}
2001-02-20 16:56:16 +01:00
2001-01-13 18:04:56 +01:00
}