(have_looked,have_found,set_have_looked,set_have_found,print_found):
collapse to shiplist function set (add,free,print,on). Fix bug where ship uid was a unsigned char instead of short. Switch to head pointer instead of head record with a linked list. Add a free().
This commit is contained in:
parent
fd700f235b
commit
042372d4c2
7 changed files with 48 additions and 144 deletions
|
@ -95,17 +95,13 @@ ac_encounter(struct emp_qelem *bomb_list, struct emp_qelem *esc_list,
|
|||
struct natstr *over, *mynatp;
|
||||
struct plist *plp;
|
||||
int evaded;
|
||||
struct shiplook head;
|
||||
struct shiplook *s, *s2;
|
||||
struct shiplist *head = NULL;
|
||||
int changed = 0;
|
||||
int intown = 0; /* Last owner to intercept */
|
||||
/* We want to only intercept once per sector per owner. So, if we overfly
|
||||
a sector, and then overfly some land units or ships, we don't want to
|
||||
potentially intercept 3 times. */
|
||||
|
||||
memset(&head, 0, sizeof(struct shiplook));
|
||||
head.uid = -1;
|
||||
|
||||
plp = (struct plist *)bomb_list->q_forw;
|
||||
plane_owner = plp->plane.pln_own;
|
||||
|
||||
|
@ -271,14 +267,8 @@ ac_encounter(struct emp_qelem *bomb_list, struct emp_qelem *esc_list,
|
|||
writemap(player->cnum);
|
||||
/* Now, if the bomber and escort lists are empty, we are done */
|
||||
if (QEMPTY(bomb_list) && QEMPTY(esc_list)) {
|
||||
if (mission_flags & P_A) {
|
||||
s = head.next;
|
||||
while (s != (struct shiplook *)0) {
|
||||
s2 = s;
|
||||
s = s->next;
|
||||
free(s2);
|
||||
}
|
||||
}
|
||||
if (mission_flags & P_A)
|
||||
free_shiplist(&head);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -356,15 +346,8 @@ ac_encounter(struct emp_qelem *bomb_list, struct emp_qelem *esc_list,
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((mission_flags & P_A) && (head.uid != -1)) {
|
||||
s = head.next;
|
||||
while (s != (struct shiplook *)0) {
|
||||
s2 = s;
|
||||
s = s->next;
|
||||
free(s2);
|
||||
}
|
||||
}
|
||||
if (mission_flags & P_A)
|
||||
free_shiplist(&head);
|
||||
}
|
||||
|
||||
static int
|
||||
|
|
|
@ -28,133 +28,80 @@
|
|||
* aswplnsubs.c: Various subroutines used for ASW planes
|
||||
*
|
||||
* Known contributors to this file:
|
||||
* Ron Koenderink, 2004
|
||||
*
|
||||
*/
|
||||
|
||||
#include "misc.h"
|
||||
#include "player.h"
|
||||
#include "xy.h"
|
||||
#include "ship.h"
|
||||
#include "nsc.h"
|
||||
#include "nat.h"
|
||||
#include "path.h"
|
||||
#include "file.h"
|
||||
#include "plane.h"
|
||||
#include <fcntl.h>
|
||||
#include <ctype.h>
|
||||
#include "prototypes.h"
|
||||
|
||||
int
|
||||
have_looked(u_char uid, struct shiplook *head)
|
||||
on_shiplist(short uid, struct shiplist *head)
|
||||
{
|
||||
struct shiplook *s;
|
||||
struct shiplist *s;
|
||||
|
||||
s = head;
|
||||
if (s->uid == -1)
|
||||
return 0;
|
||||
|
||||
while (s != ((struct shiplook *)0)) {
|
||||
while (s != NULL) {
|
||||
if (s->uid == uid)
|
||||
return s->looked;
|
||||
return 1;
|
||||
s = s->next;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
have_found(u_char uid, struct shiplook *head)
|
||||
{
|
||||
struct shiplook *s;
|
||||
|
||||
s = head;
|
||||
if (s->uid == -1)
|
||||
return 0;
|
||||
|
||||
while (s != ((struct shiplook *)0)) {
|
||||
if (s->uid == uid)
|
||||
return s->found;
|
||||
s = s->next;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
set_have_looked(u_char uid, struct shiplook *head)
|
||||
add_shiplist(short uid, struct shiplist **head)
|
||||
{
|
||||
struct shiplook *s, *s2;
|
||||
struct shiplist *s, *s2;
|
||||
|
||||
s = head;
|
||||
if (s->uid == -1) {
|
||||
s->uid = uid;
|
||||
s->looked = 1;
|
||||
s->found = 0;
|
||||
s->next = (struct shiplook *)0;
|
||||
}
|
||||
s = *head;
|
||||
s2 = NULL;
|
||||
|
||||
while (s != ((struct shiplook *)0)) {
|
||||
while (s != NULL) {
|
||||
if (s->uid == uid) {
|
||||
s->looked = 1;
|
||||
return;
|
||||
}
|
||||
s2 = s;
|
||||
s = s->next;
|
||||
}
|
||||
|
||||
s = (struct shiplook *)malloc(sizeof(struct shiplook));
|
||||
memset(s, 0, sizeof(struct shiplook));
|
||||
s2->next = s;
|
||||
s = malloc(sizeof(struct shiplist));
|
||||
if (s2 != NULL)
|
||||
s2->next = s;
|
||||
else
|
||||
*head = s;
|
||||
s->uid = uid;
|
||||
s->looked = 1;
|
||||
s->next = (struct shiplook *)0;
|
||||
s->next = NULL;
|
||||
}
|
||||
|
||||
void
|
||||
set_have_found(u_char uid, struct shiplook *head)
|
||||
free_shiplist(struct shiplist **head)
|
||||
{
|
||||
struct shiplook *s, *s2;
|
||||
struct shiplist *s, *s2;
|
||||
|
||||
s = head;
|
||||
if (s->uid == -1) {
|
||||
s->uid = uid;
|
||||
s->looked = 0;
|
||||
s->found = 1;
|
||||
s->next = (struct shiplook *)0;
|
||||
}
|
||||
s = *head;
|
||||
|
||||
|
||||
while (s != ((struct shiplook *)0)) {
|
||||
if (s->uid == uid) {
|
||||
s->found = 1;
|
||||
return;
|
||||
}
|
||||
while (s != NULL) {
|
||||
s2 = s;
|
||||
s = s->next;
|
||||
free(s2);
|
||||
}
|
||||
|
||||
s = (struct shiplook *)malloc(sizeof(struct shiplook));
|
||||
memset(s, 0, sizeof(struct shiplook));
|
||||
s2->next = s;
|
||||
s->uid = uid;
|
||||
s->found = 1;
|
||||
s->next = (struct shiplook *)0;
|
||||
*head = NULL;
|
||||
}
|
||||
|
||||
int
|
||||
print_found(struct shiplook *head)
|
||||
void
|
||||
print_shiplist(struct shiplist *head)
|
||||
{
|
||||
struct shiplook *s;
|
||||
struct shiplist *s;
|
||||
int first;
|
||||
struct mchrstr *mp;
|
||||
struct shpstr ship;
|
||||
|
||||
s = head;
|
||||
first = 1;
|
||||
if (s->uid == -1)
|
||||
return 0;
|
||||
|
||||
while (s != ((struct shiplook *)0)) {
|
||||
while (s != NULL) {
|
||||
getship(s->uid, &ship);
|
||||
mp = &mchr[(int)ship.shp_type];
|
||||
if (first) {
|
||||
|
@ -165,6 +112,4 @@ print_found(struct shiplook *head)
|
|||
cname(ship.shp_own), effadv(ship.shp_effic), prship(&ship));
|
||||
s = s->next;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -209,7 +209,7 @@ planesatxy(coord x, coord y, int wantflags, int nowantflags,
|
|||
|
||||
int
|
||||
asw_shipsatxy(coord x, coord y, int wantflags, int nowantflags,
|
||||
struct plnstr *pp, struct shiplook *head)
|
||||
struct plnstr *pp, struct shiplist **head)
|
||||
{
|
||||
int first;
|
||||
int ships;
|
||||
|
@ -239,7 +239,7 @@ asw_shipsatxy(coord x, coord y, int wantflags, int nowantflags,
|
|||
shp_hardtarget(&ship), EF_SHIP))
|
||||
continue;
|
||||
}
|
||||
set_have_found(ship.shp_uid, head);
|
||||
add_shiplist(ship.shp_uid, head);
|
||||
if (first) {
|
||||
pr(" # owner eff type\n");
|
||||
first = 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue