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);
void next_turn (struct World *);
void update_log (struct World *, char *);
void save_keybindings(struct World *);
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;
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;
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;
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");
map.cells[(y * map.width) + x] = terrain; }
return map; }
+void map_scroll (struct Map * map, char dir) {
+// Scroll map into direction dir if possible by changing the offset.
+ if ('n' == dir && map->offset_y > 0)
+ map->offset_y--;
+ else if ('s' == dir)
+ map->offset_y++;
+ else if ('w' == dir && map->offset_x > 0)
+ map->offset_x--;
+ else if ('e' == dir)
+ map->offset_x++; }
+
void next_turn (struct World * world) {
// Increment turn and move enemy.
world->turn++;
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) {
if (key == get_action_key(world.keybindings, "quit"))
break;
else if (key == get_action_key(world.keybindings, "scroll pad right"))
- win_meta.pad_offset++;
- else if (key == get_action_key(world.keybindings, "scroll pad left") && win_meta.pad_offset > 0)
- win_meta.pad_offset--;
+ scroll_pad (&win_meta, '+');
+ else if (key == get_action_key(world.keybindings, "scroll pad left"))
+ scroll_pad (&win_meta, '-');
else if (key == get_action_key(world.keybindings, "toggle keys window"))
toggle_window(&win_meta, &win_keys);
else if (key == get_action_key(world.keybindings, "toggle map window"))
toggle_window(&win_meta, &win_info);
else if (key == get_action_key(world.keybindings, "toggle log window"))
toggle_window(&win_meta, &win_log);
- else if (key == get_action_key(world.keybindings, "cycle forwards") && win_meta.active != 0)
+ else if (key == get_action_key(world.keybindings, "cycle forwards"))
cycle_active_window(&win_meta, 'n');
- else if (key == get_action_key(world.keybindings, "cycle backwards") && win_meta.active != 0)
+ 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") && win_meta.active != 0)
- shift_window(&win_meta, 'f');
- else if (key == get_action_key(world.keybindings, "shift backwards") && win_meta.active != 0)
- shift_window(&win_meta, 'b');
- else if (key == get_action_key(world.keybindings, "grow horizontally") && win_meta.active != 0)
- resize_window(&win_meta, '*');
- else if (key == get_action_key(world.keybindings, "shrink horizontally") && win_meta.active != 0)
- resize_window(&win_meta, '_');
- else if (key == get_action_key(world.keybindings, "grow vertically") && win_meta.active != 0)
- resize_window(&win_meta, '+');
- else if (key == get_action_key(world.keybindings, "shrink vertically") && win_meta.active != 0)
- resize_window(&win_meta, '-');
+ else if (key == get_action_key(world.keybindings, "shift forwards"))
+ shift_active_window(&win_meta, 'f');
+ else if (key == get_action_key(world.keybindings, "shift backwards"))
+ shift_active_window(&win_meta, 'b');
+ else if (key == get_action_key(world.keybindings, "grow horizontally"))
+ growshrink_active_window(&win_meta, '*');
+ else if (key == get_action_key(world.keybindings, "shrink horizontally"))
+ growshrink_active_window(&win_meta, '_');
+ else if (key == get_action_key(world.keybindings, "grow vertically"))
+ growshrink_active_window(&win_meta, '+');
+ else if (key == get_action_key(world.keybindings, "shrink vertically"))
+ 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"))
keyswin_move_selection (&world, 'd');
else if (key == get_action_key(world.keybindings, "keys mod"))
keyswin_mod_key (&world, &win_meta);
- else if (key == get_action_key(world.keybindings, "map up") && map.offset_y > 0)
- map.offset_y--;
+ else if (key == get_action_key(world.keybindings, "map up"))
+ map_scroll (&map, 'n');
else if (key == get_action_key(world.keybindings, "map down"))
- map.offset_y++;
+ map_scroll (&map, 's');
else if (key == get_action_key(world.keybindings, "map right"))
- map.offset_x++;
- else if (key == get_action_key(world.keybindings, "map left") && map.offset_x > 0)
- map.offset_x--;
+ map_scroll (&map, 'e');
+ else if (key == get_action_key(world.keybindings, "map left"))
+ map_scroll (&map, 'w');
else if (key == get_action_key(world.keybindings, "player down"))
move_player(&world, 's');
else if (key == get_action_key(world.keybindings, "player up"))