forked from github/server
gmtool can clear regions
This commit is contained in:
parent
e59ae05729
commit
c387e985b8
13
src/chaos.c
13
src/chaos.c
|
@ -53,6 +53,19 @@ attrib_type at_chaoscount = {
|
||||||
ATF_UNIQUE
|
ATF_UNIQUE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void set_chaoscount(struct region *r, int deaths)
|
||||||
|
{
|
||||||
|
if (deaths==0) {
|
||||||
|
a_removeall(&r->attribs, &at_chaoscount);
|
||||||
|
} else {
|
||||||
|
attrib *a = a_find(r->attribs, &at_chaoscount);
|
||||||
|
if (!a) {
|
||||||
|
a = a_add(&r->attribs, a_new(&at_chaoscount));
|
||||||
|
}
|
||||||
|
a->data.i = deaths;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int get_chaoscount(const region * r)
|
int get_chaoscount(const region * r)
|
||||||
{
|
{
|
||||||
attrib *a = a_find(r->attribs, &at_chaoscount);
|
attrib *a = a_find(r->attribs, &at_chaoscount);
|
||||||
|
|
|
@ -29,6 +29,7 @@ extern "C" {
|
||||||
void chaos_register(void);
|
void chaos_register(void);
|
||||||
void chaos_update(void);
|
void chaos_update(void);
|
||||||
|
|
||||||
|
void set_chaoscount(struct region *r, int deaths);
|
||||||
int get_chaoscount(const struct region * r);
|
int get_chaoscount(const struct region * r);
|
||||||
void add_chaoscount(struct region * r, int deaths);
|
void add_chaoscount(struct region * r, int deaths);
|
||||||
|
|
||||||
|
|
48
src/gmtool.c
48
src/gmtool.c
|
@ -15,6 +15,7 @@
|
||||||
|
|
||||||
#include "gmtool.h"
|
#include "gmtool.h"
|
||||||
#include "gmtool_structs.h"
|
#include "gmtool_structs.h"
|
||||||
|
#include "chaos.h"
|
||||||
#include "console.h"
|
#include "console.h"
|
||||||
#include "listbox.h"
|
#include "listbox.h"
|
||||||
#include "wormhole.h"
|
#include "wormhole.h"
|
||||||
|
@ -45,6 +46,7 @@
|
||||||
#include <attributes/attributes.h>
|
#include <attributes/attributes.h>
|
||||||
#include <triggers/triggers.h>
|
#include <triggers/triggers.h>
|
||||||
|
|
||||||
|
#include <util/attrib.h>
|
||||||
#include <util/log.h>
|
#include <util/log.h>
|
||||||
#include <util/unicode.h>
|
#include <util/unicode.h>
|
||||||
#include <util/lists.h>
|
#include <util/lists.h>
|
||||||
|
@ -515,6 +517,46 @@ static void statusline(WINDOW * win, const char *str)
|
||||||
wnoutrefresh(win);
|
wnoutrefresh(win);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void reset_region(region *r) {
|
||||||
|
set_chaoscount(r, 0);
|
||||||
|
r->flags = 0;
|
||||||
|
a_removeall(&r->attribs, NULL);
|
||||||
|
while (r->units) {
|
||||||
|
remove_unit(&r->units, r->units);
|
||||||
|
}
|
||||||
|
while (r->ships) {
|
||||||
|
remove_ship(&r->ships, r->ships);
|
||||||
|
}
|
||||||
|
while (r->buildings) {
|
||||||
|
remove_building(&r->buildings, r->buildings);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void reset_cursor(state *st) {
|
||||||
|
int nx = st->cursor.x;
|
||||||
|
int ny = st->cursor.y;
|
||||||
|
region *r;
|
||||||
|
pnormalize(&nx, &ny, st->cursor.pl);
|
||||||
|
if ((r = findregion(nx, ny)) != NULL) {
|
||||||
|
reset_region(r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void reset_rect(state *st) {
|
||||||
|
int x, y, bs = 3;
|
||||||
|
for (x=0;x!=bs;++x) {
|
||||||
|
for (y = 0; y != bs; ++y) {
|
||||||
|
region *r;
|
||||||
|
int nx = st->cursor.x + x;
|
||||||
|
int ny = st->cursor.y + y;
|
||||||
|
pnormalize(&nx, &ny, st->cursor.pl);
|
||||||
|
if ((r = findregion(nx, ny)) != NULL) {
|
||||||
|
reset_region(r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void terraform_at(coordinate * c, const terrain_type * terrain)
|
static void terraform_at(coordinate * c, const terrain_type * terrain)
|
||||||
{
|
{
|
||||||
if (terrain != NULL) {
|
if (terrain != NULL) {
|
||||||
|
@ -934,6 +976,12 @@ static void 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 'c': /* clear/reset */
|
||||||
|
reset_cursor(st);
|
||||||
|
break;
|
||||||
|
case 'C': /* clear/reset */
|
||||||
|
reset_rect(st);
|
||||||
|
break;
|
||||||
case 0x09: /* tab = next selected */
|
case 0x09: /* tab = next selected */
|
||||||
if (regions != NULL) {
|
if (regions != NULL) {
|
||||||
map_region *mr = cursor_region(&st->display, cursor);
|
map_region *mr = cursor_region(&st->display, cursor);
|
||||||
|
|
Loading…
Reference in New Issue