X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;ds=sidebyside;f=src%2Fclient%2Fmap.c;h=f8ff0616bc502d683fc63d8d96bc15ab0b69eef3;hb=5efc409a3640bcc8b2b4d5310a7e09c1e22afeba;hp=7c2dcc384590df51b3dcfa46c9bcb577a6755e27;hpb=0438f2fc5df337e4264103a86c1765ace9c6565a;p=plomrogue diff --git a/src/client/map.c b/src/client/map.c index 7c2dcc3..f8ff061 100644 --- a/src/client/map.c +++ b/src/client/map.c @@ -1,7 +1,19 @@ -/* src/client/map.c */ +/* src/client/map.c + * + * This file is part of PlomRogue. PlomRogue is licensed under the GPL version 3 + * or any later version. For details on its copyright, license, and warranties, + * see the file NOTICE in the root directory of the PlomRogue source package. + */ #include "map.h" #include /* uint8_t */ +#include /* free() */ +#include /* sprintf() */ +#include /* strlen(), strncmp() */ +#include "../common/try_malloc.h" /* try_malloc() */ +#include "../common/rexit.h" /* exit_trouble() */ +//#include "../common/yx_uint8.h" /* yx_uint8 */ +#include "io.h" /* send() */ #include "windows.h" /* struct Win, center_offset(), get_win_by_id() */ #include "world.h" /* for global world */ @@ -39,9 +51,83 @@ extern void map_scroll(char d) -extern void map_center() +extern void toggle_lookmode() { - struct Win * win_map = get_win_by_id('m'); - win_map->center.y = world.player_pos.y; - win_map->center.x = world.player_pos.x * 2; + if (!world.look) + { + world.look_pos = world.player_pos; + world.look = 1; + } + else + { + world.look = 0; + } + query_mapcell(); +} + + + +extern uint8_t lookmode_nav(char * command) +{ + char * prefix = "move_"; + uint8_t len_pref = strlen(prefix); + if (!strncmp(prefix, command, len_pref) && strlen(command) - 1 == len_pref) + { + uint8_t open_north = world.look_pos.y > 0; + uint8_t open_south = world.look_pos.y < world.map.length - 1; + uint8_t open_west = world.look_pos.x > 0; + uint8_t open_east = world.look_pos.x < world.map.length - 1; + uint8_t indent = world.look_pos.y % 2; + if ('s' == command[len_pref]) + { + world.look_pos.x = world.look_pos.x - open_west; + } + else if ('d' == command[len_pref]) + { + world.look_pos.x = world.look_pos.x + open_east; + } + else if ('w' == command[len_pref]) + { + world.look_pos.y = world.look_pos.y - open_north; + world.look_pos.x = world.look_pos.x - !indent * open_west; + } + else if ('e' == command[len_pref]) + { + world.look_pos.y = world.look_pos.y - open_north; + world.look_pos.x = world.look_pos.x + indent * open_east; + } + else if ('x' == command[len_pref]) + { + world.look_pos.y = world.look_pos.y + open_south; + world.look_pos.x = world.look_pos.x - !indent * open_west; + } + else if ('c' == command[len_pref]) + { + world.look_pos.y = world.look_pos.y + open_south; + world.look_pos.x = world.look_pos.x + indent * open_east; + } + else + { + return 0; + } + query_mapcell(); + return 1; + } + return 0; +} + + + +extern void query_mapcell() +{ + free(world.things_here); + world.things_here = NULL; + char * stack = "THINGS_HERE"; + char * stack_query = try_malloc(strlen(stack) +1+3 +1+3 +1, __func__); + uint8_t y = world.look ? world.look_pos.y : world.player_pos.y; + uint8_t x = world.look ? world.look_pos.x : world.player_pos.x; + int test = sprintf(stack_query, "%s %d %d", stack, y, x); + exit_trouble(test < 0, __func__, "sprintf"); + send(stack_query); + free(stack_query); }