mirror of
https://git.coom.tech/drummyfish/raycastlib.git
synced 2024-11-23 20:49:57 +01:00
104 lines
2.3 KiB
C
104 lines
2.3 KiB
C
#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;
|
|
}
|