From: Christian Heller Date: Wed, 10 Jul 2013 22:17:39 +0000 (+0200) Subject: Moved map-specific functions into map.h / map.c library. X-Git-Tag: tce~1160 X-Git-Url: https://plomlompom.com/repos/%7B%7Bprefix%7D%7D/task?a=commitdiff_plain;h=730fe60725a42dc89918e7b9c233dd24193de8ac;p=plomrogue Moved map-specific functions into map.h / map.c library. --- diff --git a/src/draw_wins.c b/src/draw_wins.c index fcdda05..5256713 100644 --- a/src/draw_wins.c +++ b/src/draw_wins.c @@ -7,6 +7,7 @@ #include "roguelike.h" #include "keybindings.h" #include "objects_on_map.h" +#include "map.h" static void draw_map_objects (void *, struct Map *, struct Win *); diff --git a/src/objects_on_map.c b/src/objects_on_map.c index 76c57e0..a7d9c32 100644 --- a/src/objects_on_map.c +++ b/src/objects_on_map.c @@ -4,6 +4,7 @@ #include "yx_uint16.h" #include "readwrite.h" #include "roguelike.h" +#include "map.h" static struct ChainMapObject * get_next_cmo (void *, char *, size_t, struct ChainMapObject *); diff --git a/src/roguelike.c b/src/roguelike.c index 5456e24..b44086a 100644 --- a/src/roguelike.c +++ b/src/roguelike.c @@ -1,6 +1,5 @@ #include "roguelike.h" #include -#include #include #include #include @@ -10,6 +9,7 @@ #include "keybindings.h" #include "readwrite.h" #include "objects_on_map.h" +#include "map.h" uint16_t rrand(char use_seed, uint32_t new_seed) { // Pseudo-random number generator (LGC algorithm). Use instead of rand() to ensure portable predictability. @@ -42,46 +42,6 @@ void update_log (struct World * world, char * text) { free(world->log); world->log = new_text; } -struct Map init_map () { -// Initialize map with some experimental start values. - struct Map map; - map.size.x = 64; - map.size.y = 64; - map.offset.x = 0; - map.offset.y = 0; - uint32_t size = map.size.x * map.size.y; - map.cells = malloc(size); - uint16_t y, x; - for (y = 0; y < map.size.y; y++) - for (x = 0; x < map.size.x; x++) - map.cells[(y * map.size.x) + x] = '~'; - map.cells[size / 2 + (map.size.x / 2)] = '.'; - uint32_t curpos; - while (1) { - y = rrand(0, 0) % map.size.y; - x = rrand(0, 0) % map.size.x; - curpos = y * map.size.x + x; - if ('~' == map.cells[curpos] && - ( (curpos >= map.size.x && '.' == map.cells[curpos - map.size.x]) - || (curpos < map.size.x * (map.size.y-1) && '.' == map.cells[curpos + map.size.x]) - || (curpos > 0 && curpos % map.size.x != 0 && '.' == map.cells[curpos-1]) - || (curpos < (map.size.x * map.size.y) && (curpos+1) % map.size.x != 0 && '.' == map.cells[curpos+1]))) { - if (y == 0 || y == map.size.y - 1 || x == 0 || x == map.size.x - 1) - break; - map.cells[y * map.size.x + x] = '.'; } } - return map; } - -void map_scroll (struct Map * map, char dir, struct yx_uint16 win_size) { -// Scroll map into direction dir if possible by changing the offset. - if (NORTH == dir && map->offset.y > 0) - map->offset.y--; - else if (WEST == dir && map->offset.x > 0) - map->offset.x--; - else if (SOUTH == dir && map->offset.y + win_size.y < map->size.y) - map->offset.y++; - else if (EAST == dir && map->offset.x + win_size.x < map->size.x) - map->offset.x++; } - uint16_t center_offset (uint16_t pos, uint16_t mapsize, uint16_t framesize) { // Return the offset for display of a map inside a frame centered on pos. uint16_t offset = 0; @@ -93,11 +53,6 @@ uint16_t center_offset (uint16_t pos, uint16_t mapsize, uint16_t framesize) { offset = mapsize - framesize; } } return offset; } -void map_center_player (struct Map * map, struct Player * player, struct yx_uint16 frame_size) { -// Center map on player. - map->offset.y = center_offset (player->pos.y, map->size.y, frame_size.y); - map->offset.x = center_offset (player->pos.x, map->size.x, frame_size.x); } - void turn_over (struct World * world, char action) { // Record action in game record file, increment turn and move enemy. if (1 == world->interactive) { diff --git a/src/roguelike.h b/src/roguelike.h index 4298551..209f717 100644 --- a/src/roguelike.h +++ b/src/roguelike.h @@ -2,12 +2,12 @@ #define ROGUELIKE_H #include -#include "yx_uint16.h" struct WinMeta; struct Win; struct KeyBinding; struct KeysWinData; +struct Map; struct World { char interactive; @@ -21,18 +21,10 @@ struct World { struct Monster * monster; struct Player * player; }; -struct Map { - struct yx_uint16 size; - struct yx_uint16 offset; - char * cells; }; - extern uint16_t rrand(char, uint32_t); extern void update_log (struct World *, char *); -extern struct Map init_map (); -extern void map_scroll (struct Map *, char, struct yx_uint16); uint16_t center_offset (uint16_t, uint16_t, uint16_t); -extern void map_center_player (struct Map *, struct Player *, struct yx_uint16); extern void turn_over (struct World *, char); extern void save_game(struct World *);