more editor selection functions, because i'm too lazy to expose the keystrokes to Lua

This commit is contained in:
Enno Rehling 2008-05-18 14:31:08 +00:00
parent 8452dc365e
commit 9e902c3456
2 changed files with 63 additions and 18 deletions

View file

@ -536,21 +536,25 @@ region2coord(const region * r, coordinate * c)
#endif #endif
void void
highlight_region(region *r) highlight_region(region *r, int toggle)
{ {
if (r!=NULL) r->flags |= RF_MAPPER_HIGHLIGHT; if (r!=NULL) {
if (toggle) r->flags |= RF_MAPPER_HIGHLIGHT;
else r->flags &= ~RF_MAPPER_HIGHLIGHT;
}
} }
void void
select_coordinate(struct selection * selected, int x, int y) select_coordinate(struct selection * selected, int x, int y, int toggle)
{ {
coordinate coord = { 0 }; coordinate coord = { 0 };
coord.x = x; coord.x = x;
coord.y = y; coord.y = y;
tag_region(selected, &coord); if (toggle) tag_region(selected, &coord);
else untag_region(selected, &coord);
} }
enum { MODE_HIGHLIGHT = 0x0, MODE_SELECT = 0x1 }; enum { MODE_MARK, MODE_SELECT, MODE_UNMARK, MODE_UNSELECT };
static void static void
select_regions(state * st, int selectmode) select_regions(state * st, int selectmode)
@ -584,6 +588,42 @@ select_regions(state * st, int selectmode)
} }
} }
} }
else if (findmode=='m') {
region * r;
sprintf(sbuffer, "%smonsters", status);
statusline(st->wnd_status->handle, sbuffer);
for (r=regions;r;r=r->next) {
unit * u = r->units;
for (;u;u=u->next) {
if (fval(u->faction, FFL_NPC)!=0) break;
}
if (u) {
if (selectmode&MODE_SELECT) {
select_coordinate(st->selected, r->x, r->y, selectmode==MODE_SELECT);
} else {
highlight_region(r, selectmode==MODE_MARK);
}
}
}
}
else if (findmode=='p') {
region * r;
sprintf(sbuffer, "%splayers", status);
statusline(st->wnd_status->handle, sbuffer);
for (r=regions;r;r=r->next) {
unit * u = r->units;
for (;u;u=u->next) {
if (fval(u->faction, FFL_NPC)==0) break;
}
if (u) {
if (selectmode&MODE_SELECT) {
select_coordinate(st->selected, r->x, r->y, selectmode==MODE_SELECT);
} else {
highlight_region(r, selectmode==MODE_MARK);
}
}
}
}
else if (findmode=='u') { else if (findmode=='u') {
region * r; region * r;
sprintf(sbuffer, "%sunits", status); sprintf(sbuffer, "%sunits", status);
@ -591,9 +631,9 @@ select_regions(state * st, int selectmode)
for (r=regions;r;r=r->next) { for (r=regions;r;r=r->next) {
if (r->units) { if (r->units) {
if (selectmode&MODE_SELECT) { if (selectmode&MODE_SELECT) {
select_coordinate(st->selected, r->x, r->y); select_coordinate(st->selected, r->x, r->y, selectmode==MODE_SELECT);
} else { } else {
highlight_region(r); highlight_region(r, selectmode==MODE_MARK);
} }
} }
} }
@ -605,9 +645,9 @@ select_regions(state * st, int selectmode)
for (r=regions;r;r=r->next) { for (r=regions;r;r=r->next) {
if (r->ships) { if (r->ships) {
if (selectmode&MODE_SELECT) { if (selectmode&MODE_SELECT) {
select_coordinate(st->selected, r->x, r->y); select_coordinate(st->selected, r->x, r->y, selectmode==MODE_SELECT);
} else { } else {
highlight_region(r); highlight_region(r, selectmode==MODE_MARK);
} }
} }
} }
@ -627,9 +667,9 @@ select_regions(state * st, int selectmode)
for (u=f->units;u;u=u->nextF) { for (u=f->units;u;u=u->nextF) {
region * r = u->region; region * r = u->region;
if (selectmode&MODE_SELECT) { if (selectmode&MODE_SELECT) {
select_coordinate(st->selected, r->x, r->y); select_coordinate(st->selected, r->x, r->y, selectmode==MODE_SELECT);
} else { } else {
highlight_region(r); highlight_region(r, selectmode==MODE_MARK);
} }
} }
} else { } else {
@ -651,9 +691,9 @@ select_regions(state * st, int selectmode)
for (r=regions;r;r=r->next) { for (r=regions;r;r=r->next) {
if (r->terrain==terrain) { if (r->terrain==terrain) {
if (selectmode&MODE_SELECT) { if (selectmode&MODE_SELECT) {
select_coordinate(st->selected, r->x, r->y); select_coordinate(st->selected, r->x, r->y, selectmode==MODE_SELECT);
} else { } else {
highlight_region(r); highlight_region(r, selectmode==MODE_MARK);
} }
} }
} }
@ -859,11 +899,17 @@ handlekey(state * st, int c)
st->wnd_status->update |= 1; st->wnd_status->update |= 1;
st->wnd_map->update |= 1; st->wnd_map->update |= 1;
break; break;
case 'h':
select_regions(st, MODE_MARK);
break;
case 'H': case 'H':
select_regions(st, MODE_HIGHLIGHT); select_regions(st, MODE_UNMARK);
break;
case 't':
select_regions(st, MODE_SELECT);
break; break;
case 'T': case 'T':
select_regions(st, MODE_SELECT); select_regions(st, MODE_UNSELECT);
break; break;
case ';': case ';':
statusline(st->wnd_status->handle, "tag-"); statusline(st->wnd_status->handle, "tag-");
@ -883,7 +929,6 @@ handlekey(state * st, int c)
beep(); beep();
} }
break; break;
case 't':
case ' ': case ' ':
if (tagged_region(st->selected, cursor)) untag_region(st->selected, cursor); if (tagged_region(st->selected, cursor)) untag_region(st->selected, cursor);
else tag_region(st->selected, cursor); else tag_region(st->selected, cursor);

View file

@ -19,8 +19,8 @@ extern "C" {
extern int gmmain(int argc, char *argv[]); extern int gmmain(int argc, char *argv[]);
extern int curses_readline(struct lua_State * L, const char * prompt); extern int curses_readline(struct lua_State * L, const char * prompt);
extern void highlight_region(struct region *r); extern void highlight_region(struct region *r, int on);
extern void select_coordinate(struct selection * selected, int x, int y); extern void select_coordinate(struct selection * selected, int x, int y, int on);
extern void run_mapper(void); extern void run_mapper(void);
extern int force_color; extern int force_color;