Adds raycasting debug
Next step is to actually implement the Bresenham Line Algorithm to make line of sight and object shadowing a reality.
This commit is contained in:
parent
68cf24ddf8
commit
353b4ed1c5
|
@ -185,6 +185,7 @@ target_link_libraries(breakhack
|
||||||
${SDL2_IMAGE_LIBRARY}
|
${SDL2_IMAGE_LIBRARY}
|
||||||
${SDL2_TTF_LIBRARY}
|
${SDL2_TTF_LIBRARY}
|
||||||
${SDL2_MIXER_LIBRARY}
|
${SDL2_MIXER_LIBRARY}
|
||||||
|
m # We need the math library
|
||||||
)
|
)
|
||||||
|
|
||||||
if (NOT PHYSFS_FOUND)
|
if (NOT PHYSFS_FOUND)
|
||||||
|
|
|
@ -573,6 +573,10 @@ run_game_render(void)
|
||||||
}
|
}
|
||||||
pointer_render(gPointer, gCamera);
|
pointer_render(gPointer, gCamera);
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
roommatrix_render_debug(gRoomMatrix, gCamera);
|
||||||
|
#endif
|
||||||
|
|
||||||
SDL_RenderPresent(gRenderer);
|
SDL_RenderPresent(gRenderer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <math.h>
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
#include "roommatrix.h"
|
#include "roommatrix.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
@ -265,6 +266,51 @@ roommatrix_render_lightmap(RoomMatrix *matrix, Camera *cam)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
static void
|
||||||
|
draw_raycasts_from(int x, int y, Camera *cam)
|
||||||
|
{
|
||||||
|
double length = 4*32;
|
||||||
|
double x1 = x * 32 + 16;
|
||||||
|
double y1 = y * 32 + 16;
|
||||||
|
double angle = 0;
|
||||||
|
|
||||||
|
while (angle < 360) {
|
||||||
|
double x2 = x1 + length * cos(angle);
|
||||||
|
double y2 = y1 + length * sin(angle);
|
||||||
|
//printf("Drawing line: %fx%f -> %fx%f\n", x1, y1, x2, y2);
|
||||||
|
SDL_RenderDrawLine(cam->renderer,
|
||||||
|
(int) x1,
|
||||||
|
(int) y1,
|
||||||
|
(int) x2,
|
||||||
|
(int) y2);
|
||||||
|
angle += 7.5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
roommatrix_render_debug(RoomMatrix *rm, Camera *cam)
|
||||||
|
{
|
||||||
|
SDL_SetRenderDrawColor(cam->renderer, 0, 0, 0, SDL_ALPHA_OPAQUE);
|
||||||
|
for (int i = 0; i < MAP_ROOM_HEIGHT; ++i) {
|
||||||
|
SDL_RenderDrawLine(cam->renderer, 0, i*32, MAP_ROOM_WIDTH*32, i*32);
|
||||||
|
}
|
||||||
|
for (int i = 0; i < MAP_ROOM_WIDTH; ++i) {
|
||||||
|
SDL_RenderDrawLine(cam->renderer, i*32, 0, i*32, MAP_ROOM_HEIGHT*32);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Draw raycasts
|
||||||
|
SDL_SetRenderDrawColor(cam->renderer, 255, 255, 255, 100);
|
||||||
|
for (int i = 0; i < MAP_ROOM_WIDTH; ++i) {
|
||||||
|
for (int j = 0; j < MAP_ROOM_HEIGHT; ++j) {
|
||||||
|
if (rm->spaces[i][j].lightsource) {
|
||||||
|
draw_raycasts_from(i, j, cam);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void roommatrix_destroy(RoomMatrix *m)
|
void roommatrix_destroy(RoomMatrix *m)
|
||||||
{
|
{
|
||||||
// Clear the list but don't destroy the items
|
// Clear the list but don't destroy the items
|
||||||
|
|
|
@ -39,7 +39,7 @@ typedef struct {
|
||||||
bool occupied;
|
bool occupied;
|
||||||
bool lethal;
|
bool lethal;
|
||||||
bool lightsource;
|
bool lightsource;
|
||||||
unsigned int light;
|
int light;
|
||||||
Monster *monster;
|
Monster *monster;
|
||||||
Player *player;
|
Player *player;
|
||||||
LinkedList *items;
|
LinkedList *items;
|
||||||
|
@ -67,6 +67,10 @@ void roommatrix_render_mouse_square(RoomMatrix*, Camera*);
|
||||||
|
|
||||||
void roommatrix_render_lightmap(RoomMatrix*, Camera*);
|
void roommatrix_render_lightmap(RoomMatrix*, Camera*);
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
void roommatrix_render_debug(RoomMatrix*, Camera*);
|
||||||
|
#endif
|
||||||
|
|
||||||
void roommatrix_destroy(RoomMatrix*);
|
void roommatrix_destroy(RoomMatrix*);
|
||||||
|
|
||||||
#endif // ROOMMATRIX_H_
|
#endif // ROOMMATRIX_H_
|
||||||
|
|
Loading…
Reference in New Issue