mirror of
https://git.coom.tech/drummyfish/raycastlib.git
synced 2024-11-20 20:19:57 +01:00
Add terminal test
This commit is contained in:
parent
2467bbbc62
commit
759c525962
2 changed files with 106 additions and 5 deletions
|
@ -1071,14 +1071,11 @@ void _columnFunctionSimple(HitResult *hits, uint16_t hitCount, uint16_t x,
|
|||
|
||||
int16_t wallHeightWorld = _floorFunction(hit.square.x,hit.square.y);
|
||||
|
||||
wallHeightWorld = wallHeightWorld != 0 ? wallHeightWorld : 1;
|
||||
// ^ prevent division by zero
|
||||
|
||||
wallHeightScreen = perspectiveScale((wallHeightWorld *
|
||||
_camera.resolution.y) / UNITS_PER_SQUARE,dist);
|
||||
|
||||
int16_t normalizedWallHeight =
|
||||
(UNITS_PER_SQUARE * wallHeightScreen) / wallHeightWorld;
|
||||
int16_t normalizedWallHeight = wallHeightWorld != 0 ?
|
||||
((UNITS_PER_SQUARE * wallHeightScreen) / wallHeightWorld) : 0;
|
||||
|
||||
heightOffset = perspectiveScale(_cameraHeightScreen,dist);
|
||||
|
||||
|
|
104
testTerminal.c
Normal file
104
testTerminal.c
Normal file
|
@ -0,0 +1,104 @@
|
|||
#include <stdio.h>
|
||||
#include "raycastlib.h"
|
||||
#include <unistd.h>
|
||||
|
||||
#define LEVEL_W 20
|
||||
#define LEVEL_H 15
|
||||
|
||||
#define SCREEN_W 60
|
||||
#define SCREEN_H 20
|
||||
|
||||
char pixels[SCREEN_W * SCREEN_H];
|
||||
Camera camera;
|
||||
|
||||
int8_t level[LEVEL_W * LEVEL_H] =
|
||||
{
|
||||
/* 11 13 15 17 19
|
||||
0 1 2 3 4 5 6 7 8 9 10 12 14 16 18 */
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, // 0
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, // 1
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, // 2
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, // 3
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0, // 4
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 5
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 6
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 7
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 8
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 9
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 10
|
||||
0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0, // 11
|
||||
0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0, // 12
|
||||
0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0, // 13
|
||||
0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0 // 14
|
||||
};
|
||||
|
||||
Unit heightAt(int16_t x, int16_t y)
|
||||
{
|
||||
if (x < 0 || x >= SCREEN_W || y < 0 || y >= SCREEN_H)
|
||||
return UNITS_PER_SQUARE * 2;
|
||||
|
||||
return 0;
|
||||
// return level[y * LEVEL_W + x] * UNITS_PER_SQUARE * 2;
|
||||
}
|
||||
|
||||
void pixelFunc(PixelInfo *p)
|
||||
{
|
||||
char c = '.';
|
||||
|
||||
if (p->isWall)
|
||||
{
|
||||
switch (p->hit.direction)
|
||||
{
|
||||
case 0: c = 'X'; break;
|
||||
case 1: c = '#'; break;
|
||||
case 2: c = 'p'; break;
|
||||
case 3:
|
||||
default: c = 'o'; break;
|
||||
}
|
||||
}
|
||||
|
||||
pixels[p->position.y * SCREEN_W + p->position.x] = c;
|
||||
}
|
||||
|
||||
void draw()
|
||||
{
|
||||
for (int i = 0; i < 10; ++i)
|
||||
printf("\n");
|
||||
|
||||
RayConstraints c;
|
||||
|
||||
initRayConstraints(&c);
|
||||
|
||||
c.maxHits = 1;
|
||||
c.maxSteps = 40;
|
||||
c.computeTextureCoords = 0;
|
||||
|
||||
renderSimple(camera,heightAt,0,pixelFunc,0,c);
|
||||
|
||||
for (int j = 0; j < SCREEN_H; ++j)
|
||||
{
|
||||
for (int i = 0; i < SCREEN_W; ++i)
|
||||
printf("%c",pixels[j * SCREEN_W + i]);
|
||||
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
initCamera(&camera);
|
||||
camera.position.x = 2 * UNITS_PER_SQUARE;
|
||||
camera.position.y = 2 * UNITS_PER_SQUARE;
|
||||
camera.direction = -UNITS_PER_SQUARE / 3; //0;//(3 * UNITS_PER_SQUARE) / 4;
|
||||
camera.resolution.x = SCREEN_W;
|
||||
camera.resolution.y = SCREEN_H;
|
||||
|
||||
for (int i = 0; i < 100; ++i)
|
||||
{
|
||||
draw();
|
||||
camera.position.x += 100;
|
||||
usleep(100000);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in a new issue