/*
* Empire - A multi-player, client/server Internet based war game.
- * Copyright (C) 1986-2010, Dave Pare, Jeff Bailey, Thomas Ruschak,
- * Ken Stevens, Steve McClure
+ * Copyright (C) 1986-2012, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ * Ken Stevens, Steve McClure, Markus Armbruster
*
- * This program is free software; you can redistribute it and/or modify
+ * Empire is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* ---
*
*
* Known contributors to this file:
* Dave Pare, 1989
- * Markus Armbruster, 2006-2009
+ * Markus Armbruster, 2006-2011
*/
#include <config.h>
/*
* setup the nstr_sect structure for sector selection.
- * can select on either NS_ALL, NS_AREA, or NS_RANGE
+ * can select on either NS_ALL, NS_AREA, or NS_DIST
* iterate thru the "condarg" string looking
* for arguments to compile into the nstr.
* Using this function for anything but command arguments is usually
struct range range;
struct natstr *natp;
coord cx, cy;
- int dist, n;
+ int dist;
char buf[1024];
if (!str || !*str) {
if (!(str = getstring("(sects)? ", buf)))
return 0;
- }
+ } else
+ make_stale_if_command_arg(str);
switch (sarg_type(str)) {
case NS_AREA:
if (!sarg_area(str, &range))
default:
return 0;
}
- if (!player->condarg)
- return 1;
- n = nstr_comp(np->cond, sizeof(np->cond) / sizeof(*np->cond),
- EF_SECTOR, player->condarg);
- np->ncond = n >= 0 ? n : 0;
- return n >= 0;
+ return snxtsct_use_condarg(np);
}
void
np->dy = 0;
}
+int
+snxtsct_use_condarg(struct nstr_sect *np)
+{
+ int n;
+
+ if (!player->condarg)
+ return 1;
+ n = nstr_comp(np->cond, sizeof(np->cond) / sizeof(*np->cond),
+ EF_SECTOR, player->condarg);
+ if (n < 0)
+ return 0;
+ np->ncond = n;
+ return 1;
+}
+
void
snxtsct_rewind(struct nstr_sect *np)
{
np->dx = -1;
np->dy = 0;
}
-
-void
-xysize_range(struct range *rp)
-{
- if (rp->lx > rp->hx)
- rp->width = WORLD_X + rp->hx + 1 - rp->lx;
- else
- rp->width = rp->hx + 1 - rp->lx;
- if (CANT_HAPPEN(rp->width > WORLD_X))
- rp->width = WORLD_X;
- if (rp->ly > rp->hy)
- rp->height = WORLD_Y + rp->hy + 1 - rp->ly;
- else
- rp->height = rp->hy + 1 - rp->ly;
- if (CANT_HAPPEN(rp->height > WORLD_Y))
- rp->height = WORLD_Y;
-}
-
-void
-xydist_range(coord x, coord y, int dist, struct range *rp)
-{
- if (4 * dist + 1 < WORLD_X) {
- rp->lx = xnorm(x - 2 * dist);
- rp->hx = xnorm(x + 2 * dist);
- rp->width = 4 * dist + 1;
- } else {
- rp->lx = xnorm(x - WORLD_X / 2);
- rp->hx = xnorm(rp->lx + WORLD_X - 1);
- rp->width = WORLD_X;
- }
-
- if (2 * dist + 1 < WORLD_Y) {
- rp->ly = ynorm(y - dist);
- rp->hy = ynorm(y + dist);
- rp->height = 2 * dist + 1;
- } else {
- rp->ly = ynorm(y - WORLD_Y / 2);
- rp->hy = ynorm(rp->ly + WORLD_Y - 1);
- rp->height = WORLD_Y;
- }
-}