X-Git-Url: https://plomlompom.com/repos/%7B%7Bprefix%7D%7D/copy_free?a=blobdiff_plain;f=roguelike.c;h=e387daf1273e856323db27fc1452c8893d725fd7;hb=64d0376c88998796129b76b7648670d100dad2a0;hp=bc21ab5a0dfb5b6c23bbc51fac3b514f777b5e81;hpb=336d57bf85ed4b64307dea367c696ec9b477504a;p=plomrogue diff --git a/roguelike.c b/roguelike.c index bc21ab5..e387daf 100644 --- a/roguelike.c +++ b/roguelike.c @@ -39,11 +39,12 @@ struct Monster { void draw_with_linebreaks (struct Win *, char *, int); void draw_text_from_bottom (struct Win *, char *); -void draw_log (struct Win *); -void draw_map (struct Win *); -void draw_info (struct Win *); -void draw_keys_window (struct Win *); +void draw_log_win (struct Win *); +void draw_map_win (struct Win *); +void draw_info_win (struct Win *); +void draw_keys_win (struct Win *); void toggle_window (struct WinMeta *, struct Win *); +void growshrink_active_window (struct WinMeta *, char); void init_keybindings(struct World *); struct Map init_map (); void map_scroll (struct Map *, char); @@ -115,12 +116,12 @@ void draw_text_from_bottom (struct Win * win, char * text) { text = text + (sizeof(char) * (z + 1)); } draw_with_linebreaks(win, text, start_y); } -void draw_log (struct Win * win) { +void draw_log_win (struct Win * win) { // Draw log text from world struct in win->data from bottom to top. struct World * world = (struct World *) win->data; draw_text_from_bottom(win, world->log); } -void draw_map (struct Win * win) { +void draw_map_win (struct Win * win) { // Draw map determined by win->data Map struct into window. Respect offset. struct World * world = (struct World *) win->data; struct Map * map = world->map; @@ -142,7 +143,7 @@ void draw_map (struct Win * win) { mvwaddch(win->curses, y, x, cells[z]); z++; } } } } -void draw_info (struct Win * win) { +void draw_info_win (struct Win * win) { // Draw info window by appending win->data integer value to "Turn: " display. struct World * world = (struct World *) win->data; int count = world->turn; @@ -150,7 +151,7 @@ void draw_info (struct Win * win) { snprintf(text, 100, "Turn: %d", count); draw_with_linebreaks(win, text, 0); } -void draw_keys_window (struct Win * win) { +void draw_keys_win (struct Win * win) { // Draw keybinding window. struct World * world = (struct World *) win->data; struct KeysWinData * keyswindata = (struct KeysWinData *) world->keyswindata; @@ -192,6 +193,21 @@ void toggle_window (struct WinMeta * win_meta, struct Win * win) { else append_window(win_meta, win); } +void growshrink_active_window (struct WinMeta * win_meta, char change) { +// Grow or shrink active window horizontally or vertically by one cell size. + if (0 != win_meta->active) { + int height = win_meta->active->height; + int width = win_meta->active->width; + if (change == '-') + height--; + else if (change == '+') + height++; + else if (change == '_') + width--; + else if (change == '*') + width++; + resize_active_window (win_meta, height, width); } } + void init_keybindings(struct World * world) { // Initialize keybindings from file "keybindings". FILE * file = fopen("keybindings", "r"); @@ -454,19 +470,10 @@ int main () { keypad(screen, TRUE); raw(); struct WinMeta win_meta = init_win_meta(screen); - - struct Win win_keys = init_window(&win_meta, "Keys"); - win_keys.draw = draw_keys_window; - win_keys.data = &world; - struct Win win_map = init_window(&win_meta, "Map"); - win_map.draw = draw_map; - win_map.data = &world; - struct Win win_info = init_window(&win_meta, "Info"); - win_info.draw = draw_info; - win_info.data = &world; - struct Win win_log = init_window(&win_meta, "Log"); - win_log.draw = draw_log; - win_log.data = &world; + struct Win win_keys = init_window(&win_meta, "Keys", &world, draw_keys_win); + struct Win win_map = init_window(&win_meta, "Map", &world, draw_map_win); + struct Win win_info = init_window(&win_meta, "Info", &world, draw_info_win); + struct Win win_log = init_window(&win_meta, "Log", &world, draw_log_win); int key; while (1) { @@ -491,17 +498,17 @@ int main () { else if (key == get_action_key(world.keybindings, "cycle backwards")) cycle_active_window(&win_meta, 'p'); else if (key == get_action_key(world.keybindings, "shift forwards")) - shift_window(&win_meta, 'f'); + shift_active_window(&win_meta, 'f'); else if (key == get_action_key(world.keybindings, "shift backwards")) - shift_window(&win_meta, 'b'); + shift_active_window(&win_meta, 'b'); else if (key == get_action_key(world.keybindings, "grow horizontally")) - resize_window(&win_meta, '*'); + growshrink_active_window(&win_meta, '*'); else if (key == get_action_key(world.keybindings, "shrink horizontally")) - resize_window(&win_meta, '_'); + growshrink_active_window(&win_meta, '_'); else if (key == get_action_key(world.keybindings, "grow vertically")) - resize_window(&win_meta, '+'); + growshrink_active_window(&win_meta, '+'); else if (key == get_action_key(world.keybindings, "shrink vertically")) - resize_window(&win_meta, '-'); + growshrink_active_window(&win_meta, '-'); else if (key == get_action_key(world.keybindings, "save keys")) save_keybindings(&world); else if (key == get_action_key(world.keybindings, "keys nav up"))