Diminish sprites
This commit is contained in:
parent
d15aa7f60b
commit
6322904d6d
3 changed files with 10 additions and 7 deletions
11
demo1.cpp
11
demo1.cpp
|
@ -988,6 +988,11 @@ RCL_Unit ceilingHeightAt(int16_t x, int16_t y)
|
||||||
|
|
||||||
#undef withinMapReturn
|
#undef withinMapReturn
|
||||||
|
|
||||||
|
inline int16_t distanceToIntensity(RCL_Unit distance)
|
||||||
|
{
|
||||||
|
return 8 - distance / (RCL_UNITS_PER_SQUARE / 2);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Function for drawing a single pixel (like fragment shader). Bottleneck =>
|
Function for drawing a single pixel (like fragment shader). Bottleneck =>
|
||||||
should be as fast as possible.
|
should be as fast as possible.
|
||||||
|
@ -1001,7 +1006,7 @@ int16_t intensity;
|
||||||
|
|
||||||
uint8_t color;
|
uint8_t color;
|
||||||
|
|
||||||
intensity = 8 - pixel->depth / (RCL_UNITS_PER_SQUARE / 2);
|
intensity = distanceToIntensity(pixel->depth);
|
||||||
|
|
||||||
if (pixel->isWall)
|
if (pixel->isWall)
|
||||||
{
|
{
|
||||||
|
@ -1018,8 +1023,6 @@ int16_t intensity;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
intensity = 8 - pixel->depth / (RCL_UNITS_PER_SQUARE / 2);
|
|
||||||
|
|
||||||
color = pixel->isFloor ?
|
color = pixel->isFloor ?
|
||||||
addIntensity(40,intensity):
|
addIntensity(40,intensity):
|
||||||
addIntensity(18,intensity);
|
addIntensity(18,intensity);
|
||||||
|
@ -1057,7 +1060,7 @@ void draw()
|
||||||
|
|
||||||
drawSpriteSquare(image,pos.position.x * SUBSAMPLE,
|
drawSpriteSquare(image,pos.position.x * SUBSAMPLE,
|
||||||
pos.position.y, pos.depth,
|
pos.position.y, pos.depth,
|
||||||
RCL_perspectiveScale(sprites[i].mPixelSize,pos.depth));
|
RCL_perspectiveScale(sprites[i].mPixelSize,pos.depth),distanceToIntensity(pos.depth));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* trick: sort the sprites by distance with bubble sort as we draw - the
|
/* trick: sort the sprites by distance with bubble sort as we draw - the
|
||||||
|
|
|
@ -1035,7 +1035,7 @@ void draw()
|
||||||
|
|
||||||
drawSpriteSquare(spritePlasma,pos.position.x * SUBSAMPLE,
|
drawSpriteSquare(spritePlasma,pos.position.x * SUBSAMPLE,
|
||||||
pos.position.y,pos.depth,
|
pos.position.y,pos.depth,
|
||||||
RCL_perspectiveScale(64,pos.depth));
|
RCL_perspectiveScale(64,pos.depth),1);
|
||||||
}
|
}
|
||||||
|
|
||||||
drawImage(imageBar,0,INFO_BAR_START - 3);
|
drawImage(imageBar,0,INFO_BAR_START - 3);
|
||||||
|
|
|
@ -236,7 +236,7 @@ inline uint8_t sampleImage(const unsigned char *image, RCL_Unit x, RCL_Unit y)
|
||||||
Draws a scaled sprite on screen in an optimized way. The sprite has to be
|
Draws a scaled sprite on screen in an optimized way. The sprite has to be
|
||||||
square in resolution.
|
square in resolution.
|
||||||
*/
|
*/
|
||||||
void inline drawSpriteSquare(const unsigned char *sprite, int16_t x, int16_t y, RCL_Unit depth, int16_t size)
|
void inline drawSpriteSquare(const unsigned char *sprite, int16_t x, int16_t y, RCL_Unit depth, int16_t size, int16_t intensity)
|
||||||
{
|
{
|
||||||
if (size < 0 || size > 200 || // let's not mess up with the incoming array
|
if (size < 0 || size > 200 || // let's not mess up with the incoming array
|
||||||
sprite[0] != sprite[1]) // only draw square sprites
|
sprite[0] != sprite[1]) // only draw square sprites
|
||||||
|
@ -271,7 +271,7 @@ void inline drawSpriteSquare(const unsigned char *sprite, int16_t x, int16_t y,
|
||||||
c = sprite[columnLocation + samplingIndices[j]];
|
c = sprite[columnLocation + samplingIndices[j]];
|
||||||
|
|
||||||
if (c != TRANSPARENT_COLOR)
|
if (c != TRANSPARENT_COLOR)
|
||||||
pokitto.display.drawPixel(xPos,y + j,c);
|
pokitto.display.drawPixel(xPos,y + j,addIntensity(c,intensity));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue