1
0
Fork 0
mirror of https://git.coom.tech/drummyfish/raycastlib.git synced 2024-11-24 20:59:58 +01:00

Add terminal test

This commit is contained in:
Miloslav Číž 2018-09-15 14:48:01 +02:00
parent 2467bbbc62
commit 759c525962
2 changed files with 106 additions and 5 deletions

View file

@ -1071,14 +1071,11 @@ void _columnFunctionSimple(HitResult *hits, uint16_t hitCount, uint16_t x,
int16_t wallHeightWorld = _floorFunction(hit.square.x,hit.square.y); int16_t wallHeightWorld = _floorFunction(hit.square.x,hit.square.y);
wallHeightWorld = wallHeightWorld != 0 ? wallHeightWorld : 1;
// ^ prevent division by zero
wallHeightScreen = perspectiveScale((wallHeightWorld * wallHeightScreen = perspectiveScale((wallHeightWorld *
_camera.resolution.y) / UNITS_PER_SQUARE,dist); _camera.resolution.y) / UNITS_PER_SQUARE,dist);
int16_t normalizedWallHeight = int16_t normalizedWallHeight = wallHeightWorld != 0 ?
(UNITS_PER_SQUARE * wallHeightScreen) / wallHeightWorld; ((UNITS_PER_SQUARE * wallHeightScreen) / wallHeightWorld) : 0;
heightOffset = perspectiveScale(_cameraHeightScreen,dist); heightOffset = perspectiveScale(_cameraHeightScreen,dist);

104
testTerminal.c Normal file
View 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;
}