Separate floor/ceil

This commit is contained in:
Miloslav Číž 2018-09-05 11:35:33 +02:00
parent 864a83182f
commit eba49eb12a

View file

@ -422,23 +422,6 @@ inline uint8_t addIntensity(uint8_t color, int intensity)
return rgbToIndex(r,g,b);
}
class Level
{
public:
int16_t getHeight(int16_t x, int16_t y)
{
if (x > 12 || y > 12)
return max(x,y) - 10;
if (y < 5 && y > 0)
{
return y > 2 ? x : -x;
}
return (x < 0 || y < 0 || x > 9 || y > 9) ? 4 : 0;
}
};
class Sprite
{
public:
@ -453,9 +436,9 @@ public:
Character()
{
mCamera.position.x = 2468;//UNITS_PER_SQUARE * 1;
mCamera.position.y = 6736;//UNITS_PER_SQUARE * 5;
mCamera.direction = -100;//200;
mCamera.position.x = 961;//UNITS_PER_SQUARE * 1;
mCamera.position.y = 7381;//UNITS_PER_SQUARE * 5;
mCamera.direction = -575;//200;
mCamera.fovAngle = UNITS_PER_SQUARE / 4;
mCamera.height = UNITS_PER_SQUARE / 2;
mCamera.resolution.x = 110 / SUBSAMPLE;
@ -464,12 +447,27 @@ public:
};
Character player;
Level level;
Sprite sprites[SPRITES];
Unit heightFunc(int16_t x, int16_t y)
Unit floorHeight(int16_t x, int16_t y)
{
return level.getHeight(x,y) * UNITS_PER_SQUARE / 4;
if (x > 12 || y > 12)
return (max(x,y) - 10) * UNITS_PER_SQUARE / 2;
if (y < 5 && y > 0)
{
return (y > 2 ? x : -x) * UNITS_PER_SQUARE / 2;
}
return ((x < 0 || y < 0 || x > 9 || y > 9) ? 4 : 0) * UNITS_PER_SQUARE / 2;
}
Unit ceilingHeight(int16_t x, int16_t y)
{
if (x > 12 || y > 12)
return (10 + (11 - max(x,y))) * UNITS_PER_SQUARE / 2;
return 10 * UNITS_PER_SQUARE;
}
inline void pixelFunc(PixelInfo pixel)
@ -497,7 +495,7 @@ inline void pixelFunc(PixelInfo pixel)
if (intensity < 0)
intensity = 0;
c = sampleImage(image,pixel.hit.textureCoord,pixel.textureCoordY);
c = sampleImage(image2,pixel.hit.textureCoord,pixel.textureCoordY);
c = addIntensity(c,intensity - 3);
}
else
@ -523,7 +521,7 @@ void draw()
c.maxHits = 16;
c.maxSteps = 16;
render(player.mCamera,heightFunc,pixelFunc,c);
render(player.mCamera,floorHeight,ceilingHeight,pixelFunc,c);
Unit previousDepth;
@ -544,6 +542,15 @@ void draw()
previousDepth = pos.depth;
}
p.display.setColor(rgbToIndex(7,7,3));
p.display.setCursor(1,1);
p.display.print(player.mCamera.position.x);
p.display.print(" ");
p.display.print(player.mCamera.position.y);
p.display.print(" ");
p.display.print(player.mCamera.direction);
}
int main()
@ -641,7 +648,7 @@ int main()
player.mCamera.direction += addition * step2;
player.mCamera.height =
max(heightFunc(player.mCamera.position.x / UNITS_PER_SQUARE,player.mCamera.position.y / UNITS_PER_SQUARE) + UNITS_PER_SQUARE / 2,player.mCamera.height);
max(floorHeight(player.mCamera.position.x / UNITS_PER_SQUARE,player.mCamera.position.y / UNITS_PER_SQUARE) + UNITS_PER_SQUARE / 2,player.mCamera.height);
}
}