Demo3 FPS++

This commit is contained in:
Miloslav Číž 2018-09-24 19:24:35 +02:00
parent 915c9167eb
commit 3533d9eeb4

View file

@ -10,12 +10,14 @@
license: CC0 1.0 license: CC0 1.0
*/ */
#define SUBSAMPLE 1
// redefine player's height // redefine player's height
#define PLAYER_SPEED (RCL_UNITS_PER_SQUARE * 6) #define PLAYER_SPEED (RCL_UNITS_PER_SQUARE * 6)
#define RCL_HORIZONTAL_FOV ((3 * RCL_UNITS_PER_SQUARE) / 10) #define RCL_HORIZONTAL_FOV ((3 * RCL_UNITS_PER_SQUARE) / 10)
#define GRAVITY_ACCELERATION (RCL_UNITS_PER_SQUARE * 2) #define GRAVITY_ACCELERATION (RCL_UNITS_PER_SQUARE * 2)
#define RCL_CAMERA_COLL_HEIGHT_BELOW ((3 * RCL_UNITS_PER_SQUARE) / 2) #define RCL_CAMERA_COLL_HEIGHT_BELOW ((3 * RCL_UNITS_PER_SQUARE) / 2)
#define FPS 40 #define FPS 255
#define HEAD_BOB_HEIGHT 150 #define HEAD_BOB_HEIGHT 150
#define HEAD_BOB_STEP 20 #define HEAD_BOB_STEP 20
@ -63,6 +65,9 @@ int16_t editCounter = 0;
#define SQUARE_COLORS 4 #define SQUARE_COLORS 4
uint8_t squareColors[SQUARE_COLORS]; uint8_t squareColors[SQUARE_COLORS];
unsigned char floorGradient[15];
unsigned char wallGradients[SQUARE_COLORS][15];
#define HEIGHT_PROFILE_LENGTH 256 #define HEIGHT_PROFILE_LENGTH 256
/// Used for terrain generation. /// Used for terrain generation.
@ -466,18 +471,22 @@ inline void pixelFunc(RCL_PixelInfo *pixel)
if (pixel->isWall) if (pixel->isWall)
{ {
color = pixel->hit.square.x != selectedSquare.x || pixel->hit.square.y != selectedSquare.y || (editing && pokitto.frameCount % 2) == 0 ? if (pixel->hit.square.x != selectedSquare.x || pixel->hit.square.y != selectedSquare.y || (editing && pokitto.frameCount % 2) == 0)
squareColors[pixel->hit.type] : 30; {
intensity = pixel->depth / (RCL_UNITS_PER_SQUARE * 3);
intensity += pixel->hit.direction % 2 == 0 ? 2 : 0;
intensity = pixel->depth / (RCL_UNITS_PER_SQUARE * 3); color = wallGradients[pixel->hit.type][RCL_clamp(7 + intensity,0,14)];
intensity += pixel->hit.direction % 2 == 0 ? 2 : 0; }
else
color = 30;
} }
else if (pixel->isFloor) else if (pixel->isFloor)
{ {
color = floorColor;
if (!pixel->isHorizon) if (!pixel->isHorizon)
intensity = pixel->depth / (RCL_UNITS_PER_SQUARE * 3); intensity = pixel->depth / (RCL_UNITS_PER_SQUARE * 4);
color = floorGradient[RCL_clamp(7 + intensity,0,14)];
} }
else else
{ {
@ -490,9 +499,6 @@ inline void pixelFunc(RCL_PixelInfo *pixel)
color = imageBackground[2 + backgroundColumn * 44 + RCL_clamp(pixel->position.y - player.mCamera.shear,0,43)]; color = imageBackground[2 + backgroundColumn * 44 + RCL_clamp(pixel->position.y - player.mCamera.shear,0,43)];
} }
if (intensity != 0)
color = addIntensity(color,intensity);
putSubsampledPixel(pixel->position.x,pixel->position.y,color); putSubsampledPixel(pixel->position.x,pixel->position.y,color);
} }
@ -558,6 +564,11 @@ int main()
squareColors[2] = rgbToIndex(0,7,0); squareColors[2] = rgbToIndex(0,7,0);
squareColors[3] = rgbToIndex(4,4,0); squareColors[3] = rgbToIndex(4,4,0);
initGradient(floorGradient,floorColor);
for (uint8_t i = 0; i < SQUARE_COLORS; ++i)
initGradient(wallGradients[i],squareColors[i]);
player.setPositionSquare(4,5); player.setPositionSquare(4,5);
player.mCamera.height = floorHeightAt(4,5); player.mCamera.height = floorHeightAt(4,5);