X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=src%2Fclient%2Fio.c;h=c047f6985d3f9526cc45eb4fa845be77ad9677e2;hb=891ba8fbca53d920f6b3704827fa6b8aee737de4;hp=e3047234311aa19f4aaa5a154fc240b6e55525af;hpb=0438f2fc5df337e4264103a86c1765ace9c6565a;p=plomrogue diff --git a/src/client/io.c b/src/client/io.c index e304723..c047f69 100644 --- a/src/client/io.c +++ b/src/client/io.c @@ -68,8 +68,8 @@ static FILE * changed_worldstate_file(char * path); * out file wasn't read for supposedly not having changed since a last * read_world() call. * - * map_center() is triggered by the first successful read_world() or on turn 1, - * so the client focuses the map window on the player on client and world start. + * map_center() is triggered by either, the first successful read_world() (thus + * on client start), or on turn 1 (thus on world start). */ static uint8_t read_world(); @@ -106,7 +106,8 @@ static void read_inventory(char * read_buf, uint32_t linemax, FILE * file) int new_size = strlen(read_buf); char * new_inventory = try_malloc(old_size + new_size + 1, f_name); memcpy(new_inventory, world.player_inventory, old_size); - sprintf(new_inventory + old_size, "%s", read_buf); + int test = sprintf(new_inventory + old_size, "%s", read_buf); + exit_trouble(test < 0, f_name, "sprintf()"); free(world.player_inventory); world.player_inventory = new_inventory; } @@ -150,7 +151,8 @@ static void read_log(char * read_buf, uint32_t linemax, FILE * file) int new_size = strlen(read_buf); char * new_log = try_malloc(old_size + new_size + 1, f_name); memcpy(new_log, world.log, old_size); - sprintf(new_log + old_size, "%s", read_buf); + int test = sprintf(new_log + old_size, "%s", read_buf); + exit_trouble(test < 0, f_name, "sprintf()"); free(world.log); world.log = new_log; } @@ -281,6 +283,7 @@ extern char * io_loop() world.halfdelay = 1; /* Ensures read_world() is only called 10 */ halfdelay(world.halfdelay); /* times a second during user inactivity. */ uint8_t change_in_client = 0; + uint16_t last_focused_turn = world.turn; time_t last_server_answer_time = time(0); while (1) { @@ -292,8 +295,13 @@ extern char * io_loop() world.winch = 0; change_in_client++; } - if (read_world() || change_in_client) + if (change_in_client || read_world()) { + if (world.turn != last_focused_turn && world.focus_each_turn) + { + last_focused_turn = world.turn; + map_center(); + } draw_all_wins(); } change_in_client = 0;