Persistent game state encodes "who carries what" by storing the carrier uid in the cargo. Cargo lists augment that: they store lists of cargo for each carrier. They are not persistent. New unit_cargo_init() to compute the cargo lists from game state. Call it in ef_init_srv() and at the end of update_main(). New unit_onresize() to resize the cargo list data structure. Installed as units' struct empfile callback onresize to make them resize automatically with the unit files. New unit_carrier_change() to update cargo lists when carriers change in game state. Convenience wrappers pln_carrier_change(), lnd_carrier_change() and nuk_carrier_change(). Call them from prewrite callbacks to keep cargo lists in sync with game state. To make that work, unused units must not point to a carrier. Add new pln_oninit(), lnd_oninit() and nuk_oninit() take care of newly created units. Change lnd_prewrite() and nuk_prewrite() to take dead land units and nukes off their carrier. pln_prewrite() did that already. New unit_cargo_first(), unit_cargo_next() to traverse cargo lists. Convenience wrappers lnd_first_on_ship(), lnd_first_on_land(), lnd_next_on_unit(), pln_first_on_ship(), pln_first_on_land(), pln_next_on_unit() and nuk_on_plane(). The latter is disabled for now because it clashes with an existing function.
56 lines
2.1 KiB
C
56 lines
2.1 KiB
C
/*
|
|
* Empire - A multi-player, client/server Internet based war game.
|
|
* Copyright (C) 1986-2008, Dave Pare, Jeff Bailey, Thomas Ruschak,
|
|
* Ken Stevens, Steve McClure
|
|
*
|
|
* This program 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
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* 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
|
|
*
|
|
* ---
|
|
*
|
|
* See files README, COPYING and CREDITS in the root of the source
|
|
* tree for related information and legal notices. It is expected
|
|
* that future projects/authors will amend these files as needed.
|
|
*
|
|
* ---
|
|
*
|
|
* unit.h: Generalize unit data structures and functions.
|
|
*
|
|
* Known contributors to this file:
|
|
* Ron Koenderink, 2006-2007
|
|
* Markus Armbruster, 2006
|
|
*/
|
|
|
|
#include "empobj.h"
|
|
|
|
struct ulist {
|
|
struct emp_qelem queue; /* list of units */
|
|
double mobil; /* how much mobility the unit has left */
|
|
struct empobj_chr *chrp; /* pointer to characteristics unit */
|
|
union empobj_storage unit; /* unit */
|
|
coord x, y; /* x,y it came from LAND only */
|
|
int eff; /* LAND only */
|
|
int supplied; /* LAND only */
|
|
};
|
|
|
|
extern void unit_cargo_init(void);
|
|
extern void unit_carrier_change(struct empobj *, int, int, int);
|
|
extern int unit_cargo_first(int, int, int);
|
|
extern int unit_cargo_next(int, int);
|
|
extern int unit_onresize(int);
|
|
|
|
extern void unit_list(struct emp_qelem *);
|
|
extern void unit_put(struct emp_qelem *list, natid actor);
|
|
extern char *unit_path(int, struct empobj *, char *);
|
|
extern void unit_view(struct emp_qelem *);
|