/* init */
Xray.wall_type = 0;
Yray.wall_type = 0;
+ Xray.distance = 0;
+ Yray.distance = 0;
/* TODO: force texture size to be a power of 2 and then have a macro for
* the bits needed to do * and / */
while(y/TEXTURE_SIZE >= 0 && y/TEXTURE_SIZE < 10 && x/TEXTURE_SIZE >= 0 && x/TEXTURE_SIZE < 10) {
if(map[9-(y/TEXTURE_SIZE)][x/TEXTURE_SIZE] != 0) {
- /* TODO: actual fill out properly lol */
Xray.wall_type = map[9-(y/TEXTURE_SIZE)][x/TEXTURE_SIZE];
- setColour(0xff,0xff,0);
+ /* Debug */
+ /* setColour(0xff,0xff,0);
drawLine2(PlayerC->x, PlayerC->y, x, y);
- setColour(0,0xff,0xff);
+ setColour(0,0xff,0xff); */
+
+ Xray.distance = fabs((y-PlayerC->y)/bam_sin(bearing));
break;
}
y+=dy;
while(y/TEXTURE_SIZE >= 0 && y/TEXTURE_SIZE < 10 && x/TEXTURE_SIZE >= 0 && x/TEXTURE_SIZE < 10) {
if(map[9-(y/TEXTURE_SIZE)][x/TEXTURE_SIZE] != 0) {
- /* TODO: actual fill out properly lol */
Yray.wall_type = map[9-(y/TEXTURE_SIZE)][x/TEXTURE_SIZE];
- setColour(0xff,0xff,0);
+ /* Debug */
+ /* setColour(0xff,0xff,0);
drawLine2(PlayerC->x, PlayerC->y, x, y);
- setColour(0,0xff,0xff);
+ setColour(0,0xff,0xff); */
+
+ Yray.distance = fabs((x-PlayerC->x)/bam_cos(bearing));
break;
}
y+=dy;
}
}
- if(Xray.wall_type != 0) {
- return &Xray;
- }
- if(Yray.wall_type != 0) {
+ if(Xray.wall_type !=0 && Yray.wall_type != 0) {
+ if (Xray.distance <= Yray.distance) {
+ return &Xray;
+ } else {
+ return &Yray;
+ }
+ } else if(Xray.wall_type != 0) {
return &Xray;
+ } else if(Yray.wall_type != 0) {
+ return &Yray;
}
return NULL;
void game_loop(void) {
int scanVector = Player.bearing+(FOV/2);
int i;
+ ray *Ray;
/* debug */
int x, y;
for (i=0;i<SCREEN_WIDTH;++i) {
int newVector = scanVector - i*FOV/SCREEN_WIDTH;
/* Debug */
- drawLine2(Player.x, Player.y, Player.x+128*bam_cos(newVector), Player.y+128*bam_sin(newVector));
- if(castRay(&Player, newVector) != NULL) {
- drawLine(i, 20, 180);
+ /*drawLine2(Player.x, Player.y, Player.x+128*bam_cos(newVector), Player.y+128*bam_sin(newVector));*/
+ if((Ray = castRay(&Player, newVector)) != NULL) {
+ drawLine(i, TEXTURE_SIZE*((SCREEN_WIDTH/2)/bam_tan(FOV/2))/Ray->distance);
}
- //scanVector-=FOV/SCREEN_WIDTH;
}
/* Debug */
SDL_Renderer *render;
int w, h;
-int drawLine(int x, int y, int y2) {
- return SDL_RenderDrawLine(render, x, y, x, y2);
-}
int drawLine2(int x, int y, int x2, int y2) {
return SDL_RenderDrawLine(render, x, h-y, x2, h-y2);
}
+int drawLine(int x, int height) {
+ int startY = (SCREEN_HEIGHT/2)-(height/2);
+ return drawLine2(x, startY, x, startY+height);
+}
int setColour(unsigned char r, unsigned char g, unsigned char b) {
return SDL_SetRenderDrawColor(render, r,g,b, 255);
SDL_Event event;
int quit = 0;
+ (void)argc;
+ (void)argv;
+
game_init();
/* SDL shit */