From eba49eb12a1a7f3a4fce8d64427d5aeaefa7d4d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miloslav=20=C4=8C=C3=AD=C5=BE?= Date: Wed, 5 Sep 2018 11:35:33 +0200 Subject: [PATCH] Separate floor/ceil --- game.cpp | 59 +++++++++++++++++++++++++++++++------------------------- 1 file changed, 33 insertions(+), 26 deletions(-) diff --git a/game.cpp b/game.cpp index 00c21ea..772403b 100644 --- a/game.cpp +++ b/game.cpp @@ -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); } }