From 799f1a33c6b88dbbf6d7760a43115ac8660835c7 Mon Sep 17 00:00:00 2001 From: Miguel Angel Astor Romero Date: Thu, 6 Mar 2014 21:34:09 -0430 Subject: [PATCH] Field of view calculated with libfov. --- Makefile | 2 +- lib/libfov.a | Bin 16870 -> 17898 bytes src/in_game.c | 131 ++++++++++++++++++++++++++++++++++---------------- 3 files changed, 90 insertions(+), 43 deletions(-) diff --git a/Makefile b/Makefile index 2fb9cbb..91ee777 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ OBJECTS = obj/main.o obj/game_state.o obj/in_game.o obj/map.o TARGET = bin/cyjam CFLAGS = -Wall -I./include -std=c99 LDFLAGS = -L./lib -LDLIBS = -lm -lfov -lncursesw +LDLIBS = -lfov -lncursesw -lm all: CFLAGS += -O3 all: $(TARGET) diff --git a/lib/libfov.a b/lib/libfov.a index c66ba879dc64ab05f4d0024056ce6bc24e61d49f..088e3cf7abf2bdfb4efa0deb9e93049221da4490 100644 GIT binary patch literal 17898 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 VpJ&|7_&y`qQEERI_LI=f_`k8H2%`W1 literal 16870 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 #include #include +#include #include "constants.h" #include "in_game.h" @@ -16,6 +17,7 @@ typedef struct PLAYER { unsigned short y; } player_t; +static bool **vis; static bool ** wmap; static bool w_mov = FALSE; static bool uK, dK, lK, rK; @@ -24,6 +26,7 @@ static player_t player; static map_cell_t ** map; game_obj_t objs[MAX_OBJECTS]; static int mW, mH, nO; +fov_settings_type fov_settings; void input(); gsname_t update(); @@ -33,6 +36,8 @@ void setPlayerStart(); void initObjects(); void drawNeon(int, int); void drawBar(int, int); +void apply(void *, int, int, int, int, void *); +bool opaque(void *, int, int); void initInGameState( gs_t * gs) { int i, j; @@ -55,6 +60,14 @@ void initInGameState( gs_t * gs) { } } + vis = ( bool ** ) malloc ( sizeof ( bool * ) * MAX_MAP_SIZE); + for ( i = 0; i < MAX_MAP_SIZE; ++i ) { + vis[ i ] = ( bool * ) calloc ( MAX_MAP_SIZE, sizeof ( bool ) ); + for(j = 0; j < MAX_MAP_SIZE; ++j){ + vis[i][j] = TRUE; + } + } + initObjects(); errcode_t rc = readMapData("map_file.map", &map, &mW, &mH); @@ -71,6 +84,10 @@ void initInGameState( gs_t * gs) { } setPlayerStart(); + + fov_settings_init(&fov_settings); + fov_settings_set_opacity_test_function(&fov_settings, opaque); + fov_settings_set_apply_lighting_function(&fov_settings, apply); } void input(){ @@ -137,6 +154,8 @@ void render(int w, int h){ ioff = (w - 28) / 2; joff = (h - 2) / 2; + fov_circle(&fov_settings, &map, NULL, player.x, player.y, (MAX_MAP_SIZE / 2) - 1); + for(i = 27; i < w - 1; i++){ for(j = 1; j < h - 1; j++){ move(j, i); @@ -147,56 +166,61 @@ void render(int w, int h){ if( di < 0 || di >= mW || dj < 0 || dj >= mH ){ printw(" "); }else{ - switch(map[dj][di].f){ - case WATER: - attron(COLOR_PAIR(DW_COLOR)); - if(w_mov) - wmap[dj][di] = !wmap[dj][di]; - if(wmap[dj][di]) - printw("\u2248"); - else - printw("~"); - break; + if(vis[dj][di]){ + switch(map[dj][di].f){ + case WATER: + attron(COLOR_PAIR(DW_COLOR)); + if(w_mov) + wmap[dj][di] = !wmap[dj][di]; + if(wmap[dj][di]) + printw("\u2248"); + else + printw("~"); + break; - case VOID: - attron(COLOR_PAIR(MN_COLOR)); - printw(" "); - break; + case VOID: + attron(COLOR_PAIR(MN_COLOR)); + printw(" "); + break; - case EMPTY_FLOOR: - attron(COLOR_PAIR(MN_COLOR)); - printw(" "); - break; + case EMPTY_FLOOR: + attron(COLOR_PAIR(MN_COLOR)); + printw(" "); + break; - case RUG: - attron(COLOR_PAIR(SN_COLOR)); - printw("\u2592"); - break; + case RUG: + attron(COLOR_PAIR(SN_COLOR)); + printw("\u2592"); + break; - case WINDOW_WALL: - attron(COLOR_PAIR(SW_COLOR)); - printw("\u2591"); - break; + case WINDOW_WALL: + attron(COLOR_PAIR(SW_COLOR)); + printw("\u2591"); + break; - case CLEAR_WALL: - attron(COLOR_PAIR(SW_COLOR)); - printw("\u2588"); - break; + case CLEAR_WALL: + attron(COLOR_PAIR(SW_COLOR)); + printw("\u2588"); + break; - case SECRET_WALL: - case SOLID_WALL: - attron(COLOR_PAIR(MN_COLOR)); - printw("\u2588"); - break; + case SECRET_WALL: + case SOLID_WALL: + attron(COLOR_PAIR(MN_COLOR)); + printw("\u2588"); + break; - case NEON_WALL: - drawNeon(dj, di); - break; + case NEON_WALL: + drawNeon(dj, di); + break; - case BAR: - drawBar(dj, di); - break; - } + case BAR: + drawBar(dj, di); + break; + } + }else{ + attron(COLOR_PAIR(MN_COLOR)); + printw(" "); + } } } } @@ -207,6 +231,12 @@ void render(int w, int h){ printw(/*"\u263A"*/ "@"); drawGui(w, h); + + for ( i = 0; i < MAX_MAP_SIZE; ++i ) { + for(j = 0; j < MAX_MAP_SIZE; ++j){ + vis[i][j] = FALSE; + } + } } void drawNeon(int i, int j){ @@ -410,3 +440,20 @@ void initObjects(){ objs[i].unlocked = 0; } } + +void apply(void *map, int x, int y, int dx, int dy, void *src){ + if(x < 0 || x >= MAX_MAP_SIZE) return; + if(y < 0 || y >= MAX_MAP_SIZE) return; + vis[y][x] = TRUE; +} + +bool opaque(void *m, int x, int y){ + if(x < 0 || x >= MAX_MAP_SIZE) return FALSE; + if(y < 0 || y >= MAX_MAP_SIZE) return FALSE; + + if(map[y][x].f == SOLID_WALL || map[y][x].f == SECRET_WALL){ + return TRUE; + }else{ + return FALSE; + } +}