(switch_leader, switch_flagship): New.

(navi, marc): Add the ability to select a flagship or leader.
This commit is contained in:
Ron Koenderink 2006-07-09 18:30:13 +00:00
parent df8dc6ab5a
commit f874995c19
2 changed files with 54 additions and 16 deletions

View file

@ -46,6 +46,7 @@
#include "commands.h" #include "commands.h"
static int set_leader(struct emp_qelem *list, struct lndstr **leaderp); static int set_leader(struct emp_qelem *list, struct lndstr **leaderp);
static void switch_leader(struct emp_qelem *list, int land_uid);
int int
march(void) march(void)
@ -147,14 +148,11 @@ march(void)
skip = 1; skip = 1;
break; break;
case 'f': case 'f':
{ if (ac <= 1)
struct emp_qelem *qp; switch_leader(&land_list, -1);
else
qp = land_list.q_back; switch_leader(&land_list, atoi(player->argp[1]));
emp_remque(land_list.q_back); set_leader(&land_list, &lnd);
emp_insque(qp, &land_list);
set_leader(&land_list, &lnd);
}
break; break;
case 'i': case 'i':
lnd_list(&land_list); lnd_list(&land_list);
@ -209,3 +207,24 @@ set_leader(struct emp_qelem *list, struct lndstr **leaderp)
pr("%s\n", prland(&llp->land)); pr("%s\n", prland(&llp->land));
return 1; return 1;
} }
static void
switch_leader(struct emp_qelem *list, int land_uid)
{
struct emp_qelem *qp, *save;
struct llist *llp;
if (QEMPTY(list))
return;
save = qp = list->q_back;
do {
emp_remque(qp);
emp_insque(qp, list);
qp = list->q_back;
llp = (struct llist *)qp;
if (llp->land.lnd_uid == land_uid || land_uid == -1)
break;
} while (list->q_back != save);
}

View file

@ -48,6 +48,7 @@
#include "optlist.h" #include "optlist.h"
static int set_flagship(struct emp_qelem *list, struct shpstr **flagshipp); static int set_flagship(struct emp_qelem *list, struct shpstr **flagshipp);
static void switch_flagship(struct emp_qelem *list, int ship_uid);
int int
navi(void) navi(void)
@ -175,14 +176,11 @@ navi(void)
skip = 1; skip = 1;
break; break;
case 'f': case 'f':
{ if (ac <= 1)
struct emp_qelem *qp; switch_flagship(&ship_list, -1);
else
qp = ship_list.q_back; switch_flagship(&ship_list, atoi(player->argp[1]));
emp_remque(ship_list.q_back); set_flagship(&ship_list, &shp);
emp_insque(qp, &ship_list);
set_flagship(&ship_list, &shp);
}
break; break;
case 'i': case 'i':
shp_list(&ship_list); shp_list(&ship_list);
@ -312,3 +310,24 @@ set_flagship(struct emp_qelem *list, struct shpstr **flagshipp)
pr("%s\n", prship(&mlp->ship)); pr("%s\n", prship(&mlp->ship));
return 1; return 1;
} }
static void
switch_flagship(struct emp_qelem *list, int ship_uid)
{
struct emp_qelem *qp, *save;
struct mlist *mlp;
if (QEMPTY(list))
return;
save = qp = list->q_back;
do {
emp_remque(qp);
emp_insque(qp, list);
qp = list->q_back;
mlp = (struct mlist *)qp;
if (mlp->ship.shp_uid == ship_uid || ship_uid == -1)
break;
} while (list->q_back != save);
}